private Object[] arguments(SourceOfRandomness random, GenerationStatus status) { Object[] args = new Object[parameters.length]; for (int i = 0; i < args.length; ++i) args[i] = parameterGenerators.get(i).generate(random, status); return args; } }
@Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if (Object.class.equals(method.getDeclaringClass())) return handleObjectMethod(proxy, method, args); if (method.isDefault()) return handleDefaultMethod(proxy, method, args); SourceOfRandomness source = new SourceOfRandomness(new Random()); source.setSeed(Arrays.hashCode(args)); GenerationStatus status = new SimpleGenerationStatus(new GeometricDistribution(), source, attempts); return returnValueGenerator.generate(source, status); }
@Override public T generate(SourceOfRandomness random, GenerationStatus status) { Class<T> type = types().get(0); Object generated = instantiate(type); for (Field each : fields) { setField( each, generated, gen().field(each).generate(random, status), true); } return type.cast(generated); }
public static <T> T functionValue(Generator<T> generator, Object[] args) { SourceOfRandomness source = new SourceOfRandomness(new Random()); source.setSeed(Arrays.hashCode(args)); return generator.generate(source, null); } }
@Test public void choosingFromSubtypes() { Generator<? extends Number> g = repo.oneOf(Float.class, Double.class, BigDecimal.class); Number n = g.generate(random, null); assertThat( n, anyOf( instanceOf(Float.class), instanceOf(Double.class), instanceOf(BigDecimal.class))); }
@SuppressWarnings("unchecked") @Override public A generate(SourceOfRandomness r, GenerationStatus s) { String someString = gen().type(String.class).generate(r, s); int someInt = gen().type(int.class).generate(r, s); Generator<List> listOfB = gen().type(List.class, B.class); A a = new A(someString, someInt); a.setListOfB(listOfB.generate(r, s)); return a; } }
@SuppressWarnings("unchecked") @Override public A generate( SourceOfRandomness random, GenerationStatus status) { A a = new A(); a.b = gen().type(Box.class, Foo.class).generate(random, status); return a; } }
@Override public A generate( SourceOfRandomness random, GenerationStatus status) { A a = new A(); a.foo = gen().type(Foo.class).generate(random, status); return a; } }
@Override public A generate( SourceOfRandomness random, GenerationStatus status) { A a = new A(); a.b = gen().constructor(B.class, int.class) .generate(random, status); return a; } }
@Override public A generate( SourceOfRandomness random, GenerationStatus status) { A a = new A(); a.b = gen().constructor(B.class, Foo.class, Box.class) .generate(random, status); return a; } }
@Override public A generate( SourceOfRandomness random, GenerationStatus status) { A a = new A(); a.b = gen().type(Box[].class).generate(random, status); return a; } }
@Override public A generate( SourceOfRandomness random, GenerationStatus status) { A a = new A(); a.b = gen().fieldsOf(B.class).generate(random, status); return a; } }
@Override public A generate( SourceOfRandomness random, GenerationStatus status) { A a = new A(); a.foos = gen().type(Foo[][].class).generate(random, status); return a; } }
@Test public void choosingFromGenerators() { Generator<? extends Number> g = repo.oneOf(new AByte(), new AShort()); Number n = g.generate(random, null); assertThat( n, anyOf(instanceOf(Byte.class), instanceOf(Short.class))); } }