diff --git a/.gitignore b/.gitignore index 8ccef31..64ad712 100644 --- a/.gitignore +++ b/.gitignore @@ -117,7 +117,7 @@ gradle-app.setting !/run/resourcepacks /run/resourcepacks/* !/run/resourcepacks/lumi -test/ +/test/ logs/ # Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) diff --git a/gradle.properties b/gradle.properties index 080addf..a0d4aca 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ minecraft_version=1.17 yarn_mappings=build.1 loader_version=0.11.3 # Mod Properties -mod_version=2.0.0 +mod_version=2.1.0 maven_group=io.gitlab.jfronny archives_base_name=respackopts diff --git a/src/main/java/io/gitlab/jfronny/respackopts/Respackopts.java b/src/main/java/io/gitlab/jfronny/respackopts/Respackopts.java index 7bafbeb..2a287a0 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/Respackopts.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/Respackopts.java @@ -54,7 +54,7 @@ public class Respackopts implements ClientModInitializer { try { CONF_DIR = FabricLoader.getInstance().getConfigDir().resolve(ID); } catch (Throwable e) { - LOGGER.error(e); + LOGGER.error("Could not resolve config directory", e); } } @@ -63,7 +63,7 @@ public class Respackopts implements ClientModInitializer { try { Files.createDirectories(CONF_DIR); } catch (IOException e) { - Respackopts.LOGGER.error(e); + Respackopts.LOGGER.error("Could not initialize config directory", e); } if (FabricLoader.getInstance().isDevelopmentEnvironment()) SAVE_ACTIONS.add(() -> LOGGER.info("Save")); @@ -75,7 +75,7 @@ public class Respackopts implements ClientModInitializer { GSON.toJson(e.getValue(), writer); writer.flush(); } catch (IOException ex) { - Respackopts.LOGGER.error(ex); + Respackopts.LOGGER.error("Could not save config", ex); } } for (Runnable action : SAVE_ACTIONS) { diff --git a/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigBooleanEntry.java b/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigBooleanEntry.java index 3721eeb..6d66cc5 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigBooleanEntry.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigBooleanEntry.java @@ -1,17 +1,17 @@ package io.gitlab.jfronny.respackopts.data.entry; -public class ConfigBooleanEntry extends Entry { +public class ConfigBooleanEntry extends ConfigEntry { public ConfigBooleanEntry(boolean v) { setValue(v); } @Override - public boolean typeMatches(Entry val) { + public boolean typeMatches(ConfigEntry val) { return val instanceof ConfigBooleanEntry; } @Override - public Entry clone() { + public ConfigEntry clone() { ConfigBooleanEntry be = new ConfigBooleanEntry(getValue()); be.setDefault(getDefault()); return be; diff --git a/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigBranch.java b/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigBranch.java index 44b0b76..884fc17 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigBranch.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigBranch.java @@ -7,7 +7,7 @@ import io.gitlab.jfronny.respackopts.data.RpoError; import java.util.HashMap; import java.util.Map; -public class ConfigBranch extends Entry>> { +public class ConfigBranch extends ConfigEntry>> { public ConfigBranch() { setValue(new HashMap<>()); } @@ -16,16 +16,16 @@ public class ConfigBranch extends Entry>> { String[] sp = name.split("\\."); if (!super.getValue().containsKey(sp[0])) throw new RpoError("Invalid path to key"); - Entry e = super.getValue().get(sp[0]); + ConfigEntry e = super.getValue().get(sp[0]); if (sp.length == 1) { if (e instanceof ConfigBooleanEntry b) return b.getValue(); throw new RpoError("Not a boolean"); } if (sp.length == 2 && e instanceof ConfigEnumEntry en) { - for (Map.Entry entry : en.values.entrySet()) { - if (entry.getKey().equals(sp[1])) - return entry.getValue().equals(en.getValue()); + for (String entry : en.values) { + if (entry.equals(sp[1])) + return entry.equals(en.getValue()); } throw new RpoError("Could not find enum entry"); } @@ -35,15 +35,15 @@ public class ConfigBranch extends Entry>> { } @Override - public void sync(Entry>> source, SyncMode mode) { - for (Map.Entry> e : source.getValue().entrySet()) { + public void sync(ConfigEntry>> source, SyncMode mode) { + for (Map.Entry> e : source.getValue().entrySet()) { if (!has(e.getKey())) { - if (mode.isAdd()) + if (mode == SyncMode.RESPACK_LOAD) add(e.getKey(), e.getValue().clone()); } else { - Entry current = get(e.getKey()); + ConfigEntry current = get(e.getKey()); if (e.getValue().typeMatches(current)) { - syncSub(current, (Entry)e.getValue(), mode); + syncSub(current, (ConfigEntry)e.getValue(), mode); } else { Respackopts.LOGGER.warn("Type mismatch in config, ignoring"); @@ -53,20 +53,19 @@ public class ConfigBranch extends Entry>> { } @Override - public boolean typeMatches(Entry val) { + public boolean typeMatches(ConfigEntry val) { return val instanceof ConfigBranch; } - private void syncSub(Entry current, Entry next, SyncMode mode) { + private void syncSub(ConfigEntry current, ConfigEntry next, SyncMode mode) { current.sync(next, mode); } - public void add(String name, Entry val) { - val.setDefault(val.getValue()); + public void add(String name, ConfigEntry val) { super.getValue().put(name, val); } - public Entry get(String key) { + public ConfigEntry get(String key) { return super.getValue().get(key); } @@ -75,12 +74,12 @@ public class ConfigBranch extends Entry>> { } @Override - public Map> getValue() { + public Map> getValue() { return ImmutableMap.copyOf(super.getValue()); } public void buildShader(StringBuilder sb, String valuePrefix) throws RpoError { - for (Map.Entry> e : super.getValue().entrySet()) { + for (Map.Entry> e : super.getValue().entrySet()) { if (e.getValue() instanceof ConfigNumericEntry n) { sb.append("\n#define "); sb.append(valuePrefix); @@ -99,16 +98,14 @@ public class ConfigBranch extends Entry>> { sb.append("\n#define "); sb.append(valuePrefix); sb.append(e.getKey()); - sb.append(' '); - sb.append(n.getValue().toString()); - for (Map.Entry e2 : n.values.entrySet()) { - sb.append("\n#define "); - sb.append(valuePrefix); - sb.append(e.getKey()); - sb.append('_'); - sb.append(e2.getKey()); - sb.append(' '); - sb.append(e2.getValue().toString()); + for (String e2 : n.values) { + if (e2.equals(n.getValue())) { + sb.append("\n#define "); + sb.append(valuePrefix); + sb.append(e.getKey()); + sb.append('_'); + sb.append(e2); + } } } else if (e.getValue() instanceof ConfigBranch n) { @@ -122,7 +119,7 @@ public class ConfigBranch extends Entry>> { @Override public void appendString(StringBuilder sb) { - for (Map.Entry> e : getValue().entrySet()) { + for (Map.Entry> e : getValue().entrySet()) { sb.append("\n"); sb.append(e.getKey()); sb.append(": "); @@ -131,9 +128,9 @@ public class ConfigBranch extends Entry>> { } @Override - public Entry>> clone() { + public ConfigEntry>> clone() { ConfigBranch branch = new ConfigBranch(); - for (Map.Entry> e : getValue().entrySet()) { + for (Map.Entry> e : getValue().entrySet()) { branch.add(e.getKey(), e.getValue().clone()); } return branch; diff --git a/src/main/java/io/gitlab/jfronny/respackopts/data/entry/Entry.java b/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigEntry.java similarity index 66% rename from src/main/java/io/gitlab/jfronny/respackopts/data/entry/Entry.java rename to src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigEntry.java index fb07305..48544e5 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/data/entry/Entry.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigEntry.java @@ -1,10 +1,12 @@ package io.gitlab.jfronny.respackopts.data.entry; -public abstract class Entry { +public abstract class ConfigEntry { private T defaultValue; private T value; public T getValue() { + if (value == null) + value = defaultValue; return value; } @@ -14,6 +16,8 @@ public abstract class Entry { } public T getDefault() { + if (defaultValue == null) + defaultValue = value; return defaultValue; } @@ -22,14 +26,14 @@ public abstract class Entry { defaultValue = value; } - public void sync(Entry source, SyncMode mode) { - if (mode.modifyDefault()) + public void sync(ConfigEntry source, SyncMode mode) { + if (mode == SyncMode.RESPACK_LOAD) setDefault(source.getDefault()); - if (mode.modifyValue()) + if (mode == SyncMode.CONF_LOAD) setValue(source.getValue()); } - public abstract boolean typeMatches(Entry val); + public abstract boolean typeMatches(ConfigEntry val); public void appendString(StringBuilder sb) { sb.append(value).append(" (").append(defaultValue).append(")"); @@ -42,5 +46,5 @@ public abstract class Entry { return log.toString(); } - public abstract Entry clone(); + public abstract ConfigEntry clone(); } diff --git a/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigEnumEntry.java b/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigEnumEntry.java index 34da2a2..2481df2 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigEnumEntry.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigEnumEntry.java @@ -1,82 +1,84 @@ package io.gitlab.jfronny.respackopts.data.entry; -import com.ibm.icu.impl.locale.XCldrStub; +import io.gitlab.jfronny.respackopts.Respackopts; -import java.util.HashMap; -import java.util.Map; +import java.util.ArrayList; +import java.util.List; -public class ConfigEnumEntry extends Entry { - public Map values = new HashMap<>(); - private String fieldName; - - public ConfigEnumEntry() { - setValue(0); +public class ConfigEnumEntry extends ConfigEntry { + public List values = new ArrayList<>(); + private Integer nextValue; + + public void setNextValue(int v) { + nextValue = v; } @Override - public Integer getValue() { - Integer v = super.getValue(); - if (v == null) - throw new NullPointerException(); + public String getValue() { + String v = super.getValue(); + if (v == null) { + if (nextValue != null && nextValue >= 0 && nextValue < values.size()) { + v = values.get(nextValue); + setValue(v); + } + else { + throw new NullPointerException("Could not get value"); + } + } return v; } @Override - public void sync(Entry source, SyncMode mode) { + public String getDefault() { + String v = super.getDefault(); + if (v == null) { + if (values.size() == 0) + throw new NullPointerException("Could not get default entry as the entry array is empty"); + else + v = values.get(0); + } + return v; + } + + @Override + public void sync(ConfigEntry source, SyncMode mode) { super.sync(source, mode); ConfigEnumEntry n = (ConfigEnumEntry) source; - if (mode.modifyDefault()) { + if (mode == SyncMode.RESPACK_LOAD) { if (n.values != null && !n.values.isEmpty()) values = n.values; } - if (mode.modifyValue()) { - if (n.fieldName != null) - setValue(values.get(n.fieldName)); + if (getValue() == null && nextValue != null) { + if (n.nextValue >= 0 && n.nextValue < values.size()) { + setValue(values.get(n.nextValue)); + } + else { + Respackopts.LOGGER.error("Could not load default value for enum"); + } } } @Override - public boolean typeMatches(Entry val) { + public boolean typeMatches(ConfigEntry val) { return val instanceof ConfigEnumEntry; } @Override public void appendString(StringBuilder sb) { - sb.append(getValueName()).append('/').append(getValue()).append(" (").append(getDefaultName()).append('/').append(getDefault()).append(" of:"); - for (Map.Entry e : values.entrySet()) { - sb.append(' ').append(e.getKey()).append('/').append(e.getValue()); + sb.append(getValue()).append('/').append(getValue()).append(" (").append(getDefault()).append('/').append(getDefault()).append(" of:"); + for (String e : values) { + sb.append(' ').append(e); } sb.append(')'); } @Override - public Entry clone() { + public ConfigEntry clone() { ConfigEnumEntry e = new ConfigEnumEntry(); - e.fieldName = fieldName; - e.values = XCldrStub.ImmutableMap.copyOf(values); + e.nextValue = nextValue; + e.values = List.copyOf(values); e.setValue(getValue()); e.setDefault(getDefault()); return e; } - - public void setFieldName(String s) { - if (s != null) - fieldName = s; - } - - public String getValueName() { - for (Map.Entry en : values.entrySet()) { - if (en.getValue().equals(getValue())) - return en.getKey(); - } - return getDefaultName(); - } - - public String getDefaultName() { - for (Map.Entry en : values.entrySet()) { - if (en.getValue().equals(getDefault())) - return en.getKey(); - } - throw new NullPointerException(); - } } diff --git a/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigNumericEntry.java b/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigNumericEntry.java index b93684d..f65e8ab 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigNumericEntry.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigNumericEntry.java @@ -1,6 +1,6 @@ package io.gitlab.jfronny.respackopts.data.entry; -public class ConfigNumericEntry extends Entry { +public class ConfigNumericEntry extends ConfigEntry { public Double min; public Double max; @@ -9,10 +9,10 @@ public class ConfigNumericEntry extends Entry { } @Override - public void sync(Entry source, SyncMode mode) { + public void sync(ConfigEntry source, SyncMode mode) { super.sync(source, mode); ConfigNumericEntry n = (ConfigNumericEntry) source; - if (mode.modifyDefault()) { + if (mode == SyncMode.RESPACK_LOAD) { if (n.min != null) min = n.min; if (n.max != null) @@ -21,7 +21,7 @@ public class ConfigNumericEntry extends Entry { } @Override - public boolean typeMatches(Entry val) { + public boolean typeMatches(ConfigEntry val) { return val instanceof ConfigNumericEntry; } @@ -38,7 +38,7 @@ public class ConfigNumericEntry extends Entry { } @Override - public Entry clone() { + public ConfigEntry clone() { ConfigNumericEntry ce = new ConfigNumericEntry(); ce.max = max; ce.min = min; diff --git a/src/main/java/io/gitlab/jfronny/respackopts/data/entry/SyncMode.java b/src/main/java/io/gitlab/jfronny/respackopts/data/entry/SyncMode.java index 044e9c9..f4a7950 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/data/entry/SyncMode.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/data/entry/SyncMode.java @@ -1,7 +1,5 @@ package io.gitlab.jfronny.respackopts.data.entry; -public record SyncMode(boolean modifyValue, boolean modifyDefault, boolean isAdd) { - public static final SyncMode RESPACK_LOAD = new SyncMode(false, true, true); - public static final SyncMode CONF_LOAD = new SyncMode(true, false, false); - +public enum SyncMode { + RESPACK_LOAD, CONF_LOAD } diff --git a/src/main/java/io/gitlab/jfronny/respackopts/filters/conditions/ResourcePackFilter.java b/src/main/java/io/gitlab/jfronny/respackopts/filters/conditions/ResourcePackFilter.java index 6177ca8..5a3cf6b 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/filters/conditions/ResourcePackFilter.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/filters/conditions/ResourcePackFilter.java @@ -29,7 +29,7 @@ public class ResourcePackFilter { return !ConditionEvaluator.evaluate(rpo.conditions); } catch (Throwable e) { - Respackopts.LOGGER.error(e); + Respackopts.LOGGER.error("Could not load RPO file " + name, e); return false; } } diff --git a/src/main/java/io/gitlab/jfronny/respackopts/filters/fallback/FallbackFilter.java b/src/main/java/io/gitlab/jfronny/respackopts/filters/fallback/FallbackFilter.java index 76ea261..908a19c 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/filters/fallback/FallbackFilter.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/filters/fallback/FallbackFilter.java @@ -39,7 +39,7 @@ public class FallbackFilter { } } catch (IOException e) { - Respackopts.LOGGER.error(e); + Respackopts.LOGGER.error("Could not determine visibility of " + name + e); } } return false; @@ -58,7 +58,7 @@ public class FallbackFilter { } } catch (IOException e) { - Respackopts.LOGGER.error(e); + Respackopts.LOGGER.error("Could not determine replacement for " + name, e); } throw ex; } diff --git a/src/main/java/io/gitlab/jfronny/respackopts/gson/ConfigBranchSerializer.java b/src/main/java/io/gitlab/jfronny/respackopts/gson/ConfigBranchSerializer.java index c406bc0..23c8d17 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/gson/ConfigBranchSerializer.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/gson/ConfigBranchSerializer.java @@ -10,7 +10,7 @@ public class ConfigBranchSerializer implements JsonSerializer, Jso @Override public JsonElement serialize(ConfigBranch src, Type typeOfSrc, JsonSerializationContext context) { JsonObject o = new JsonObject(); - for (Map.Entry> entry : src.getValue().entrySet()) { + for (Map.Entry> entry : src.getValue().entrySet()) { o.add(entry.getKey(), context.serialize(entry.getValue())); } return o; diff --git a/src/main/java/io/gitlab/jfronny/respackopts/gson/EnumEntrySerializer.java b/src/main/java/io/gitlab/jfronny/respackopts/gson/EnumEntrySerializer.java index 2bae5e5..d58c7ae 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/gson/EnumEntrySerializer.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/gson/EnumEntrySerializer.java @@ -4,12 +4,11 @@ import com.google.gson.*; import io.gitlab.jfronny.respackopts.data.entry.ConfigEnumEntry; import java.lang.reflect.Type; -import java.util.HashMap; public class EnumEntrySerializer implements JsonSerializer, JsonDeserializer { @Override public JsonElement serialize(ConfigEnumEntry src, Type typeOfSrc, JsonSerializationContext context) { - return new JsonPrimitive(src.getValueName()); + return new JsonPrimitive(src.getValue()); } @Override @@ -17,32 +16,29 @@ public class EnumEntrySerializer implements JsonSerializer, Jso ConfigEnumEntry result = new ConfigEnumEntry(); if (json.isJsonPrimitive()) { JsonPrimitive jp = json.getAsJsonPrimitive(); - if (jp.isNumber()) { - result.setValue(jp.getAsInt()); - result.setDefault(jp.getAsInt()); + if (jp.isString()) { + result.setValue(jp.getAsString()); return result; } - else if (jp.isString()) { - result.setFieldName(jp.getAsString()); + else if (jp.isNumber()) { + result.setNextValue(jp.getAsInt()); return result; } else - throw new JsonSyntaxException("Expected primitive numeric key for enum"); + throw new JsonSyntaxException("Expected primitive string key for enum"); } else if (json.isJsonArray()) { - result.values = new HashMap<>(); - int i = 0; + result.values.clear(); for (JsonElement e : json.getAsJsonArray()) { if (e.isJsonPrimitive() && e.getAsJsonPrimitive().isString()) { - result.values.put(e.getAsString(), i); + result.values.add(e.getAsString()); } else throw new JsonSyntaxException("Expected string entry in enum"); - i++; } return result; } else - throw new JsonSyntaxException("Expected primitive numeric key for enum"); + throw new JsonSyntaxException("Expected primitive string key or string array for enum"); } } diff --git a/src/main/java/io/gitlab/jfronny/respackopts/gui/GuiFactory.java b/src/main/java/io/gitlab/jfronny/respackopts/gui/GuiFactory.java index ba3604c..3e08d38 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/gui/GuiFactory.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/gui/GuiFactory.java @@ -24,8 +24,8 @@ import java.util.Optional; public class GuiFactory { public void buildCategory(ConfigBranch source, String screenId, JfConfigCategory config, ConfigEntryBuilder entryBuilder, String namePrefix) { String b = "respackopts.field." + screenId; - for (Map.Entry> in : source.getValue().entrySet()) { - Entry entry = in.getValue(); + for (Map.Entry> in : source.getValue().entrySet()) { + ConfigEntry entry = in.getValue(); String n = ("".equals(namePrefix) ? "" : namePrefix + ".") + in.getKey(); if (entry instanceof ConfigBranch e) { SubCategoryBuilder sc = entryBuilder.startSubCategory(getText(n, "respackopts.title." + screenId)); @@ -42,12 +42,12 @@ public class GuiFactory { } else if (entry instanceof ConfigEnumEntry e) { config.addEntry(entryBuilder.startDropdownMenu(getText(n, b), - DropdownMenuBuilder.TopCellElementBuilder.of(e.getValueName(), s -> s, LiteralText::new), + DropdownMenuBuilder.TopCellElementBuilder.of(e.getValue(), s -> s, LiteralText::new), new DropdownBoxEntry.DefaultSelectionCellCreator<>()) .setSuggestionMode(false) - .setDefaultValue(e.getDefaultName()) - .setSelections(() -> e.values.keySet().iterator()) - .setSaveConsumer(v -> e.setValue(e.values.get(v))) + .setDefaultValue(e.getDefault()) + .setSelections(() -> e.values.iterator()) + .setSaveConsumer(e::setValue) .setTooltipSupplier(() -> getTooltip(n, screenId)) .build()); } diff --git a/src/main/java/io/gitlab/jfronny/respackopts/integration/FrexCompat.java b/src/main/java/io/gitlab/jfronny/respackopts/integration/FrexCompat.java index 540e711..70711df 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/integration/FrexCompat.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/integration/FrexCompat.java @@ -19,7 +19,7 @@ public class FrexCompat implements FrexInitializer { try { e.getValue().buildShader(sb, e.getKey() + "_"); } catch (RpoError rpoError) { - Respackopts.LOGGER.error(rpoError); + Respackopts.LOGGER.error("Could not build shader", rpoError); } } sb.append("\n#define respackopts_loaded"); @@ -33,7 +33,7 @@ public class FrexCompat implements FrexInitializer { initial = false; } catch (Throwable e) { - Respackopts.LOGGER.error(e); + Respackopts.LOGGER.error("Could not reload shader config", e); } }); } diff --git a/src/main/java/io/gitlab/jfronny/respackopts/mixin/ResourcePackManagerMixin.java b/src/main/java/io/gitlab/jfronny/respackopts/mixin/ResourcePackManagerMixin.java index 54222bf..3eb2406 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/mixin/ResourcePackManagerMixin.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/mixin/ResourcePackManagerMixin.java @@ -42,7 +42,7 @@ public class ResourcePackManagerMixin { Respackopts.NAME_LOOKUP.put(v.getDisplayName().asString(), conf.id); Respackopts.load(conf.id); } catch (Throwable e) { - Respackopts.LOGGER.error(e); + Respackopts.LOGGER.error("Could not initialize pack meta for " + s, e); } } }); diff --git a/src/test/java/io/gitlab/jfronny/respackopts/RespackoptsTest.java b/src/test/java/io/gitlab/jfronny/respackopts/RespackoptsTest.java new file mode 100644 index 0000000..a7ff733 --- /dev/null +++ b/src/test/java/io/gitlab/jfronny/respackopts/RespackoptsTest.java @@ -0,0 +1,84 @@ +package io.gitlab.jfronny.respackopts; + +import io.gitlab.jfronny.respackopts.data.entry.ConfigBooleanEntry; +import io.gitlab.jfronny.respackopts.data.entry.ConfigBranch; +import io.gitlab.jfronny.respackopts.data.entry.SyncMode; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.nio.file.Files; +import java.nio.file.Paths; + +import static io.gitlab.jfronny.respackopts.Respackopts.*; +import static io.gitlab.jfronny.respackopts.Respackopts.CONFIG_BRANCH; +import static org.junit.jupiter.api.Assertions.*; + +class RespackoptsTest { + private static final String testEntryName = "test"; + private static final String testEntry1Name = "test1"; + + @BeforeAll + static void initialize() { + CONF_DIR = Paths.get("./test"); + assertDoesNotThrow(() -> Files.deleteIfExists(CONF_DIR.resolve(testEntry1Name + ".json"))); + assertDoesNotThrow(() -> Files.createDirectories(CONF_DIR)); + SAVE_ACTIONS.add(() -> LOGGER.info("Save")); + LOGGER.info(CONF_DIR); + } + + @AfterEach + void reset() { + CONFIG_BRANCH.clear(); + save(); + assertEquals(CONFIG_BRANCH.keySet().size(), 0); + } + + @BeforeEach + void initSingle() { + CONFIG_BRANCH.put(testEntryName, new ConfigBranch()); + assertEquals(CONFIG_BRANCH.keySet().size(), 1); + } + + @Test + void saveLoadSimple() { + CONFIG_BRANCH.get(testEntryName).add(testEntry1Name, new ConfigBooleanEntry(false)); + assertTrue(CONFIG_BRANCH.get(testEntryName).has(testEntry1Name)); + assertFalse((Boolean) CONFIG_BRANCH.get(testEntryName).get(testEntry1Name).getValue()); + save(); + CONFIG_BRANCH.remove(testEntryName); + assertEquals(CONFIG_BRANCH.keySet().size(), 0); + CONFIG_BRANCH.put(testEntryName, new ConfigBranch()); + CONFIG_BRANCH.get(testEntryName).add(testEntry1Name, new ConfigBooleanEntry(false)); + load(testEntryName); + assertEquals(CONFIG_BRANCH.keySet().size(), 1); + assertTrue(CONFIG_BRANCH.get(testEntryName).has(testEntry1Name)); + assertFalse((Boolean) CONFIG_BRANCH.get(testEntryName).get(testEntry1Name).getValue()); + } + + @Test + void syncSimple() { + ConfigBranch test = new ConfigBranch(); + test.add(testEntry1Name, new ConfigBooleanEntry(false)); + CONFIG_BRANCH.get(testEntryName).sync(test, SyncMode.RESPACK_LOAD); + save(); + load(testEntryName); + assertFalse((Boolean) CONFIG_BRANCH.get(testEntryName).get(testEntry1Name).getValue()); + assertEquals(CONFIG_BRANCH.keySet().size(), 1); + assertEquals(test.getValue().size(), 1); + assertNotNull(CONFIG_BRANCH.get(testEntryName)); + ConfigBooleanEntry be; + assertTrue(test.get(testEntry1Name) instanceof ConfigBooleanEntry); + be = (ConfigBooleanEntry)test.get(testEntry1Name); + be.setValue(true); + assertFalse((Boolean) CONFIG_BRANCH.get(testEntryName).get(testEntry1Name).getValue()); + LOGGER.info("E"); + CONFIG_BRANCH.get(testEntryName).sync(test, SyncMode.RESPACK_LOAD); + assertFalse((Boolean) CONFIG_BRANCH.get(testEntryName).get(testEntry1Name).getValue()); + CONFIG_BRANCH.get(testEntryName).sync(test, SyncMode.CONF_LOAD); + save(); + load(testEntryName); + assertTrue((Boolean) CONFIG_BRANCH.get(testEntryName).get(testEntry1Name).getValue()); + } +}