1e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/* 2e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Copyright (c) 2007 Mockito contributors 3e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * This program is made available under the terms of the MIT License. 4e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 5e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpackage org.mockito.internal.invocation; 7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.hamcrest.Matcher; 9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.exceptions.Reporter; 10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.matchers.LocalizedMatcher; 11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.progress.ArgumentMatcherStorage; 12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.invocation.Invocation; 13e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.io.Serializable; 15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.util.List; 16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson@SuppressWarnings("unchecked") 18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpublic class MatchersBinder implements Serializable { 19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson private static final long serialVersionUID = -311433939339443463L; 21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public InvocationMatcher bindMatchers(ArgumentMatcherStorage argumentMatcherStorage, Invocation invocation) { 23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson List<LocalizedMatcher> lastMatchers = argumentMatcherStorage.pullLocalizedMatchers(); 24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson validateMatchers(invocation, lastMatchers); 25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson InvocationMatcher invocationWithMatchers = new InvocationMatcher(invocation, (List<Matcher>)(List) lastMatchers); 27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return invocationWithMatchers; 28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 29e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 30e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson private void validateMatchers(Invocation invocation, List<LocalizedMatcher> lastMatchers) { 31e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson if (!lastMatchers.isEmpty()) { 32e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson int recordedMatchersSize = lastMatchers.size(); 33e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson int expectedMatchersSize = invocation.getArguments().length; 34e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson if (expectedMatchersSize != recordedMatchersSize) { 35e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson new Reporter().invalidUseOfMatchers(expectedMatchersSize, lastMatchers); 36e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 37e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 38e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 39e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson}