Lortseam 4 rokov pred
rodič
commit
b5d2ab50ae
33 zmenil súbory, kde vykonal 324 pridanie a 317 odobranie
  1. 0 237
      lib/src/test/java/me/lortseam/completeconfig/ConfigTest.java
  2. 140 0
      lib/src/test/java/me/lortseam/completeconfig/data/BaseCollectionTest.java
  3. 76 0
      lib/src/test/java/me/lortseam/completeconfig/data/ConfigTest.java
  4. 0 12
      lib/src/test/java/me/lortseam/completeconfig/data/containers/ContainerIncludingContainerWithEntry.java
  5. 0 13
      lib/src/test/java/me/lortseam/completeconfig/data/containers/ContainerIncludingGroupWithEntry.java
  6. 0 10
      lib/src/test/java/me/lortseam/completeconfig/data/containers/ContainerWithContainerWithEntry.java
  7. 0 11
      lib/src/test/java/me/lortseam/completeconfig/data/containers/ContainerWithGroupWithEntry.java
  8. 0 9
      lib/src/test/java/me/lortseam/completeconfig/data/containers/ContainerWithNonAnnotatedContainerWithEntry.java
  9. 18 0
      lib/src/test/java/me/lortseam/completeconfig/test/data/containers/ContainerIncludingContainerWithEntry.java
  10. 19 0
      lib/src/test/java/me/lortseam/completeconfig/test/data/containers/ContainerIncludingGroupWithEntry.java
  11. 1 1
      lib/src/test/java/me/lortseam/completeconfig/test/data/containers/ContainerNestingContainerWithEntry.java
  12. 1 1
      lib/src/test/java/me/lortseam/completeconfig/test/data/containers/ContainerNestingStaticClass.java
  13. 1 1
      lib/src/test/java/me/lortseam/completeconfig/test/data/containers/ContainerNestingStaticContainerWithEntry.java
  14. 16 0
      lib/src/test/java/me/lortseam/completeconfig/test/data/containers/ContainerWithContainerWithEntry.java
  15. 1 5
      lib/src/test/java/me/lortseam/completeconfig/test/data/containers/ContainerWithEntry.java
  16. 1 1
      lib/src/test/java/me/lortseam/completeconfig/test/data/containers/ContainerWithField.java
  17. 17 0
      lib/src/test/java/me/lortseam/completeconfig/test/data/containers/ContainerWithGroupWithEntry.java
  18. 15 0
      lib/src/test/java/me/lortseam/completeconfig/test/data/containers/ContainerWithNonAnnotatedContainerWithEntry.java
  19. 1 1
      lib/src/test/java/me/lortseam/completeconfig/test/data/containers/ContainerWithStaticEntry.java
  20. 1 1
      lib/src/test/java/me/lortseam/completeconfig/test/data/containers/EmptyContainer.java
  21. 4 2
      lib/src/test/java/me/lortseam/completeconfig/test/data/containers/EntriesContainerWithEmptyContainer.java
  22. 1 1
      lib/src/test/java/me/lortseam/completeconfig/test/data/containers/EntriesContainerWithEntry.java
  23. 1 1
      lib/src/test/java/me/lortseam/completeconfig/test/data/containers/EntriesContainerWithIgnoredField.java
  24. 1 1
      lib/src/test/java/me/lortseam/completeconfig/test/data/containers/EntriesContainerWithTransientField.java
  25. 1 1
      lib/src/test/java/me/lortseam/completeconfig/test/data/containers/SubclassOfContainerWithContainerWithEntry.java
  26. 1 1
      lib/src/test/java/me/lortseam/completeconfig/test/data/containers/SubclassOfContainerWithEntry.java
  27. 1 1
      lib/src/test/java/me/lortseam/completeconfig/test/data/containers/SubclassOfContainerWithStaticEntry.java
  28. 1 1
      lib/src/test/java/me/lortseam/completeconfig/test/data/groups/EmptyGroup.java
  29. 1 1
      lib/src/test/java/me/lortseam/completeconfig/test/data/groups/GroupWithEntry.java
  30. 1 1
      lib/src/test/java/me/lortseam/completeconfig/test/data/listeners/EmptyListener.java
  31. 1 1
      lib/src/test/java/me/lortseam/completeconfig/test/data/listeners/SetterListener.java
  32. 1 1
      lib/src/test/java/me/lortseam/completeconfig/test/extension/FabricLoaderExtension.java
  33. 1 1
      lib/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension

+ 0 - 237
lib/src/test/java/me/lortseam/completeconfig/ConfigTest.java

@@ -1,237 +0,0 @@
-package me.lortseam.completeconfig;
-
-import com.google.common.collect.Iterables;
-import me.lortseam.completeconfig.api.ConfigContainer;
-import me.lortseam.completeconfig.data.Config;
-import me.lortseam.completeconfig.data.containers.*;
-import me.lortseam.completeconfig.data.groups.EmptyGroup;
-import me.lortseam.completeconfig.data.listeners.EmptyListener;
-import me.lortseam.completeconfig.data.listeners.SetterListener;
-import me.lortseam.completeconfig.exception.IllegalAnnotationTargetException;
-import me.lortseam.completeconfig.io.ConfigSource;
-import nl.altindag.log.LogCaptor;
-import org.apache.logging.log4j.core.util.ReflectionUtil;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-
-import java.util.Set;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.jupiter.api.Assertions.*;
-
-public class ConfigTest {
-
-    @Test
-    public void builder_throwExceptionIfModIDNull() {
-        NullPointerException exception = assertThrows(NullPointerException.class, () -> Config.builder(null));
-        assertEquals("modID is marked non-null but is null", exception.getMessage());
-    }
-
-    @Nested
-    public class Builder {
-
-        private static final String MOD_ID = "test";
-
-        private Config.Builder builder;
-        private final LogCaptor logCaptor = LogCaptor.forRoot();
-
-        @BeforeEach
-        public void createBuilder() {
-            builder = Config.builder(MOD_ID);
-        }
-
-        @AfterEach
-        public void cleanUp() throws NoSuchFieldException {
-            builder = null;
-            ((Set<ConfigSource>) ReflectionUtil.getStaticFieldValue(ConfigSource.class.getDeclaredField("sources"))).clear();
-            logCaptor.clearLogs();
-        }
-
-        @Test
-        public void setBranch_throwIfBranchNull() {
-            NullPointerException exception = assertThrows(NullPointerException.class, () -> builder.setBranch(null));
-            assertEquals("branch is marked non-null but is null", exception.getMessage());
-        }
-
-        @Test
-        public void setBranch_throwIfBranchContainsNullElement() {
-            assertThrows(NullPointerException.class, () -> builder.setBranch(new String[]{null}));
-        }
-
-        @Test
-        public void add_throwIfContainersNull() {
-            NullPointerException exception = assertThrows(NullPointerException.class, () -> builder.add((ConfigContainer[]) null));
-            assertEquals("containers is marked non-null but is null", exception.getMessage());
-        }
-
-        @Test
-        public void add_throwIfContainersContainNullElement() {
-            assertThrows(NullPointerException.class, () -> builder.add((ConfigContainer) null));
-        }
-
-        @Test
-        public void build_logWarningAndReturnNullIfChildrenEmpty() {
-            assertNull(builder.build());
-            assertThat(logCaptor.getWarnLogs()).contains("[CompleteConfig] Mod " + MOD_ID + " tried to create an empty config");
-        }
-
-        @Nested
-        public class Resolution {
-
-            private void assertEmpty(Config config) {
-                assertNull(config);
-                assertThat(logCaptor.getWarnLogs()).containsExactly("[CompleteConfig] Config of ConfigSource(modID=" + MOD_ID + ", branch=[]) is empty");
-            }
-
-            @Test
-            public void logWarningIfEmpty() {
-                assertEmpty(builder.add(new EmptyContainer()).build());
-            }
-
-            @Nested
-            public class Entry {
-
-                @Test
-                public void includeFieldIfAnnotated() {
-                    Config config = builder.add(new ContainerWithEntry()).build();
-                    assertEquals(1, config.getEntries().size());
-                }
-
-                @Test
-                public void excludeFieldIfNotAnnotated() {
-                    Config config = builder.add(new ContainerWithField()).build();
-                    assertEmpty(config);
-                }
-
-                @Test
-                public void includeFieldInEntries() {
-                    Config config = builder.add(new EntriesContainerWithEntry()).build();
-                    assertEquals(1, config.getEntries().size());
-                }
-
-                @Test
-                public void excludeFieldInEntriesIfContainer() {
-                    Config config = builder.add(new EntriesContainerWithEmptyContainer()).build();
-                    assertEmpty(config);
-                }
-
-                @Test
-                public void excludeFieldInEntriesIfIgnoreAnnotated() {
-                    Config config = builder.add(new EntriesContainerWithIgnoredField()).build();
-                    assertEmpty(config);
-                }
-
-                @Test
-                public void excludeFieldInEntriesIfTransient() {
-                    Config config = builder.add(new EntriesContainerWithTransientField()).build();
-                    assertEmpty(config);
-                }
-
-                @Test
-                public void includeSuperclassFieldIfNonStatic() {
-                    Config config = builder.add(new SubclassOfContainerWithEntry()).build();
-                    assertEquals(1, config.getEntries().size());
-                }
-
-                @Test
-                public void excludeSuperclassFieldIfStatic() {
-                    Config config = builder.add(new SubclassOfContainerWithStaticEntry()).build();
-                    assertEmpty(config);
-                }
-
-            }
-
-            @Nested
-            public class Container {
-
-                @Test
-                public void includeField() {
-                    Config config = builder.add(new ContainerWithContainerWithEntry()).build();
-                    assertEquals(1, config.getEntries().size());
-                }
-
-                @Test
-                public void includeSuperclassField() {
-                    Config config = builder.add(new SubclassOfContainerWithContainerWithEntry()).build();
-                    assertEquals(1, config.getEntries().size());
-                }
-
-                @Test
-                public void includeOfMethod() {
-                    Config config = builder.add(new ContainerIncludingContainerWithEntry()).build();
-                    assertEquals(1, config.getEntries().size());
-                }
-
-                @Test
-                public void includeNestedIfStatic() {
-                    Config config = builder.add(new ContainerNestingStaticContainerWithEntry()).build();
-                    assertEquals(1, config.getEntries().size());
-                }
-
-                @Test
-                public void throwIfNestedNonContainer() {
-                    IllegalAnnotationTargetException exception = assertThrows(IllegalAnnotationTargetException.class, () -> builder.add(new ContainerNestingStaticClass()).build());
-                    assertEquals("Transitive " + ContainerNestingStaticClass.Class.class + " must implement " + ConfigContainer.class.getSimpleName(), exception.getMessage());
-                }
-
-                @Test
-                public void throwIfNestedNonStatic() {
-                    IllegalAnnotationTargetException exception = assertThrows(IllegalAnnotationTargetException.class, () -> builder.add(new ContainerNestingContainerWithEntry()).build());
-                    assertEquals("Transitive " + ContainerNestingContainerWithEntry.ContainerWithEntry.class + " must be static", exception.getMessage());
-                }
-
-            }
-
-            @Nested
-            public class Group {
-
-                @Test
-                public void logWarningIfEmpty() {
-                    builder.add(new EmptyGroup()).build();
-                    assertThat(logCaptor.getWarnLogs()).contains("[CompleteConfig] Group emptyGroup is empty");
-                }
-
-                @Test
-                public void includeField() {
-                    Config config = builder.add(new ContainerWithGroupWithEntry()).build();
-                    assertEquals(1, config.getCollections().size());
-                }
-
-                @Test
-                public void includeOfMethod() {
-                    Config config = builder.add(new ContainerIncludingGroupWithEntry()).build();
-                    assertEquals(1, config.getCollections().size());
-                }
-
-            }
-
-            @Nested
-            public class Listener {
-
-                @Test
-                public void listenSetter() {
-                    SetterListener listener = new SetterListener();
-                    Config config = builder.add(listener).build();
-                    boolean value = !listener.getValue();
-                    Iterables.getOnlyElement(config.getEntries()).setValue(value);
-                    assertEquals(value, listener.getValue());
-                }
-
-                @Test
-                public void doNotUpdateField() {
-                    EmptyListener listener = new EmptyListener();
-                    Config config = builder.add(listener).build();
-                    boolean oldValue = listener.getValue();
-                    Iterables.getOnlyElement(config.getEntries()).setValue(!oldValue);
-                    assertEquals(oldValue, listener.getValue());
-                }
-
-            }
-
-        }
-
-    }
-
-}

+ 140 - 0
lib/src/test/java/me/lortseam/completeconfig/data/BaseCollectionTest.java

@@ -0,0 +1,140 @@
+package me.lortseam.completeconfig.data;
+
+import com.google.common.collect.Iterables;
+import me.lortseam.completeconfig.api.ConfigContainer;
+import me.lortseam.completeconfig.data.text.TranslationIdentifier;
+import me.lortseam.completeconfig.exception.IllegalAnnotationTargetException;
+import me.lortseam.completeconfig.test.data.containers.*;
+import me.lortseam.completeconfig.test.data.groups.EmptyGroup;
+import me.lortseam.completeconfig.test.data.listeners.EmptyListener;
+import me.lortseam.completeconfig.test.data.listeners.SetterListener;
+import nl.altindag.log.LogCaptor;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.Mockito.mock;
+
+public class BaseCollectionTest {
+
+    private BaseCollection baseCollection;
+    private final LogCaptor logCaptor = LogCaptor.forRoot();
+
+    @BeforeEach
+    public void beforeEach() {
+        baseCollection = new BaseCollection(mock(TranslationIdentifier.class)) {};
+    }
+
+    @AfterEach
+    public void afterEach() {
+        logCaptor.clearLogs();
+    }
+
+    private void resolve(ConfigContainer... containers) {
+        baseCollection.resolve(Arrays.asList(containers));
+    }
+
+    @Test
+    public void resolve_includeFieldIfAnnotated() {
+        resolve(new ContainerWithEntry(), new ContainerWithContainerWithEntry(), new ContainerWithGroupWithEntry());
+        assertEquals(2, baseCollection.getEntries().size());
+        assertEquals(1, baseCollection.getCollections().size());
+    }
+
+    @Test
+    public void resolve_excludeFieldIfNotAnnotated() {
+        resolve(new ContainerWithField());
+        assertTrue(baseCollection.isEmpty());
+    }
+
+    @Test
+    public void resolve_includeFieldInEntries() {
+        resolve(new EntriesContainerWithEntry());
+        assertEquals(1, baseCollection.getEntries().size());
+    }
+
+    @Test
+    public void resolve_excludeFieldInEntriesIfContainer() {
+        resolve(new EntriesContainerWithEmptyContainer());
+        assertTrue(baseCollection.isEmpty());
+    }
+
+    @Test
+    public void resolve_excludeFieldInEntriesIfIgnoreAnnotated() {
+        resolve(new EntriesContainerWithIgnoredField());
+        assertTrue(baseCollection.isEmpty());
+    }
+
+    @Test
+    public void resolve_excludeFieldInEntriesIfTransient() {
+        resolve(new EntriesContainerWithTransientField());
+        assertTrue(baseCollection.isEmpty());
+    }
+
+    @Test
+    public void resolve_includeSuperclassFieldIfNonStatic() {
+        resolve(new SubclassOfContainerWithEntry(), new SubclassOfContainerWithContainerWithEntry());
+        assertEquals(2, baseCollection.getEntries().size());
+    }
+
+    @Test
+    public void resolve_excludeSuperclassFieldIfStatic() {
+        resolve(new SubclassOfContainerWithStaticEntry());
+        // TODO: Add container test
+        assertTrue(baseCollection.isEmpty());
+    }
+
+    @Test
+    public void resolve_includeFromMethod() {
+        resolve(new ContainerIncludingContainerWithEntry(), new ContainerIncludingGroupWithEntry());
+        assertEquals(1, baseCollection.getEntries().size());
+        assertEquals(1, baseCollection.getCollections().size());
+    }
+
+    @Test
+    public void resolve_includeNestedIfStatic() {
+        resolve(new ContainerNestingStaticContainerWithEntry());
+        assertEquals(1, baseCollection.getEntries().size());
+    }
+
+    @Test
+    public void resolve_throwIfNestedNonContainer() {
+        IllegalAnnotationTargetException exception = assertThrows(IllegalAnnotationTargetException.class, () -> resolve(new ContainerNestingStaticClass()));
+        assertEquals("Transitive " + ContainerNestingStaticClass.Class.class + " must implement " + ConfigContainer.class.getSimpleName(), exception.getMessage());
+    }
+
+    @Test
+    public void resolve_throwIfNestedNonStatic() {
+        IllegalAnnotationTargetException exception = assertThrows(IllegalAnnotationTargetException.class, () -> resolve(new ContainerNestingContainerWithEntry()));
+        assertEquals("Transitive " + ContainerNestingContainerWithEntry.ContainerWithEntry.class + " must be static", exception.getMessage());
+    }
+
+    @Test
+    public void resolve_logWarningIfEmpty() {
+        resolve(new EmptyGroup());
+        assertThat(logCaptor.getWarnLogs()).contains("[CompleteConfig] Group emptyGroup is empty");
+    }
+
+    @Test
+    public void resolve_listenSetter() {
+        SetterListener listener = new SetterListener();
+        resolve(listener);
+        boolean value = !listener.getValue();
+        Iterables.getOnlyElement(baseCollection.getEntries()).setValue(value);
+        assertEquals(value, listener.getValue());
+    }
+
+    @Test
+    public void resolve_doNotUpdateListenerField() {
+        EmptyListener listener = new EmptyListener();
+        resolve(listener);
+        boolean oldValue = listener.getValue();
+        Iterables.getOnlyElement(baseCollection.getEntries()).setValue(!oldValue);
+        assertEquals(oldValue, listener.getValue());
+    }
+
+}

+ 76 - 0
lib/src/test/java/me/lortseam/completeconfig/data/ConfigTest.java

@@ -0,0 +1,76 @@
+package me.lortseam.completeconfig.data;
+
+import me.lortseam.completeconfig.api.ConfigContainer;
+import me.lortseam.completeconfig.test.data.containers.EmptyContainer;
+import nl.altindag.log.LogCaptor;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.*;
+
+public class ConfigTest {
+
+    @Test
+    public void builder_throwExceptionIfModIDNull() {
+        NullPointerException exception = assertThrows(NullPointerException.class, () -> Config.builder(null));
+        assertEquals("modID is marked non-null but is null", exception.getMessage());
+    }
+
+    @Nested
+    public class Builder {
+
+        private static final String MOD_ID = "test";
+
+        private Config.Builder builder;
+        private final LogCaptor logCaptor = LogCaptor.forRoot();
+
+        @BeforeEach
+        public void beforeEach() {
+            builder = Config.builder(MOD_ID);
+        }
+
+        @AfterEach
+        public void afterEach() {
+            logCaptor.clearLogs();
+        }
+
+        @Test
+        public void setBranch_throwIfBranchNull() {
+            NullPointerException exception = assertThrows(NullPointerException.class, () -> builder.setBranch(null));
+            assertEquals("branch is marked non-null but is null", exception.getMessage());
+        }
+
+        @Test
+        public void setBranch_throwIfBranchContainsNullElement() {
+            assertThrows(NullPointerException.class, () -> builder.setBranch(new String[]{null}));
+        }
+
+        @Test
+        public void add_throwIfContainersNull() {
+            NullPointerException exception = assertThrows(NullPointerException.class, () -> builder.add((ConfigContainer[]) null));
+            assertEquals("containers is marked non-null but is null", exception.getMessage());
+        }
+
+        @Test
+        public void add_throwIfContainersContainNullElement() {
+            assertThrows(NullPointerException.class, () -> builder.add((ConfigContainer) null));
+        }
+
+        @Test
+        public void build_logWarningAndReturnNullIfChildrenEmpty() {
+            assertNull(builder.build());
+            assertThat(logCaptor.getWarnLogs()).contains("[CompleteConfig] Mod " + MOD_ID + " tried to create an empty config");
+        }
+
+        @Test
+        public void build_logWarningAndReturnNullIfEmpty() {
+            assertNull(builder.add(new EmptyContainer()).build());
+            assertThat(logCaptor.getWarnLogs()).containsExactly("[CompleteConfig] Config of ConfigSource(modID=" + MOD_ID + ", branch=[]) is empty");
+        }
+
+    }
+
+}

+ 0 - 12
lib/src/test/java/me/lortseam/completeconfig/data/containers/ContainerIncludingContainerWithEntry.java

@@ -1,12 +0,0 @@
-package me.lortseam.completeconfig.data.containers;
-
-import me.lortseam.completeconfig.api.ConfigContainer;
-
-public class ContainerIncludingContainerWithEntry implements ConfigContainer {
-
-    @Override
-    public ConfigContainer[] getTransitives() {
-        return new ConfigContainer[]{new ContainerWithEntry()};
-    }
-
-}

+ 0 - 13
lib/src/test/java/me/lortseam/completeconfig/data/containers/ContainerIncludingGroupWithEntry.java

@@ -1,13 +0,0 @@
-package me.lortseam.completeconfig.data.containers;
-
-import me.lortseam.completeconfig.api.ConfigContainer;
-import me.lortseam.completeconfig.data.groups.GroupWithEntry;
-
-public class ContainerIncludingGroupWithEntry implements ConfigContainer {
-
-    @Override
-    public ConfigContainer[] getTransitives() {
-        return new ConfigContainer[]{new GroupWithEntry()};
-    }
-
-}

+ 0 - 10
lib/src/test/java/me/lortseam/completeconfig/data/containers/ContainerWithContainerWithEntry.java

@@ -1,10 +0,0 @@
-package me.lortseam.completeconfig.data.containers;
-
-import me.lortseam.completeconfig.api.ConfigContainer;
-
-public class ContainerWithContainerWithEntry implements ConfigContainer {
-
-    @Transitive
-    private final ContainerWithEntry container = new ContainerWithEntry();
-
-}

+ 0 - 11
lib/src/test/java/me/lortseam/completeconfig/data/containers/ContainerWithGroupWithEntry.java

@@ -1,11 +0,0 @@
-package me.lortseam.completeconfig.data.containers;
-
-import me.lortseam.completeconfig.api.ConfigContainer;
-import me.lortseam.completeconfig.data.groups.GroupWithEntry;
-
-public class ContainerWithGroupWithEntry implements ConfigContainer {
-
-    @Transitive
-    private final GroupWithEntry group = new GroupWithEntry();
-
-}

+ 0 - 9
lib/src/test/java/me/lortseam/completeconfig/data/containers/ContainerWithNonAnnotatedContainerWithEntry.java

@@ -1,9 +0,0 @@
-package me.lortseam.completeconfig.data.containers;
-
-import me.lortseam.completeconfig.api.ConfigContainer;
-
-public class ContainerWithNonAnnotatedContainerWithEntry implements ConfigContainer {
-
-    private final ContainerWithEntry nonAnnotatedContainer = new ContainerWithEntry();
-
-}

+ 18 - 0
lib/src/test/java/me/lortseam/completeconfig/test/data/containers/ContainerIncludingContainerWithEntry.java

@@ -0,0 +1,18 @@
+package me.lortseam.completeconfig.test.data.containers;
+
+import me.lortseam.completeconfig.api.ConfigContainer;
+import me.lortseam.completeconfig.api.ConfigEntry;
+
+public class ContainerIncludingContainerWithEntry implements ConfigContainer {
+
+    @Override
+    public ConfigContainer[] getTransitives() {
+        return new ConfigContainer[]{new ConfigContainer() {
+
+            @ConfigEntry
+            private boolean entry;
+
+        }};
+    }
+
+}

+ 19 - 0
lib/src/test/java/me/lortseam/completeconfig/test/data/containers/ContainerIncludingGroupWithEntry.java

@@ -0,0 +1,19 @@
+package me.lortseam.completeconfig.test.data.containers;
+
+import me.lortseam.completeconfig.api.ConfigContainer;
+import me.lortseam.completeconfig.api.ConfigEntry;
+import me.lortseam.completeconfig.api.ConfigGroup;
+
+public class ContainerIncludingGroupWithEntry implements ConfigContainer {
+
+    @Override
+    public ConfigContainer[] getTransitives() {
+        return new ConfigContainer[]{new ConfigGroup() {
+
+            @ConfigEntry
+            private boolean entry;
+
+        }};
+    }
+
+}

+ 1 - 1
lib/src/test/java/me/lortseam/completeconfig/data/containers/ContainerNestingContainerWithEntry.java → lib/src/test/java/me/lortseam/completeconfig/test/data/containers/ContainerNestingContainerWithEntry.java

@@ -1,4 +1,4 @@
-package me.lortseam.completeconfig.data.containers;
+package me.lortseam.completeconfig.test.data.containers;
 
 import me.lortseam.completeconfig.api.ConfigEntry;
 import me.lortseam.completeconfig.api.ConfigContainer;

+ 1 - 1
lib/src/test/java/me/lortseam/completeconfig/data/containers/ContainerNestingStaticClass.java → lib/src/test/java/me/lortseam/completeconfig/test/data/containers/ContainerNestingStaticClass.java

@@ -1,4 +1,4 @@
-package me.lortseam.completeconfig.data.containers;
+package me.lortseam.completeconfig.test.data.containers;
 
 import me.lortseam.completeconfig.api.ConfigContainer;
 

+ 1 - 1
lib/src/test/java/me/lortseam/completeconfig/data/containers/ContainerNestingStaticContainerWithEntry.java → lib/src/test/java/me/lortseam/completeconfig/test/data/containers/ContainerNestingStaticContainerWithEntry.java

@@ -1,4 +1,4 @@
-package me.lortseam.completeconfig.data.containers;
+package me.lortseam.completeconfig.test.data.containers;
 
 import me.lortseam.completeconfig.api.ConfigEntry;
 import me.lortseam.completeconfig.api.ConfigContainer;

+ 16 - 0
lib/src/test/java/me/lortseam/completeconfig/test/data/containers/ContainerWithContainerWithEntry.java

@@ -0,0 +1,16 @@
+package me.lortseam.completeconfig.test.data.containers;
+
+import me.lortseam.completeconfig.api.ConfigContainer;
+import me.lortseam.completeconfig.api.ConfigEntry;
+
+public class ContainerWithContainerWithEntry implements ConfigContainer {
+
+    @Transitive
+    private final ConfigContainer container = new ConfigContainer() {
+
+        @ConfigEntry
+        private boolean entry;
+
+    };
+
+}

+ 1 - 5
lib/src/test/java/me/lortseam/completeconfig/data/containers/ContainerWithEntry.java → lib/src/test/java/me/lortseam/completeconfig/test/data/containers/ContainerWithEntry.java

@@ -1,4 +1,4 @@
-package me.lortseam.completeconfig.data.containers;
+package me.lortseam.completeconfig.test.data.containers;
 
 import me.lortseam.completeconfig.api.ConfigEntry;
 import me.lortseam.completeconfig.api.ConfigContainer;
@@ -8,8 +8,4 @@ public class ContainerWithEntry implements ConfigContainer {
     @ConfigEntry
     private boolean entry;
 
-    public boolean getValue() {
-        return entry;
-    }
-
 }

+ 1 - 1
lib/src/test/java/me/lortseam/completeconfig/data/containers/ContainerWithField.java → lib/src/test/java/me/lortseam/completeconfig/test/data/containers/ContainerWithField.java

@@ -1,4 +1,4 @@
-package me.lortseam.completeconfig.data.containers;
+package me.lortseam.completeconfig.test.data.containers;
 
 import me.lortseam.completeconfig.api.ConfigContainer;
 

+ 17 - 0
lib/src/test/java/me/lortseam/completeconfig/test/data/containers/ContainerWithGroupWithEntry.java

@@ -0,0 +1,17 @@
+package me.lortseam.completeconfig.test.data.containers;
+
+import me.lortseam.completeconfig.api.ConfigContainer;
+import me.lortseam.completeconfig.api.ConfigEntry;
+import me.lortseam.completeconfig.api.ConfigGroup;
+
+public class ContainerWithGroupWithEntry implements ConfigContainer {
+
+    @Transitive
+    private final ConfigGroup group = new ConfigGroup() {
+
+        @ConfigEntry
+        private boolean entry;
+
+    };
+
+}

+ 15 - 0
lib/src/test/java/me/lortseam/completeconfig/test/data/containers/ContainerWithNonAnnotatedContainerWithEntry.java

@@ -0,0 +1,15 @@
+package me.lortseam.completeconfig.test.data.containers;
+
+import me.lortseam.completeconfig.api.ConfigContainer;
+import me.lortseam.completeconfig.api.ConfigEntry;
+
+public class ContainerWithNonAnnotatedContainerWithEntry implements ConfigContainer {
+
+    private final ConfigContainer nonAnnotatedContainer = new ConfigContainer() {
+
+        @ConfigEntry
+        private boolean entry;
+
+    };
+
+}

+ 1 - 1
lib/src/test/java/me/lortseam/completeconfig/data/containers/ContainerWithStaticEntry.java → lib/src/test/java/me/lortseam/completeconfig/test/data/containers/ContainerWithStaticEntry.java

@@ -1,4 +1,4 @@
-package me.lortseam.completeconfig.data.containers;
+package me.lortseam.completeconfig.test.data.containers;
 
 import me.lortseam.completeconfig.api.ConfigEntry;
 import me.lortseam.completeconfig.api.ConfigContainer;

+ 1 - 1
lib/src/test/java/me/lortseam/completeconfig/data/containers/EmptyContainer.java → lib/src/test/java/me/lortseam/completeconfig/test/data/containers/EmptyContainer.java

@@ -1,4 +1,4 @@
-package me.lortseam.completeconfig.data.containers;
+package me.lortseam.completeconfig.test.data.containers;
 
 import me.lortseam.completeconfig.api.ConfigContainer;
 

+ 4 - 2
lib/src/test/java/me/lortseam/completeconfig/data/containers/EntriesContainerWithEmptyContainer.java → lib/src/test/java/me/lortseam/completeconfig/test/data/containers/EntriesContainerWithEmptyContainer.java

@@ -1,4 +1,4 @@
-package me.lortseam.completeconfig.data.containers;
+package me.lortseam.completeconfig.test.data.containers;
 
 import me.lortseam.completeconfig.api.ConfigContainer;
 import me.lortseam.completeconfig.api.ConfigEntries;
@@ -6,6 +6,8 @@ import me.lortseam.completeconfig.api.ConfigEntries;
 @ConfigEntries
 public class EntriesContainerWithEmptyContainer implements ConfigContainer {
 
-    private final EmptyContainer emptyContainer = new EmptyContainer();
+    private final ConfigContainer emptyContainer = new ConfigContainer() {
+
+    };
 
 }

+ 1 - 1
lib/src/test/java/me/lortseam/completeconfig/data/containers/EntriesContainerWithEntry.java → lib/src/test/java/me/lortseam/completeconfig/test/data/containers/EntriesContainerWithEntry.java

@@ -1,4 +1,4 @@
-package me.lortseam.completeconfig.data.containers;
+package me.lortseam.completeconfig.test.data.containers;
 
 import me.lortseam.completeconfig.api.ConfigContainer;
 import me.lortseam.completeconfig.api.ConfigEntries;

+ 1 - 1
lib/src/test/java/me/lortseam/completeconfig/data/containers/EntriesContainerWithIgnoredField.java → lib/src/test/java/me/lortseam/completeconfig/test/data/containers/EntriesContainerWithIgnoredField.java

@@ -1,4 +1,4 @@
-package me.lortseam.completeconfig.data.containers;
+package me.lortseam.completeconfig.test.data.containers;
 
 import me.lortseam.completeconfig.api.ConfigContainer;
 import me.lortseam.completeconfig.api.ConfigEntries;

+ 1 - 1
lib/src/test/java/me/lortseam/completeconfig/data/containers/EntriesContainerWithTransientField.java → lib/src/test/java/me/lortseam/completeconfig/test/data/containers/EntriesContainerWithTransientField.java

@@ -1,4 +1,4 @@
-package me.lortseam.completeconfig.data.containers;
+package me.lortseam.completeconfig.test.data.containers;
 
 import me.lortseam.completeconfig.api.ConfigContainer;
 import me.lortseam.completeconfig.api.ConfigEntries;

+ 1 - 1
lib/src/test/java/me/lortseam/completeconfig/data/containers/SubclassOfContainerWithContainerWithEntry.java → lib/src/test/java/me/lortseam/completeconfig/test/data/containers/SubclassOfContainerWithContainerWithEntry.java

@@ -1,4 +1,4 @@
-package me.lortseam.completeconfig.data.containers;
+package me.lortseam.completeconfig.test.data.containers;
 
 public class SubclassOfContainerWithContainerWithEntry extends ContainerWithContainerWithEntry {
 

+ 1 - 1
lib/src/test/java/me/lortseam/completeconfig/data/containers/SubclassOfContainerWithEntry.java → lib/src/test/java/me/lortseam/completeconfig/test/data/containers/SubclassOfContainerWithEntry.java

@@ -1,4 +1,4 @@
-package me.lortseam.completeconfig.data.containers;
+package me.lortseam.completeconfig.test.data.containers;
 
 public class SubclassOfContainerWithEntry extends ContainerWithEntry {
 

+ 1 - 1
lib/src/test/java/me/lortseam/completeconfig/data/containers/SubclassOfContainerWithStaticEntry.java → lib/src/test/java/me/lortseam/completeconfig/test/data/containers/SubclassOfContainerWithStaticEntry.java

@@ -1,4 +1,4 @@
-package me.lortseam.completeconfig.data.containers;
+package me.lortseam.completeconfig.test.data.containers;
 
 public class SubclassOfContainerWithStaticEntry extends ContainerWithStaticEntry {
 

+ 1 - 1
lib/src/test/java/me/lortseam/completeconfig/data/groups/EmptyGroup.java → lib/src/test/java/me/lortseam/completeconfig/test/data/groups/EmptyGroup.java

@@ -1,4 +1,4 @@
-package me.lortseam.completeconfig.data.groups;
+package me.lortseam.completeconfig.test.data.groups;
 
 import me.lortseam.completeconfig.api.ConfigGroup;
 

+ 1 - 1
lib/src/test/java/me/lortseam/completeconfig/data/groups/GroupWithEntry.java → lib/src/test/java/me/lortseam/completeconfig/test/data/groups/GroupWithEntry.java

@@ -1,4 +1,4 @@
-package me.lortseam.completeconfig.data.groups;
+package me.lortseam.completeconfig.test.data.groups;
 
 import me.lortseam.completeconfig.api.ConfigEntry;
 import me.lortseam.completeconfig.api.ConfigGroup;

+ 1 - 1
lib/src/test/java/me/lortseam/completeconfig/data/listeners/EmptyListener.java → lib/src/test/java/me/lortseam/completeconfig/test/data/listeners/EmptyListener.java

@@ -1,4 +1,4 @@
-package me.lortseam.completeconfig.data.listeners;
+package me.lortseam.completeconfig.test.data.listeners;
 
 import me.lortseam.completeconfig.api.ConfigEntry;
 import me.lortseam.completeconfig.api.ConfigContainer;

+ 1 - 1
lib/src/test/java/me/lortseam/completeconfig/data/listeners/SetterListener.java → lib/src/test/java/me/lortseam/completeconfig/test/data/listeners/SetterListener.java

@@ -1,4 +1,4 @@
-package me.lortseam.completeconfig.data.listeners;
+package me.lortseam.completeconfig.test.data.listeners;
 
 import me.lortseam.completeconfig.api.ConfigEntry;
 import me.lortseam.completeconfig.api.ConfigContainer;

+ 1 - 1
lib/src/test/java/me/lortseam/completeconfig/extension/FabricLoaderExtension.java → lib/src/test/java/me/lortseam/completeconfig/test/extension/FabricLoaderExtension.java

@@ -1,4 +1,4 @@
-package me.lortseam.completeconfig.extension;
+package me.lortseam.completeconfig.test.extension;
 
 import com.google.common.jimfs.Jimfs;
 import net.fabricmc.api.EnvType;

+ 1 - 1
lib/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension

@@ -1 +1 @@
-me.lortseam.completeconfig.extension.FabricLoaderExtension
+me.lortseam.completeconfig.test.extension.FabricLoaderExtension