Respackopts/src/test/java/io/gitlab/jfronny/respackopts/test/ConditionJsonSerializationT...

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()));
}
}