package io.gitlab.jfronny.respackopts; import com.google.gson.reflect.TypeToken; import io.gitlab.jfronny.respackopts.model.ConfigFile; import io.gitlab.jfronny.respackopts.model.condition.Condition; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import java.nio.file.Paths; import java.util.List; import java.util.Set; import static io.gitlab.jfronny.respackopts.Respackopts.SAVE_ACTIONS; import static org.junit.jupiter.api.Assertions.*; class ConditionSerializationTest { @BeforeAll static void initialize() { Respackopts.LOGGER.info("Expected error end"); Respackopts.FALLBACK_CONF_DIR = Paths.get("./test"); Respackopts.CONFIG = new ConfigFile(); SAVE_ACTIONS.add(() -> Respackopts.LOGGER.info("Save")); Respackopts.LOGGER.info(Respackopts.FALLBACK_CONF_DIR); } @Test void gsonListOrder() { String[] expected = new String[] {"one", "two", "three", "zero", "76"}; String gson = "[\"one\", \"two\", \"three\", \"zero\", \"76\"]"; List parsed = Respackopts.GSON.fromJson(gson, new TypeToken>(){}.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 parsed = Respackopts.GSON.fromJson(gson, new TypeToken>(){}.getType()); int i = 0; for (String s : parsed) { assertEquals(s, expected[i++]); } } @Test void gsonSingleEntryList() { String gson = "\"someText\""; List parsed = Respackopts.GSON.fromJson(gson, new TypeToken>(){}.getType()); assertEquals(parsed.size(), 1); for (String s : parsed) { assertEquals(s, "someText"); } } @Test void gsonSingleEntrySet() { String gson = "\"someText\""; Set parsed = Respackopts.GSON.fromJson(gson, new TypeToken>(){}.getType()); assertEquals(parsed.size(), 1); for (String s : parsed) { assertEquals(s, "someText"); } } @Test void gsonConditionSimple() { assertTrue(assertDoesNotThrow(() -> Respackopts.GSON.fromJson("true", Condition.class).evaluate("test"))); assertTrue(assertDoesNotThrow(() -> Respackopts.GSON.fromJson("{\"not\": false}", Condition.class).evaluate("test"))); assertTrue(assertDoesNotThrow(() -> Respackopts.GSON.fromJson("[true, {\"not\": false}]", Condition.class).evaluate("test"))); assertFalse(assertDoesNotThrow(() -> Respackopts.GSON.fromJson("[true, {\"not\": true}]", Condition.class).evaluate("test"))); } @Test void gsonConditionXor() { assertTrue(assertDoesNotThrow(() -> Respackopts.GSON.fromJson("{\"xor\": [true, false]}", Condition.class).evaluate("test"))); assertFalse(assertDoesNotThrow(() -> Respackopts.GSON.fromJson("{\"xor\": [true, true]}", Condition.class).evaluate("test"))); assertFalse(assertDoesNotThrow(() -> Respackopts.GSON.fromJson("{\"xor\": [false, false]}", Condition.class).evaluate("test"))); } @Test void gsonConditionOr() { assertTrue(assertDoesNotThrow(() -> Respackopts.GSON.fromJson("{\"or\": [true, false]}", Condition.class).evaluate("test"))); assertTrue(assertDoesNotThrow(() -> Respackopts.GSON.fromJson("{\"or\": [true, true]}", Condition.class).evaluate("test"))); assertFalse(assertDoesNotThrow(() -> Respackopts.GSON.fromJson("{\"or\": [false, false]}", Condition.class).evaluate("test"))); } @Test void gsonConditionNor() { assertFalse(assertDoesNotThrow(() -> Respackopts.GSON.fromJson("{\"nor\": [true, false]}", Condition.class).evaluate("test"))); assertFalse(assertDoesNotThrow(() -> Respackopts.GSON.fromJson("{\"nor\": [true, true]}", Condition.class).evaluate("test"))); assertTrue(assertDoesNotThrow(() -> Respackopts.GSON.fromJson("{\"nor\": [false, false]}", Condition.class).evaluate("test"))); } @Test void gsonConditionAnd() { assertFalse(assertDoesNotThrow(() -> Respackopts.GSON.fromJson("{\"and\": [true, false]}", Condition.class).evaluate("test"))); assertTrue(assertDoesNotThrow(() -> Respackopts.GSON.fromJson("{\"and\": [true, true]}", Condition.class).evaluate("test"))); assertFalse(assertDoesNotThrow(() -> Respackopts.GSON.fromJson("{\"and\": [false, false]}", Condition.class).evaluate("test"))); } }