101 lines
3.8 KiB
Java
101 lines
3.8 KiB
Java
package io.gitlab.jfronny.respackopts.test;
|
|
|
|
import io.gitlab.jfronny.gson.reflect.TypeToken;
|
|
import io.gitlab.jfronny.muscript.ast.BoolExpr;
|
|
import io.gitlab.jfronny.muscript.data.Scope;
|
|
import io.gitlab.jfronny.respackopts.gson.AttachmentHolder;
|
|
import io.gitlab.jfronny.respackopts.util.MuUtils;
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
import java.util.List;
|
|
import java.util.Set;
|
|
|
|
import static io.gitlab.jfronny.respackopts.Respackopts.GSON;
|
|
import static org.junit.jupiter.api.Assertions.*;
|
|
|
|
class ConditionJsonSerializationTest {
|
|
|
|
@Test
|
|
void gsonListOrder() {
|
|
String[] expected = new String[] {"one", "two", "three", "zero", "76"};
|
|
String gson = "[\"one\", \"two\", \"three\", \"zero\", \"76\"]";
|
|
List<String> parsed = TestArgs.GSON.fromJson(gson, new TypeToken<List<String>>(){}.getType());
|
|
int i = 0;
|
|
for (String s : parsed) {
|
|
assertEquals(s, expected[i++]);
|
|
}
|
|
}
|
|
|
|
@Test
|
|
void gsonSetOrder() {
|
|
String[] expected = new String[] {"one", "two", "three", "zero", "76"};
|
|
String gson = "[\"one\", \"two\", \"three\", \"zero\", \"76\"]";
|
|
Set<String> parsed = TestArgs.GSON.fromJson(gson, new TypeToken<Set<String>>(){}.getType());
|
|
int i = 0;
|
|
for (String s : parsed) {
|
|
assertEquals(s, expected[i++]);
|
|
}
|
|
}
|
|
|
|
@Test
|
|
void gsonSingleEntryList() {
|
|
String gson = "\"someText\"";
|
|
List<String> parsed = TestArgs.GSON.fromJson(gson, new TypeToken<List<String>>(){}.getType());
|
|
assertEquals(parsed.size(), 1);
|
|
for (String s : parsed) {
|
|
assertEquals(s, "someText");
|
|
}
|
|
}
|
|
|
|
@Test
|
|
void gsonSingleEntrySet() {
|
|
String gson = "\"someText\"";
|
|
Set<String> parsed = TestArgs.GSON.fromJson(gson, new TypeToken<Set<String>>(){}.getType());
|
|
assertEquals(parsed.size(), 1);
|
|
for (String s : parsed) {
|
|
assertEquals(s, "someText");
|
|
}
|
|
}
|
|
|
|
@Test
|
|
void gsonConditionSimple() {
|
|
assertTrue(assertDoesNotThrow(() -> evaluateCondition("true")));
|
|
assertTrue(assertDoesNotThrow(() -> evaluateCondition("{\"not\": false}")));
|
|
assertTrue(assertDoesNotThrow(() -> evaluateCondition("[true, {\"not\": false}]")));
|
|
assertFalse(assertDoesNotThrow(() -> evaluateCondition("[true, {\"not\": true}]")));
|
|
}
|
|
|
|
@Test
|
|
void gsonConditionXor() {
|
|
assertTrue(assertDoesNotThrow(() -> evaluateCondition("{\"xor\": [true, false]}")));
|
|
assertFalse(assertDoesNotThrow(() -> evaluateCondition("{\"xor\": [true, true]}")));
|
|
assertFalse(assertDoesNotThrow(() -> evaluateCondition("{\"xor\": [false, false]}")));
|
|
}
|
|
|
|
@Test
|
|
void gsonConditionOr() {
|
|
assertTrue(assertDoesNotThrow(() -> evaluateCondition("{\"or\": [true, false]}")));
|
|
assertTrue(assertDoesNotThrow(() -> evaluateCondition("{\"or\": [true, true]}")));
|
|
assertFalse(assertDoesNotThrow(() -> evaluateCondition("{\"or\": [false, false]}")));
|
|
}
|
|
|
|
@Test
|
|
void gsonConditionNor() {
|
|
assertFalse(assertDoesNotThrow(() -> evaluateCondition("{\"nor\": [true, false]}")));
|
|
assertFalse(assertDoesNotThrow(() -> evaluateCondition("{\"nor\": [true, true]}")));
|
|
assertTrue(assertDoesNotThrow(() -> evaluateCondition("{\"nor\": [false, false]}")));
|
|
}
|
|
|
|
@Test
|
|
void gsonConditionAnd() {
|
|
assertFalse(assertDoesNotThrow(() -> evaluateCondition("{\"and\": [true, false]}")));
|
|
assertTrue(assertDoesNotThrow(() -> evaluateCondition("{\"and\": [true, true]}")));
|
|
assertFalse(assertDoesNotThrow(() -> evaluateCondition("{\"and\": [false, false]}")));
|
|
}
|
|
|
|
private boolean evaluateCondition(String json) {
|
|
BoolExpr condition = AttachmentHolder.attach(7, () -> GSON.fromJson(json, BoolExpr.class));
|
|
return condition.get(MuUtils.addDefault(new Scope()));
|
|
}
|
|
}
|