@Test public void testSyntheticGeneration() { // given an array descriptor ArrayTypeDescriptor arrayDescriptor = createArrayType(""); ArrayElementDescriptor e1 = createArrayElement(0, "string"); ((SimpleTypeDescriptor) e1.getLocalType(false)).setValues("'Alice', 'Bob'"); arrayDescriptor.addElement(e1); ArrayElementDescriptor e2 = createArrayElement(1, "int"); ((SimpleTypeDescriptor) e2.getLocalType(false)).setValues("23,34"); arrayDescriptor.addElement(e2); // when creating a generator for the descriptor Generator<Object[]> generator = (Generator<Object[]>) arrayTypeGeneratorFactory.createGenerator( arrayDescriptor, "testSyntheticGeneration", false, Uniqueness.NONE, context); // it is expected to generate as specified generator.init(context); for (int i = 0; i < 10; i++) { Object[] product = GeneratorUtil.generateNonNull(generator); assertNotNull(product); assertTrue( "Expected 'Alice' or 'Bob', but was: " + product[0], "Alice".equals(product[0]) || "Bob".equals(product[0])); assertTrue((Integer) product[1] == 23 || (Integer) product[1] == 34); } }
@Test(expected = ConfigurationError.class) public void testIllegalSourceType() { ArrayTypeDescriptor descriptor = createArrayType(""); descriptor.setSource("illegalSource"); context.set("illegalSource", new File("txt.txt")); Generator<Object[]> generator = (Generator<Object[]>) arrayTypeGeneratorFactory.createGenerator( descriptor, "testIllegalSourceType", false, Uniqueness.NONE, context); generator.init(context); }
@Test public void testGenerator() { ArrayTypeDescriptor descriptor = createArrayType("testGenerator"); descriptor.setGenerator(PersonAttrArrayGenerator.class.getName()); Generator<Object[]> generator = (Generator<Object[]>) arrayTypeGeneratorFactory.createGenerator( descriptor, "testGenerator", false, Uniqueness.NONE, context); generator.init(context); for (int i = 0; i < 10; i++) assertEqualArrays(PersonAttrArrayGenerator.ALICE, GeneratorUtil.generateNonNull(generator)); }
@Test public void testXlsSource() { ArrayTypeDescriptor parent = createPersonDescriptor(); ArrayTypeDescriptor descriptor = createArrayType("testXlsSource", parent); descriptor.setSource("org/databene/benerator/factory/person.ent.xls"); Generator<Object[]> generator = (Generator<Object[]>) arrayTypeGeneratorFactory.createGenerator( descriptor, "testXlsSource", false, Uniqueness.NONE, context); context.set("otto_age", 89); generator.init(context); expectGeneratedSequence(generator, ALICE, OTTO).withCeasedAvailability(); }
@Test public void testGeneratorSource() { context.set("myGen", new PersonAttrArrayGenerator()); ArrayTypeDescriptor parent = createPersonDescriptor(); ArrayTypeDescriptor descriptor = createArrayType("testGeneratorSource", parent); descriptor.setSource("myGen"); Generator<Object[]> generator = (Generator<Object[]>) arrayTypeGeneratorFactory.createGenerator( descriptor, "testGeneratorSource", false, Uniqueness.NONE, context); generator.init(context); for (int i = 0; i < 10; i++) assertEqualArrays(ALICE, GeneratorUtil.generateNonNull(generator)); }
@Test public void testCsvSource() { ArrayTypeDescriptor parent = createPersonDescriptor(); ArrayTypeDescriptor descriptor = createArrayType("testCsvSource", parent); descriptor.setSource("org/databene/benerator/factory/person.ent.csv"); Generator<Object[]> generator = (Generator<Object[]>) arrayTypeGeneratorFactory.createGenerator( descriptor, "testCsvSource", false, Uniqueness.NONE, context); context.set("ottos_age", 89); generator.init(context); assertEqualArrays(ALICE, GeneratorUtil.generateNonNull(generator)); assertEqualArrays(OTTO, GeneratorUtil.generateNonNull(generator)); assertUnavailable(generator); }
@Test public void testEntitySource() { ArrayTypeDescriptor descriptor = createArrayType("testEntitySourceType"); descriptor.setSource(PersonSource.class.getName()); Generator<Object[]> generator = (Generator<Object[]>) arrayTypeGeneratorFactory.createGenerator( descriptor, "testEntitySource", false, Uniqueness.NONE, context); generator.init(context); for (int i = 0; i < 2; i++) { Object[] product = GeneratorUtil.generateNonNull(generator); assertTrue( "Found: " + ArrayFormat.format(product), Arrays.equals(ALICE, product) || Arrays.equals(BOB, product)); } assertUnavailable(generator); }
@Test public void testCsvDataset() { ArrayTypeDescriptor parent = createPersonDescriptor(); ArrayTypeDescriptor descriptor = createArrayType("testCsvDataset", parent); descriptor.setSource("org/databene/benerator/factory/dataset_{0}.csv"); descriptor.setNesting("org/databene/benerator/factory/testnesting"); descriptor.setDataset("DACH"); Generator<Object[]> generator = (Generator<Object[]>) arrayTypeGeneratorFactory.createGenerator( descriptor, "testCsvDataset", false, Uniqueness.SIMPLE, context); Generator<String> g = WrapperFactory.applyConverter( generator, new ArrayElementExtractor<String>(String.class, 0)); generator.init(context); expectUniquelyGeneratedSet(g, "de", "at", "ch"); assertUnavailable(generator); }
@Test public void testDatabaseSource() throws Exception { // prepare DB DBSystem db = new DBSystem( "db", HSQLUtil.getInMemoryURL("benerator"), HSQLUtil.DRIVER, "sa", null, context.getDataModel()); context.set("db", db); try { db.execute( "create table agft_person (" + " id int NOT NULL," + " name varchar(30) NOT NULL," + " age int NOT NULL" + ")"); db.execute("insert into agft_person (id, name, age) values (1, 'Alice', 23)"); db.execute("insert into agft_person (id, name, age) values (2, 'Otto', 89)"); // prepare descriptor ArrayTypeDescriptor parent = createPersonDescriptor(); ArrayTypeDescriptor descriptor = createArrayType("testDatabaseSource", parent); descriptor.setSource("db"); descriptor.setSelector("select name, age from agft_person"); Generator<Object[]> generator = (Generator<Object[]>) arrayTypeGeneratorFactory.createGenerator( descriptor, "testDatabaseSource", false, Uniqueness.NONE, context); generator.init(context); // verify results assertEqualArrays(ALICE, GeneratorUtil.generateNonNull(generator)); Object[] p2 = GeneratorUtil.generateNonNull(generator); assertEqualArrays(OTTO, p2); assertUnavailable(generator); } finally { db.execute("drop table agft_person if exists"); db.close(); } }