@Override public FieldValue convert(@Nonnull String value) { return NarrativeValue.valueOf(value); } };
@Override public FieldValue toFieldValue(ResultSet rs, int index) throws SQLException { return NarrativeValue.valueOf(rs.getString(index)); }
@Override public FieldValue apply(List<FieldValue> arguments) { StringBuilder concatenatedString = new StringBuilder(); for (int i=0; i<arguments.size(); i++) { if (arguments.get(i) == null) { continue; } String value = Casting.toString(arguments.get(i)); concatenatedString.append(value); } return NarrativeValue.valueOf(concatenatedString.toString()); }
@Override public NarrativeValue toFieldValue(Object hrdValue) { if(hrdValue instanceof Text) { return NarrativeValue.valueOf(((Text) hrdValue).getValue()); } else { return null; } } };
@Override public FieldValue get() { int houseNumber = 12 + random.nextInt(1530); String street = STREETS.get(random.nextInt(STREETS.size())); String streetSuffix = SUFFIXES[random.nextInt(SUFFIXES.length)]; String city = STREETS.get(random.nextInt(STREETS.size())); String state = randomLetter() + randomLetter(); int zipCode = random.nextInt(99999); return NarrativeValue.valueOf(String.format("%d %s %s\n%s, %s %5d", houseNumber, street, streetSuffix, city, state, zipCode)); }
@Override public FieldValue apply(List<FieldValue> arguments) { checkArity(arguments, numArgs); String substring = substring(text(arguments), startPosition(arguments), numChars(arguments)); if (arguments.get(0).getTypeClass().equals(FieldTypeClass.NARRATIVE)) { return NarrativeValue.valueOf(substring); } else { return TextValue.valueOf(substring); } }
@Test public void rightEmptyNumCharArgument() { FieldValue val1, val2; val1 = NarrativeValue.valueOf("Example"); val2 = NullFieldValue.INSTANCE; testIncorrectArguments(RightFunction.INSTANCE, Lists.newArrayList(val1,val2)); }
@Test public void leftEmptyNumCharArgument() { FieldValue val1, val2; val1 = NarrativeValue.valueOf("Example"); val2 = NullFieldValue.INSTANCE; testIncorrectArguments(LeftFunction.INSTANCE, Lists.newArrayList(val1,val2)); }
@Test public void midNarrative() { FieldValue val1, val2, val3, expectedOutput; val1 = NarrativeValue.valueOf("Example"); val2 = new Quantity(2); val3 = new Quantity(2); expectedOutput = NarrativeValue.valueOf("am"); testFieldValues(MidFunction.INSTANCE, Lists.newArrayList(val1,val2,val3), expectedOutput); }
@Test public void indexOutOfBoundsTest() { FieldValue val1, val2, val3, expectedOutput; val1 = NarrativeValue.valueOf("Example"); val2 = new Quantity(5); val3 = new Quantity(5); expectedOutput = NarrativeValue.valueOf(null); testFieldValues(MidFunction.INSTANCE, Lists.newArrayList(val1,val2,val3), expectedOutput); }
@Test public void concatenateSingleField() { FieldValue val1, expectedOutput; val1 = TextValue.valueOf("Left"); expectedOutput = NarrativeValue.valueOf("Left"); List<FieldValue> values = Lists.newArrayList(val1); List<FieldType> types = values.stream() .map(FieldValue::getTypeClass) .map(FieldTypeClass::createType) .collect(Collectors.toList()); assertThat(resolveFieldType(types), Matchers.equalTo(NarrativeType.INSTANCE)); assertThat(ConcatenateFunction.INSTANCE.apply(values), Matchers.equalTo(expectedOutput)); }
@Test public void rightIncorrectNumCharArgument() { FieldValue val1, val2; val1 = NarrativeValue.valueOf("Example"); val2 = TextValue.valueOf("2"); testIncorrectArguments(RightFunction.INSTANCE, Lists.newArrayList(val1,val2)); }
@Test public void midEmptyNumCharArgument() { FieldValue val1, val2, val3; val1 = NarrativeValue.valueOf("Example"); val2 = NullFieldValue.INSTANCE; val3 = new Quantity(2); testIncorrectArguments(MidFunction.INSTANCE, Lists.newArrayList(val1,val2,val3)); }
@Test public void leftIncorrectNumCharArgument() { FieldValue val1, val2; val1 = NarrativeValue.valueOf("Example"); val2 = TextValue.valueOf("2"); testIncorrectArguments(LeftFunction.INSTANCE, Lists.newArrayList(val1,val2)); }
@Test public void midIncorrectNumCharArgument() { FieldValue val1, val2, val3; val1 = NarrativeValue.valueOf("Example"); val2 = TextValue.valueOf("2"); val3 = new Quantity(2); testIncorrectArguments(MidFunction.INSTANCE, Lists.newArrayList(val1,val2,val3)); }
@Test public void concatenateNullFields() { FieldValue val1, val2, val3, expectedOutput; val1 = TextValue.valueOf("Left"); val2 = TextValue.valueOf(null); val3 = TextValue.valueOf("Right"); expectedOutput = NarrativeValue.valueOf("LeftRight"); List<FieldValue> values = Lists.newArrayList(val1, val2, val3); assertThat(ConcatenateFunction.INSTANCE.apply(values), Matchers.equalTo(expectedOutput)); }