Skip to content

Commit 0febf5e

Browse files
committed
- F partial implementation of ParseInput with 3 parameters
1 parent 72ee1d5 commit 0febf5e

File tree

4 files changed

+154
-0
lines changed

4 files changed

+154
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package org.approvaltests;
2+
3+
import org.approvaltests.reporters.AutoApproveReporter;
4+
import org.approvaltests.reporters.UseReporter;
5+
import org.approvaltests.utils.parseinput.ParseInput;
6+
import org.junit.jupiter.api.Test;
7+
import org.lambda.query.Queryable;
8+
9+
public class Parse3InputTest
10+
{
11+
@Test
12+
void testWithTypesTransformersAndBoth()
13+
{
14+
var expected = """
15+
1,2.2,true -> 2.2
16+
1,3.3,false -> 0.0
17+
""";
18+
ParseInput.from(expected).withTypes(Integer.class, Double.class, Boolean.class)
19+
.verifyAll(t -> t.getFirst() * t.getSecond() * (t.getThird() ? 1 : 0));
20+
// ParseInput.from(expected).withTypes(Integer.class, Double.class).verifyAll((i, d) -> i * d);
21+
// ParseInput.from(expected).transformTo(Integer::parseInt, Double::parseDouble)
22+
// .verifyAll(t -> t.getFirst() * t.getSecond());
23+
// ParseInput.from(expected).withTypes(Integer.class, Double.class).transformTo((i, d) -> i * d)
24+
// .verifyAll(t -> t);
25+
}
26+
@Test
27+
void testPersonAge()
28+
{
29+
var expected = """
30+
Llewellyn, 25 -> Person[
31+
name=Llewellyn
32+
label=adult
33+
]
34+
Oliver, 15 -> Person[
35+
name=Oliver
36+
label=teenager
37+
]
38+
""";
39+
ParseInput.from(expected).multiline().withTypes(String.class, Integer.class).transformTo(Person::new)
40+
.verifyAll(Person::toString);
41+
}
42+
@Test
43+
@UseReporter(AutoApproveReporter.class)
44+
public void testArrays()
45+
{
46+
var expected = """
47+
1, 1 -> 2.0
48+
10 ,1, 1 -> 12.0
49+
5,5,7,7 -> 24.0
50+
""";
51+
ParseInput.from(expected).withTypes(Integer[].class).verifyAll(this::sum);
52+
}
53+
private Double sum(Integer[] integers)
54+
{
55+
return Queryable.of(integers).sum();
56+
}
57+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.spun.util;
2+
3+
public class Tuple3<H, K, L>
4+
{
5+
private final H first;
6+
private final K second;
7+
private final L third;
8+
public Tuple3(H first, K second, L third)
9+
{
10+
this.first = first;
11+
this.second = second;
12+
this.third = third;
13+
}
14+
public H getFirst()
15+
{
16+
return first;
17+
}
18+
public K getSecond()
19+
{
20+
return second;
21+
}
22+
public L getThird()
23+
{
24+
return third;
25+
}
26+
@Override
27+
public String toString()
28+
{
29+
return String.format("<%s,%s,%s>", first, second, third);
30+
}
31+
}

approvaltests/src/main/java/org/approvaltests/utils/parseinput/ParseInput.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,16 @@ public <T1, T2> ParseInputWith2Parameters<T1, T2> transformTo(Function1<String,
9292
{
9393
return ParseInputWith2Parameters.create(expected, transformer1, transformer2, options);
9494
}
95+
public <T1, T2, T3> ParseInputWith3Parameters<T1, T2, T3> withTypes(Class<T1> type1, Class<T2> type2, Class<T3> type3) {
96+
return ParseInputWith3Parameters.create(
97+
expected,
98+
getTransformerForClass(type1),
99+
getTransformerForClass(type2),
100+
getTransformerForClass(type3),
101+
options
102+
);
103+
}
104+
95105
public static class ParseInputOptions
96106
{
97107
public final boolean multiline;
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package org.approvaltests.utils.parseinput;
2+
3+
import com.spun.util.Tuple;
4+
import com.spun.util.Tuple3;
5+
import org.lambda.functions.Function1;
6+
import org.lambda.functions.Function2;
7+
import org.lambda.functions.Function3;
8+
import org.lambda.query.Queryable;
9+
10+
public class ParseInputWith3Parameters<IN1, IN2, IN3>
11+
{
12+
private final String expected;
13+
private final Function1<String, Tuple3<IN1, IN2, IN3>> transformer;
14+
private final ParseInput.ParseInputOptions options;
15+
16+
public ParseInputWith3Parameters(String expected, Function1<String, Tuple3<IN1, IN2, IN3>> transformer,
17+
ParseInput.ParseInputOptions options)
18+
{
19+
this.expected = expected;
20+
this.transformer = transformer;
21+
this.options = options;
22+
}
23+
24+
public static <IN1, IN2, IN3> ParseInputWith3Parameters<IN1, IN2, IN3> create(String expected,
25+
Function1<String, IN1> t1, Function1<String, IN2> t2, Function1<String, IN3> t3,
26+
ParseInput.ParseInputOptions options)
27+
{
28+
Function1<String, Tuple3<IN1, IN2, IN3>> f = s -> {
29+
Queryable<String> temp = Queryable.as(s.split(",")).select(String::trim);
30+
IN1 v1 = t1.call(temp.get(0));
31+
IN2 v2 = t2.call(temp.get(1));
32+
IN3 v3 = t3.call(temp.get(2));
33+
return new Tuple3<>(v1, v2, v3);
34+
};
35+
return new ParseInputWith3Parameters<>(expected, f, options);
36+
}
37+
38+
private ParseInput<Tuple3<IN1, IN2, IN3>> getParseInput()
39+
{
40+
return new ParseInput<>(expected, s -> new Tuple<>(s, transformer.call(s)), options);
41+
}
42+
43+
// public <OUT> ParseInputWith1Parameters<OUT> transformTo(Function3<Tuple3<IN1, IN2, IN3>, OUT> transform)
44+
// {
45+
// Function1<String, OUT> f1 = (t) -> {
46+
// Tuple3<IN1, IN2, IN3> transformed = transformer.call(t);
47+
// return transform.call(transformed);
48+
// };
49+
// return new ParseInputWith1Parameters<>(expected, f1, options);
50+
// }
51+
52+
public void verifyAll(Function1<Tuple3<IN1, IN2, IN3>, Object> transform)
53+
{
54+
getParseInput().verifyAll(transform);
55+
}
56+
}

0 commit comments

Comments
 (0)