private void removeUnnecessaryDownCasts(List<ExecutionResult> results) { for(ExecutionResult result : results) { if(result.test instanceof DefaultTestCase) { ((DefaultTestCase)result.test).removeDownCasts(); } } }
@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()); }
@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 testDownCastUnnecessaryForField() throws NoSuchMethodException, NoSuchFieldException { 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(); PrimitiveFieldAssertion assertion = new PrimitiveFieldAssertion(); assertion.setValue(true); assertion.setSource(num0); assertion.setField(AbstractSuperclass.class.getField("fieldInAbstractClass")); test.getStatement(num0.getStPosition()).addAssertion(assertion); test.removeDownCasts(); System.out.println(test); assertEquals(AbstractSuperclass.class, test.getStatement(1).getReturnClass()); }
@Test public void testDownCastNecessaryForField() throws NoSuchMethodException, NoSuchFieldException { 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(); PrimitiveFieldAssertion assertion = new PrimitiveFieldAssertion(); assertion.setValue(true); assertion.setSource(num0); assertion.setField(ConcreteSubclass.class.getField("fieldInConcreteClass")); test.getStatement(num0.getStPosition()).addAssertion(assertion); test.removeDownCasts(); System.out.println(test); assertEquals(ConcreteSubclass.class, test.getStatement(1).getReturnClass()); }
@Test public void testFieldReferenceNeedsDowncast() throws NoSuchMethodException, NoSuchFieldException { 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 VariableReference bool0 = builder.appendBooleanPrimitive(true); DefaultTestCase test = builder.getDefaultTestCase(); FieldReference fr = new FieldReference(test, new GenericField(ConcreteSubclass.class.getField("fieldInConcreteClass"), ConcreteSubclass.class), num0); AssignmentStatement statement = new AssignmentStatement(test, fr, bool0); test.addStatement(statement); test.removeDownCasts(); System.out.println(test); FieldReference fr2 = (FieldReference)test.getStatement(3).getReturnValue(); assertEquals(ConcreteSubclass.class, fr2.getSource().getVariableClass()); }
@Test public void testFieldReferenceDoesNotNeedDowncast() throws NoSuchMethodException, NoSuchFieldException { 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 VariableReference bool0 = builder.appendBooleanPrimitive(true); DefaultTestCase test = builder.getDefaultTestCase(); FieldReference fr = new FieldReference(test, new GenericField(AbstractSuperclass.class.getField("fieldInAbstractClass"), AbstractSuperclass.class), num0); AssignmentStatement statement = new AssignmentStatement(test, fr, bool0); test.addStatement(statement); test.removeDownCasts(); System.out.println(test); FieldReference fr2 = (FieldReference)test.getStatement(3).getReturnValue(); assertEquals(AbstractSuperclass.class, fr2.getSource().getVariableClass()); }
@Test public void testUnnecessaryDownCast() throws NoSuchMethodException { TestCaseBuilder builder = new TestCaseBuilder(); VariableReference var = builder.appendConstructor(DowncastExample.class.getConstructor()); VariableReference int0 = builder.appendIntPrimitive(42); VariableReference num0 = builder.appendMethod(var, DowncastExample.class.getMethod("getANumber", new Class<?>[] {int.class}), int0); num0.setType(Integer.class); // This would be set during execution VariableReference boolean0 = builder.appendMethod(var, DowncastExample.class.getMethod("testMe", new Class<?>[] {Number.class}), num0); PrimitiveAssertion assertion = new PrimitiveAssertion(); assertion.setSource(boolean0); assertion.setValue(false); DefaultTestCase test = builder.getDefaultTestCase(); test.getStatement(boolean0.getStPosition()).addAssertion(assertion); test.removeDownCasts(); assertEquals(Number.class, test.getStatement(2).getReturnClass()); }
@Test public void testNecessaryDownCast() throws NoSuchMethodException { TestCaseBuilder builder = new TestCaseBuilder(); VariableReference var = builder.appendConstructor(DowncastExample.class.getConstructor()); VariableReference int0 = builder.appendIntPrimitive(42); VariableReference num0 = builder.appendMethod(var, DowncastExample.class.getMethod("getANumber", new Class<?>[] {int.class}), int0); num0.setType(Integer.class); // This would be set during execution VariableReference boolean0 = builder.appendMethod(var, DowncastExample.class.getMethod("testWithInteger", new Class<?>[] {Integer.class}), num0); PrimitiveAssertion assertion = new PrimitiveAssertion(); assertion.setSource(boolean0); assertion.setValue(false); DefaultTestCase test = builder.getDefaultTestCase(); test.getStatement(boolean0.getStPosition()).addAssertion(assertion); test.removeDownCasts(); assertEquals(Integer.class, test.getStatement(2).getReturnClass()); }