/* * Copyright (c) 2006-2013 Rogério Liesenfeld * This file is subject to the terms of the MIT license (see LICENSE.txt). */ package mockit.internal.expectations.invocation; import java.util.*; import mockit.internal.expectations.argumentMatching.*; final class ArgumentValuesAndMatchersWithoutVarargs extends ArgumentValuesAndMatchers { ArgumentValuesAndMatchersWithoutVarargs(InvocationArguments signature, Object[] values) { super(signature, values); } @Override boolean isMatch(Object[] replayArgs, Map<Object, Object> instanceMap) { if (matchers == null) { return areEqual(values, replayArgs, replayArgs.length, instanceMap); } for (int i = 0; i < replayArgs.length; i++) { Object actual = replayArgs[i]; ArgumentMatcher expected = getArgumentMatcher(i); if (expected == null) { Object arg = values[i]; if (arg == null) continue; expected = new EqualityMatcher(arg); } if (!expected.matches(actual)) { return false; } } return true; } @Override Error assertMatch(Object[] replayArgs, Map<Object, Object> instanceMap, CharSequence errorMessagePrefix) { if (matchers == null) { return assertEquals(values, replayArgs, replayArgs.length, instanceMap, errorMessagePrefix); } for (int i = 0; i < replayArgs.length; i++) { Object actual = replayArgs[i]; ArgumentMatcher expected = getArgumentMatcher(i); if (expected == null) { Object arg = values[i]; if (arg == null) continue; expected = new EqualityMatcher(arg); } if (!expected.matches(actual)) { return signature.argumentMismatchMessage(i, expected, actual, errorMessagePrefix); } } return null; } @Override boolean hasEquivalentMatchers(ArgumentValuesAndMatchers other) { int i = indexOfFirstValueAfterEquivalentMatchers(other); if (i < 0) { return false; } while (i < values.length) { if (!EqualityMatcher.areEqual(values[i], other.values[i])) { return false; } i++; } return true; } }