Skip to content

Commit 0f67326

Browse files
author
Julien Letrouit
committed
Unit tests for equality assertions and simplifications
1 parent d57c016 commit 0f67326

5 files changed

Lines changed: 83 additions & 80 deletions

File tree

src/main/java/engine/Assertions.java

Lines changed: 14 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -102,43 +102,6 @@ public static ResultAssertion assertAskedInStdIn() {
102102
};
103103
}
104104

105-
public static ResultAssertion assertReturnValueEquals(final int expected) {
106-
return (p, res) -> {
107-
if (res.executionResult == null) {
108-
p.println(format(EXPECTED_TO_RETURN_BUT_RETURNED_NULL, Formats.Red, code(res.resultExpressionSourceCode), code(expected)));
109-
return false;
110-
} else if (!(res.executionResult instanceof Integer)) {
111-
p.println(format(EXPECTED_TO_RETURN_INT_BUT_RETURNED_OTHER_TYPE, Formats.Red, code(res.resultExpressionSourceCode), code(res.executionResult.getClass().getSimpleName())));
112-
return false;
113-
} else if (((Integer)res.executionResult).intValue() != expected) {
114-
p.println(format(EXPECTED_TO_RETURN_BUT_RETURNED, Formats.Red, code(res.resultExpressionSourceCode), code(Integer.toString(expected)), code(res.executionResult.toString())));
115-
return false;
116-
}
117-
118-
p.println(format(OK_RETURNED, Formats.Green, code(res.resultExpressionSourceCode), code(expected)));
119-
return true;
120-
};
121-
}
122-
123-
public static ResultAssertion assertReturnValueEquals(final int[] expected) {
124-
return (p, res) -> {
125-
final Formatted<String> expectedFmted = code(Expression.formatLiteralSourceCode(expected));
126-
if (res.executionResult == null) {
127-
p.println(format(EXPECTED_TO_RETURN_BUT_RETURNED_NULL, Formats.Red, code(res.resultExpressionSourceCode), expectedFmted));
128-
return false;
129-
} else if (!(res.executionResult instanceof int[])) {
130-
p.println(format(EXPECTED_TO_RETURN_INT_ARRAY_BUT_RETURNED_OTHER_TYPE, Formats.Red, code(res.resultExpressionSourceCode), code(res.executionResult.getClass().getSimpleName())));
131-
return false;
132-
} else if (!Arrays.equals(expected, (int[])res.executionResult)) {
133-
p.println(format(EXPECTED_TO_RETURN_BUT_RETURNED, Formats.Red, code(res.resultExpressionSourceCode), expectedFmted, code(Expression.formatLiteralSourceCode((int[])res.executionResult))));
134-
return false;
135-
}
136-
137-
p.println(format(OK_RETURNED, Formats.Green, code(res.resultExpressionSourceCode), expectedFmted));
138-
return true;
139-
};
140-
}
141-
142105
private static final double EPSILON = 0.0000000001;
143106
private static boolean eq(Object expected, Object actual) {
144107
if (actual == null) {
@@ -157,14 +120,15 @@ public static ResultAssertion assertVariableEquals(final String variableName, fi
157120
final Object val = res.executionContext.getVariableValue(variableName);
158121
final Formatted<String> expectedFmted = code(Expression.formatLiteralSourceCode(expected));
159122
final Formatted<String> actualFmted = code(Expression.formatLiteralSourceCode(val));
123+
final Formatted<String> expressionFmted = code(res.resultExpressionSourceCode);
160124
if (val == null) {
161-
p.println(format(EXPECTED_VARIABLE_TO_EQUAL_BUT_IS_NULL, Formats.Red, code(res.resultExpressionSourceCode), code(variableName), expectedFmted));
125+
p.println(format(EXPECTED_VARIABLE_TO_EQUAL_BUT_IS_NULL, Formats.Red, expressionFmted, code(variableName), expectedFmted));
162126
return false;
163127
} else if (val.getClass() != expected.getClass()) {
164-
p.println(format(EXPECTED_VARIABLE_TO_BE_BUT_WAS_OTHER_TYPE, Formats.Red, code(res.resultExpressionSourceCode), code(variableName), code(expected.getClass().getSimpleName()), code(val.getClass().getSimpleName())));
128+
p.println(format(EXPECTED_VARIABLE_TO_BE_BUT_WAS_OTHER_TYPE, Formats.Red, expressionFmted, code(variableName), code(expected.getClass().getSimpleName()), code(val.getClass().getSimpleName())));
165129
return false;
166130
} else if (!eq(expected, val)) {
167-
p.println(format(EXPECTED_VARIABLE_TO_EQUAL_BUT_EQUAL, Formats.Red, code(res.resultExpressionSourceCode), code(variableName), expectedFmted, actualFmted));
131+
p.println(format(EXPECTED_VARIABLE_TO_EQUAL_BUT_EQUAL, Formats.Red, expressionFmted, code(variableName), expectedFmted, actualFmted));
168132
return false;
169133
}
170134

@@ -173,38 +137,23 @@ public static ResultAssertion assertVariableEquals(final String variableName, fi
173137
};
174138
}
175139

176-
public static ResultAssertion assertReturnValueEquals(final double expected) {
177-
return (p, res) -> {
178-
if (res.executionResult == null) {
179-
p.println(format(EXPECTED_TO_RETURN_BUT_RETURNED_NULL, Formats.Red, res.resultExpressionSourceCode, expected));
180-
return false;
181-
} else if (!(res.executionResult instanceof Double)) {
182-
p.println(format(EXPECTED_TO_RETURN_DOUBLE_BUT_RETURNED_OTHER_TYPE, Formats.Red, code(res.resultExpressionSourceCode), res.executionResult.getClass().getSimpleName()));
183-
return false;
184-
} else if (!eq(res.executionResult, expected)) {
185-
p.println(format(EXPECTED_TO_RETURN_BUT_RETURNED, Formats.Red, res.resultExpressionSourceCode, expected, ((Double)res.executionResult).doubleValue()));
186-
return false;
187-
}
188-
189-
p.println(format(OK_RETURNED, Formats.Green, code(res.resultExpressionSourceCode), code(expected)));
190-
return true;
191-
};
192-
}
193-
194-
public static ResultAssertion assertReturnValueEquals(final boolean expected) {
140+
public static ResultAssertion assertReturnValueEquals(final Object expected) {
195141
return (p, res) -> {
142+
final Formatted<String> expectedFmted = code(Expression.formatLiteralSourceCode(expected));
143+
final Formatted<String> actualFmted = code(Expression.formatLiteralSourceCode(res.executionResult));
144+
final Formatted<String> expressionFmted = code(res.resultExpressionSourceCode);
196145
if (res.executionResult == null) {
197-
p.println(format(EXPECTED_TO_RETURN_BUT_RETURNED_NULL, Formats.Red, res.resultExpressionSourceCode, expected));
146+
p.println(format(EXPECTED_TO_RETURN_BUT_RETURNED_NULL, Formats.Red, expressionFmted, expectedFmted));
198147
return false;
199-
} else if (!(res.executionResult instanceof Boolean)) {
200-
p.println(format(EXPECTED_TO_RETURN_BOOLEAN_BUT_RETURNED_OTHER_TYPE, Formats.Red, code(res.resultExpressionSourceCode), res.executionResult.getClass().getSimpleName()));
148+
} else if (res.executionResult.getClass() != expected.getClass()) {
149+
p.println(format(EXPECTED_TO_RETURN_BUT_RETURNED_OTHER_TYPE, Formats.Red, expressionFmted, code(expected.getClass().getSimpleName()), code(res.executionResult.getClass().getSimpleName())));
201150
return false;
202-
} else if (((Boolean)res.executionResult).booleanValue() != expected) {
203-
p.println(format(EXPECTED_TO_RETURN_BUT_RETURNED, Formats.Red, res.resultExpressionSourceCode, expected, ((Boolean)res.executionResult).booleanValue()));
151+
} else if (!eq(expected, res.executionResult)) {
152+
p.println(format(EXPECTED_TO_RETURN_BUT_RETURNED, Formats.Red, expressionFmted, expectedFmted, actualFmted));
204153
return false;
205154
}
206155

207-
p.println(format(OK_RETURNED, Formats.Green, code(res.resultExpressionSourceCode), code(expected)));
156+
p.println(format(OK_RETURNED, Formats.Green, expressionFmted, expectedFmted));
208157
return true;
209158
};
210159
}

src/main/java/engine/Texts.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -168,21 +168,9 @@ public class Texts {
168168
public static Localizable<String> OK_RETURNED =
169169
local("Ok: %s returned %s.")
170170
.fr("Ok: %s a retourné %s.");
171-
public static Localizable<String> EXPECTED_VARIABLE_TO_BE_INT_ARRAY_BUT_WAS_OTHER_TYPE =
172-
local("Expected %s to result in %s being an integer array but was a '%s' instead!")
173-
.fr("Attendu à ce que %s résulte en %s étant un tableau d'entiers mais était un '%s' à la place!");
174171
public static Localizable<String> EXPECTED_TO_RETURN_INT_BUT_RETURNED_OTHER_TYPE =
175172
local("Expected %s to return an integer but returned a '%s' instead!")
176173
.fr("Attendu à ce que %s retourne un entier mais a retourné un '%s' à la place!");
177-
public static Localizable<String> EXPECTED_TO_RETURN_INT_ARRAY_BUT_RETURNED_OTHER_TYPE =
178-
local("Expected %s to return an integer array but returned a '%s' instead!")
179-
.fr("Attendu à ce que %s retourne un tableau d'entiers mais a retourné un '%s' à la place!");
180-
public static Localizable<String> EXPECTED_TO_RETURN_DOUBLE_BUT_RETURNED_OTHER_TYPE =
181-
local("Expected %s to return a double but returned a '%s' instead!")
182-
.fr("Attendu à ce que %s retourne un décimal mais a retourné un '%s' à la place!");
183-
public static Localizable<String> EXPECTED_TO_RETURN_BOOLEAN_BUT_RETURNED_OTHER_TYPE =
184-
local("Expected %s to return a boolean but returned a '%s' instead!")
185-
.fr("Attendu à ce que %s retourne un booléen mais a retourné un '%s' à la place!");
186174
public static Localizable<String> EXPECTED_TO_RETURN_STRING_BUT_RETURNED_OTHER_TYPE =
187175
local("Expected %s to return a String but returned a %s instead!")
188176
.fr("Attendu à ce que %s retourne une String mais a retourné un '%s' à la place!");

src/main/java/engine/test/ResultAssertionsUnitTests.java renamed to src/main/java/engine/test/EqualityAssertionsUnitTests.java

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package engine.test;
22

3+
import static engine.Assertions.assertReturnValueEquals;
34
import static engine.Assertions.assertVariableEquals;
45
import static engine.ConsoleFmt.code;
56
import static engine.ConsoleFmt.format;
@@ -14,11 +15,12 @@
1415
import engine.test.simulation.StudentSolutions;
1516

1617
import static engine.script.Expression.assignVariable;
18+
import static engine.script.Expression.callKoanMethod;
1719
import static engine.Texts.*;
1820
import static engine.test.UnitTestExpectation.assertSuccess;
1921
import static engine.test.UnitTestExpectation.assertFailure;
2022

21-
public class ResultAssertionsUnitTests {
23+
public class EqualityAssertionsUnitTests {
2224
private static Localizable<Class<?>> CLASS = global(StudentSolutions.class);
2325

2426
public static final List<UnitTest> items = List.of(
@@ -69,6 +71,54 @@ public class ResultAssertionsUnitTests {
6971
assertFailure(
7072
new Line.Localized(format(EXPECTED_VARIABLE_TO_EQUAL_BUT_IS_NULL, Formats.Red, code(assignVariable("a", null).formatSourceCode(Locale.en)), code("a"), code("new int[]{1,2}")))
7173
)
72-
)
74+
),
75+
new UnitTest(
76+
new Koan(CLASS, global("returnedValueEqualsIntArray"))
77+
.when(
78+
callKoanMethod("returnedValueEqualsIntArray")
79+
)
80+
.then(
81+
assertReturnValueEquals(new int[]{1, 3})
82+
),
83+
assertSuccess(
84+
new Line.Localized(format(OK_RETURNED, Formats.Green, code(callKoanMethod("returnedValueEqualsIntArray").formatSourceCode(Locale.en)), code("new int[]{1,3}")))
85+
)
86+
),
87+
new UnitTest(
88+
new Koan(CLASS, global("returnedValueNotEqualsIntArray"))
89+
.when(
90+
callKoanMethod("returnedValueNotEqualsIntArray")
91+
)
92+
.then(
93+
assertReturnValueEquals(new int[]{1, 3})
94+
),
95+
assertFailure(
96+
new Line.Localized(format(EXPECTED_TO_RETURN_BUT_RETURNED, Formats.Red, code(callKoanMethod("returnedValueNotEqualsIntArray").formatSourceCode(Locale.en)), code("new int[]{1,3}"), code("new int[]{1,2}")))
97+
)
98+
),
99+
new UnitTest(
100+
new Koan(CLASS, global("returnedValueNotIntArray"))
101+
.when(
102+
callKoanMethod("returnedValueNotIntArray")
103+
)
104+
.then(
105+
assertReturnValueEquals(new int[]{1, 3})
106+
),
107+
assertFailure(
108+
new Line.Localized(format(EXPECTED_TO_RETURN_BUT_RETURNED_OTHER_TYPE, Formats.Red, code(callKoanMethod("returnedValueNotIntArray").formatSourceCode(Locale.en)), code("int[]"), code("String")))
109+
)
110+
),
111+
new UnitTest(
112+
new Koan(CLASS, global("returnedValueNull"))
113+
.when(
114+
callKoanMethod("returnedValueNull")
115+
)
116+
.then(
117+
assertReturnValueEquals(new int[]{1, 3})
118+
),
119+
assertFailure(
120+
new Line.Localized(format(EXPECTED_TO_RETURN_BUT_RETURNED_NULL, Formats.Red, code(callKoanMethod("returnedValueNull").formatSourceCode(Locale.en)), code("new int[]{1,3}")))
121+
)
122+
)
73123
);
74124
}

src/main/java/engine/test/TestRunner.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
public class TestRunner {
1111
private static final List<List<UnitTest>> TO_RUN = List.of(
1212
ConsoleAssertionsUnitTests.items,
13-
ResultAssertionsUnitTests.items
13+
EqualityAssertionsUnitTests.items
1414
);
1515
private static final Map<Boolean, String> SUCCESS_WORDING = Map.of(
1616
true, "success",

src/main/java/engine/test/simulation/StudentSolutions.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,20 @@ public class StudentSolutions {
44
public static void simpleConsoleOutput() {
55
System.out.println("hello");
66
}
7+
8+
public static int[] returnedValueEqualsIntArray() {
9+
return new int[]{1, 3};
10+
}
11+
12+
public static int[] returnedValueNotEqualsIntArray() {
13+
return new int[]{1, 2};
14+
}
15+
16+
public static String returnedValueNotIntArray() {
17+
return "abc";
18+
}
19+
20+
public static int[] returnedValueNull() {
21+
return null;
22+
}
723
}

0 commit comments

Comments
 (0)