/** {@inheritDoc} */ @Override public VariableReference getReturnValue(int position) { return getStatement(position).getReturnValue(); }
/** {@inheritDoc} */ @Override public VariableReference getRandomNonNullNonPrimitiveObject(Type type, int position) throws ConstructionFailedException { Inputs.checkNull(type); List<VariableReference> variables = getObjects(type, position); Iterator<VariableReference> iterator = variables.iterator(); while (iterator.hasNext()) { VariableReference var = iterator.next(); if (var instanceof NullReference) iterator.remove(); else if (getStatement(var.getStPosition()) instanceof PrimitiveStatement) iterator.remove(); else if (var.isPrimitive() || var.isWrapperType()) iterator.remove(); else if(this.getStatement(var.getStPosition()) instanceof FunctionalMockStatement && !(this.getStatement(var.getStPosition()) instanceof FunctionalMockForAbstractClassStatement)) iterator.remove(); } if (variables.isEmpty()) throw new ConstructionFailedException("Found no variables of type " + type + " at position " + position); return Randomness.choice(variables); }
/** {@inheritDoc} */ @Override public VariableReference getRandomNonNullObject(Type type, int position) throws ConstructionFailedException { Inputs.checkNull(type); List<VariableReference> variables = getObjects(type, position); Iterator<VariableReference> iterator = variables.iterator(); while (iterator.hasNext()) { VariableReference ref = iterator.next(); if (ref instanceof NullReference || (this.getStatement(ref.getStPosition()) instanceof FunctionalMockStatement) ) { iterator.remove(); } } if (variables.isEmpty()) throw new ConstructionFailedException("Found no variables of type " + type + " at position " + position); return Randomness.choice(variables); }
@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 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()); }
@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 testGetCandidatesForReuse() throws ClassNotFoundException, NoSuchFieldException, ConstructionFailedException, NoSuchMethodException { TestFactory testFactory = TestFactory.getInstance(); Class<?> sut = TestGenerationContext.getInstance().getClassLoaderForSUT().loadClass(FactoryExample.class.getCanonicalName()); Properties.PRIMITIVE_REUSE_PROBABILITY = 1.0; Properties.OBJECT_REUSE_PROBABILITY = 1.0; DefaultTestCase test = new DefaultTestCase(); GenericConstructor constructor = new GenericConstructor(sut.getConstructor(), sut); VariableReference var1 = testFactory.addConstructor(test, constructor, 0, 0); test.addStatement(new CharPrimitiveStatement(test,'-')); GenericMethod method = new GenericMethod(sut.getMethod("testInt", int.class), sut); testFactory.addMethodFor(test, var1, method, 2); MethodStatement stmt = (MethodStatement)test.getStatement(test.size()-1); VariableReference var = stmt.getParameterReferences().get(0); assertNotEquals("Char should not be passed as Integer", var.getType(), char.class); assertEquals("Incorrect test size", 4, test.size()); } }