/** * Returns a new instance with the specified value, retaining the current failures. * <p> * This can be useful as an inline alternative to {@link #map(Function)}. * * @param <R> the type of the value in the returned result * @param value the new value * @return the combined instance of value and failures */ public <R> ValueWithFailures<R> withValue(R value) { return ValueWithFailures.of(value, this.failures); }
/** * Returns a new instance with the specified value, combining the failures. * <p> * This can be useful as an inline alternative to {@link #flatMap(Function)}. * * @param <R> the type of the value in the returned result * @param value the new value * @param additionalFailures the additional failures * @return the combined instance of value and failures */ public <R> ValueWithFailures<R> withValue(R value, List<FailureItem> additionalFailures) { return ValueWithFailures.of(value, concatToList(this.failures, additionalFailures)); }
/** * Returns a new instance with the specified failures, retaining the current value. * * @param additionalFailures the additional failures * @return the combined instance of value and failures */ public ValueWithFailures<T> withAdditionalFailures(List<FailureItem> additionalFailures) { return ValueWithFailures.of(value, concatToList(this.failures, additionalFailures)); }
private static ValueWithFailures<Double> mockCalc(double value) { FailureItem failure = FailureItem.of( FailureReason.CALCULATION_FAILED, "Error calculating result for input value {}", value); return ValueWithFailures.of(value, ImmutableList.of(failure)); }
private ValueWithFailures<List<Integer>> flatMapFunction(List<String> input) { List<Integer> integers = new ArrayList<>(); List<FailureItem> failures = new ArrayList<>(); for (String str : input) { try { integers.add(Integer.valueOf(str)); } catch (NumberFormatException ex) { failures.add(FailureItem.of(FailureReason.INVALID, ex)); } } return ValueWithFailures.of(integers, failures); }
@Test public void test_combining() { ValueWithFailures<List<String>> base = ValueWithFailures.of(ImmutableList.of("a"), ImmutableList.of(FAILURE1)); ValueWithFailures<List<String>> other = ValueWithFailures.of(ImmutableList.of("b", "c"), ImmutableList.of(FAILURE2)); ValueWithFailures<List<String>> test = Stream.of(base, other) .reduce(ValueWithFailures.combiningValues(Guavate::concatToList)) .get(); assertEquals(test.getValue(), ImmutableList.of("a", "b", "c")); assertEquals(test.getFailures(), ImmutableList.of(FAILURE1, FAILURE2)); }
public void test_combinedWith_differentTypes() { ValueWithFailures<Boolean> base = ValueWithFailures.of(Boolean.TRUE, ImmutableList.of(FAILURE1)); ValueWithFailures<Integer> other = ValueWithFailures.of(Integer.valueOf(1), ImmutableList.of(FAILURE2)); ValueWithFailures<String> test = base.combinedWith(other, (a, b) -> a.toString() + b.toString()); assertEquals(test.getValue(), "true1"); assertEquals(test.getFailures(), ImmutableList.of(FAILURE1, FAILURE2)); }
public void test_combinedWith() { ValueWithFailures<List<String>> base = ValueWithFailures.of(ImmutableList.of("a"), ImmutableList.of(FAILURE1)); ValueWithFailures<List<String>> other = ValueWithFailures.of(ImmutableList.of("b", "c"), ImmutableList.of(FAILURE2)); ValueWithFailures<List<String>> test = base.combinedWith(other, Guavate::concatToList); assertEquals(test.getValue(), ImmutableList.of("a", "b", "c")); assertEquals(test.getFailures(), ImmutableList.of(FAILURE1, FAILURE2)); }
public void test_withValue_ValueWithFailures() { ValueWithFailures<List<String>> base = ValueWithFailures.of(ImmutableList.of("a"), ImmutableList.of(FAILURE1)); ValueWithFailures<String> test = base.withValue(ValueWithFailures.of("combined", ImmutableList.of(FAILURE2))); assertEquals(test.getValue(), "combined"); assertEquals(test.getFailures(), ImmutableList.of(FAILURE1, FAILURE2)); }
public void test_withValue_valueFailures() { ValueWithFailures<List<String>> base = ValueWithFailures.of(ImmutableList.of("a"), ImmutableList.of(FAILURE1)); ValueWithFailures<String> test = base.withValue("combined", ImmutableList.of(FAILURE2)); assertEquals(test.getValue(), "combined"); assertEquals(test.getFailures(), ImmutableList.of(FAILURE1, FAILURE2)); }
public void test_withValue_value() { ValueWithFailures<List<String>> base = ValueWithFailures.of(ImmutableList.of("a"), ImmutableList.of(FAILURE1)); ValueWithFailures<String> test = base.withValue("combined"); assertEquals(test.getValue(), "combined"); assertEquals(test.getFailures(), ImmutableList.of(FAILURE1)); }
public void test_map() { ValueWithFailures<List<String>> base = ValueWithFailures.of(ImmutableList.of("1", "2"), ImmutableList.of(FAILURE1)); ValueWithFailures<List<Integer>> test = base.map(list -> list.stream().map(s -> Integer.valueOf(s)).collect(toImmutableList())); assertEquals(test.getValue(), ImmutableList.of(Integer.valueOf(1), Integer.valueOf(2))); assertEquals(test.getFailures(), ImmutableList.of(FAILURE1)); }
public void test_of_list() { ValueWithFailures<String> test = ValueWithFailures.of("success", ImmutableList.of(FAILURE1, FAILURE2)); assertEquals(test.hasFailures(), true); assertEquals(test.getValue(), "success"); assertEquals(test.getFailures(), ImmutableList.of(FAILURE1, FAILURE2)); }
public void test_of_array_noFailures() { ValueWithFailures<String> test = ValueWithFailures.of("success"); assertEquals(test.hasFailures(), false); assertEquals(test.getValue(), "success"); assertEquals(test.getFailures(), ImmutableList.of()); }
public void test_of_supplier_success() { ValueWithFailures<String> test = ValueWithFailures.of("", () -> "A"); assertEquals(test.hasFailures(), false); assertEquals(test.getValue(), "A"); assertEquals(test.getFailures(), ImmutableList.of()); }
public void test_withAdditionalFailures() { ValueWithFailures<String> base = ValueWithFailures.of("combined", ImmutableList.of(FAILURE1)); ValueWithFailures<String> test = base.withAdditionalFailures(ImmutableList.of(FAILURE2)); assertEquals(test.getValue(), "combined"); assertEquals(test.getFailures(), ImmutableList.of(FAILURE1, FAILURE2)); }
public void test_of_array() { ValueWithFailures<String> test = ValueWithFailures.of("success", FAILURE1, FAILURE2); assertEquals(test.hasFailures(), true); assertEquals(test.getValue(), "success"); assertEquals(test.getFailures(), ImmutableList.of(FAILURE1, FAILURE2)); }
public void test_flatMap() { ValueWithFailures<List<String>> base = ValueWithFailures.of(ImmutableList.of("1", "a", "2"), ImmutableList.of(FAILURE1)); ValueWithFailures<List<Integer>> test = base.flatMap(this::flatMapFunction); assertEquals(test.getValue(), ImmutableList.of(Integer.valueOf(1), Integer.valueOf(2))); assertEquals(test.getFailures().size(), 2); assertEquals(test.getFailures().get(0), FAILURE1); assertEquals(test.getFailures().get(1).getReason(), FailureReason.INVALID); }
public void test_of_supplier_failure() { ValueWithFailures<String> test = ValueWithFailures.of("", () -> { throw new IllegalArgumentException(); }); assertEquals(test.hasFailures(), true); assertEquals(test.getValue(), ""); assertEquals(test.getFailures().size(), 1); assertEquals(test.getFailures().get(0).getReason(), FailureReason.ERROR); }