continue; InspectorAssertion assertion = new InspectorAssertion(); assertion.value = inspectorMap.get(methodInspectorMap.get(inspector)); assertion.inspector = methodInspectorMap.get(inspector); assertion.source = var; if (Properties.isRegression()) { assertion.setComment("// (Inspector) Original Value: " + inspectorMap.get(methodInspectorMap.get(inspector)) + " | Regression Value: " + otherEntry.inspectorMap.get(otherEntry.methodInspectorMap.get(inspector))); assert (assertion.isValid());
/** * {@inheritDoc} */ @Override public boolean isDetectedBy(Assertion assertion) { if (assertion instanceof InspectorAssertion) { InspectorAssertion ass = (InspectorAssertion) assertion; if (ass.source.same(var)) { if (Properties.isRegression()) { // Use the internal map to locate the inspector assertion String key = ass.getInspector().getClassName() + " " + ass.getInspector().getMethodCall(); Inspector inspector = methodInspectorMap.get(key); if (inspector != null && inspectorMap.get(inspector) != null && ass.value != null) { return !inspectorMap.get(inspector).equals(ass.value); } } else { if (inspectorMap.containsKey(ass.inspector) && inspectorMap.get(ass.inspector) != null && ass.value != null) { return !inspectorMap.get(ass.inspector).equals(ass.value); } } } } return false; }
/** * {@inheritDoc} */ @Override public Set<Assertion> getAssertions() { Set<Assertion> assertions = new HashSet<Assertion>(); for (Inspector inspector : inspectorMap.keySet()) { InspectorAssertion assertion = new InspectorAssertion(); assertion.value = inspectorMap.get(inspector); assertion.inspector = inspector; assertion.source = var; assertions.add(assertion); assert (assertion.isValid()); } return assertions; }
/** {@inheritDoc} */ @Override public Assertion copy(TestCase newTestCase, int offset) { InspectorAssertion s = new InspectorAssertion(); s.source = newTestCase.getStatement(source.getStPosition() + offset).getReturnValue(); s.inspector = inspector; s.value = value; s.comment = comment; s.killedMutants.addAll(killedMutants); return s; }
@Test public void testLoaderOfEnumsAreChanged() throws NoSuchMethodException, SecurityException { InspectorAssertion assertion = new InspectorAssertion(); assertion.inspector = new Inspector(ExampleEnum.class, ExampleEnum.class.getMethod("testMe", new Class<?>[] {})); assertion.value = ExampleEnum.VALUE1; Assert.assertEquals(ExampleEnum.VALUE1, assertion.value); ClassLoader loader = TestGenerationContext.getInstance().getClassLoaderForSUT(); assertion.changeClassLoader(loader); Assert.assertNotEquals(ExampleEnum.VALUE1, assertion.value); } }
VariableReference source = assertion.getSource(); Object value = assertion.getValue(); Inspector inspector = assertion.getInspector(); Class<?> generatedType = inspector.getReturnType();
InspectorAssertion ia = (InspectorAssertion) a; try { aType = ia.getInspector().getMethod().getName(); } catch (NullPointerException e) { Statement s = ia.getStatement(); if (s instanceof MethodStatement) { aType = ((MethodStatement) s).getMethod().getName();
@Test public void testDownCastNecessaryForInspectorAssertion() throws NoSuchMethodException { TestCaseBuilder builder = new TestCaseBuilder(); VariableReference var = builder.appendConstructor(DowncastExample.class.getConstructor()); VariableReference num0 = builder.appendMethod(var, DowncastExample.class.getMethod("getAbstractFoo")); num0.setType(ConcreteSubclass.class); // This would be set during execution DefaultTestCase test = builder.getDefaultTestCase(); Inspector inspector = new Inspector(ConcreteSubclass.class, ConcreteSubclass.class.getMethod("getBar")); InspectorAssertion assertion = new InspectorAssertion(inspector, test.getStatement(num0.getStPosition()), num0, true); test.getStatement(num0.getStPosition()).addAssertion(assertion); test.removeDownCasts(); System.out.println(test); assertEquals(ConcreteSubclass.class, test.getStatement(1).getReturnClass()); }
@Test public void testDownCastUnnecessaryForInspectorAssertion() throws NoSuchMethodException { TestCaseBuilder builder = new TestCaseBuilder(); VariableReference var = builder.appendConstructor(DowncastExample.class.getConstructor()); VariableReference num0 = builder.appendMethod(var, DowncastExample.class.getMethod("getAbstractFoo")); num0.setType(ConcreteSubclass.class); // This would be set during execution DefaultTestCase test = builder.getDefaultTestCase(); Inspector inspector = new Inspector(ConcreteSubclass.class, ConcreteSubclass.class.getMethod("getFoo")); InspectorAssertion assertion = new InspectorAssertion(inspector, test.getStatement(num0.getStPosition()), num0, true); test.getStatement(num0.getStPosition()).addAssertion(assertion); test.removeDownCasts(); System.out.println(test); assertEquals(AbstractSuperclass.class, test.getStatement(1).getReturnClass()); }
private boolean assertionsNeedDownCast(Statement s, VariableReference var, Class<?> abstractClass) { for(Assertion assertion : s.getAssertions()) { if(assertion instanceof InspectorAssertion && assertion.getSource().equals(var)) { InspectorAssertion inspectorAssertion = (InspectorAssertion)assertion; Method inspectorMethod = inspectorAssertion.getInspector().getMethod(); if(!ClassUtils.hasMethod(abstractClass, inspectorMethod.getName(), inspectorMethod.getParameterTypes())) { return true; } } else if(assertion instanceof PrimitiveFieldAssertion && assertion.getSource().equals(var)) { PrimitiveFieldAssertion fieldAssertion = (PrimitiveFieldAssertion)assertion; if(!fieldAssertion.getField().getDeclaringClass().isAssignableFrom(abstractClass)) { return true; } } } return false; }
Assertion assertion = new InspectorAssertion(inspector, ms2, ms1.getReturnValue(), 0); ms2.addAssertion(assertion);
if (assertion instanceof InspectorAssertion) { InspectorAssertion ia = (InspectorAssertion) assertion; if (ia.getInspector().getMethod().equals(methodStatement.getMethod().getMethod())) { statement.removeAssertion(assertion); return;