diff --git a/src/org/labkey/test/util/TestDataGenerator.java b/src/org/labkey/test/util/TestDataGenerator.java index e2e3b3383e..e7f98490de 100644 --- a/src/org/labkey/test/util/TestDataGenerator.java +++ b/src/org/labkey/test/util/TestDataGenerator.java @@ -68,7 +68,7 @@ public class TestDataGenerator private static final String ALPHANUMERIC_STRING = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvxyz"; private final Map _columns = new CaseInsensitiveLinkedHashMap<>(); - private final Map>, Object>> _dataSuppliers = new CaseInsensitiveHashMap<>(); + private final Map> _dataSuppliers = new CaseInsensitiveHashMap<>(); private final Set _autoGeneratedFields = Collections.newSetFromMap(new CaseInsensitiveHashMap<>()); // Rows generated for next insert or TSV dump private final List> _rows = new ArrayList<>(); @@ -147,27 +147,21 @@ public TestDataGenerator withGeneratedRows(int desiredRowCount) return this; } - public TestDataGenerator addDataSupplier(String columnName, Function>, Object> supplier) - { - _dataSuppliers.put(columnName, supplier); - return this; - } - public TestDataGenerator addDataSupplier(String columnName, Supplier supplier) { - _dataSuppliers.put(columnName, ignored -> supplier.get()); + _dataSuppliers.put(columnName, ()-> supplier.get()); return this; } public TestDataGenerator addIntSupplier(String columnName, int min, int max) { - _dataSuppliers.put(columnName, ignored -> randomInt(min, max)); + _dataSuppliers.put(columnName, ()-> randomInt(min, max)); return this; } public TestDataGenerator addStringSupplier(String columnName, int length) { - _dataSuppliers.put(columnName, ignored -> randomString(length)); + _dataSuppliers.put(columnName, ()-> randomString(length)); return this; } @@ -257,34 +251,39 @@ private Map generateRow() final Map newRow = new CaseInsensitiveHashMap<>(); for (String columnName : _columns.keySet()) { - if (_autoGeneratedFields.contains(columnName) || _dataSuppliers.containsKey(columnName)) + if (!_dataSuppliers.containsKey(columnName)) + { + _dataSuppliers.put(columnName, getDefaultDataSupplier(_columns.get(columnName).getRangeURI())); + } + + if (_autoGeneratedFields.contains(columnName)) { continue; } - // Generate default values - Object columnValue = getDefaultDataSupplier(_columns.get(columnName).getRangeURI()).apply(_rows); + // Generate values + Object columnValue = _dataSuppliers.get(columnName).get(); newRow.put(columnName, columnValue); } return newRow; } - private Function>, Object> getDefaultDataSupplier(String columnType) + private Supplier getDefaultDataSupplier(String columnType) { switch (columnType.substring(columnType.indexOf('#') + 1).toLowerCase()) { case "string": - return __ -> randomString(20); + return ()-> randomString(20); case "int": - return __ -> randomInt(0, 20); + return ()-> randomInt(0, 20); case "float": - return __ -> randomFloat(0, 20); + return ()-> randomFloat(0, 20); case "double": - return __ -> randomDouble(0, 20); + return ()-> randomDouble(0, 20); case "boolean": - return __ -> randomBoolean(); + return ()-> randomBoolean(); case "date": case "datetime": - return __ -> randomDateString(DateUtils.addWeeks(new Date(), -39), new Date()); + return ()-> randomDateString(DateUtils.addWeeks(new Date(), -39), new Date()); default: throw new IllegalArgumentException("ColumnType " + columnType + " isn't implemented yet"); }