[weaver-pojo-attributes-ext] Test and some javadocs
This commit is contained in:
@@ -2,6 +2,10 @@ package de.siphalor.tweed5.weaver.pojoext.attributes.api;
|
|||||||
|
|
||||||
import java.lang.annotation.*;
|
import java.lang.annotation.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines an attribute on a config entry.
|
||||||
|
* The attribute will not be inherited by subentries.
|
||||||
|
*/
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE, ElementType.TYPE_USE})
|
@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE, ElementType.TYPE_USE})
|
||||||
@Repeatable(Attributes.class)
|
@Repeatable(Attributes.class)
|
||||||
|
|||||||
@@ -2,6 +2,10 @@ package de.siphalor.tweed5.weaver.pojoext.attributes.api;
|
|||||||
|
|
||||||
import java.lang.annotation.*;
|
import java.lang.annotation.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines a default value for an attribute.
|
||||||
|
* Default values will be inherited by subentries, but can be overridden individually using {@link Attribute}.
|
||||||
|
*/
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE, ElementType.TYPE_USE})
|
@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE, ElementType.TYPE_USE})
|
||||||
@Repeatable(AttributeDefaults.class)
|
@Repeatable(AttributeDefaults.class)
|
||||||
|
|||||||
@@ -0,0 +1,93 @@
|
|||||||
|
package de.siphalor.tweed5.weaver.pojoext.attributes.api;
|
||||||
|
|
||||||
|
import de.siphalor.tweed5.attributesextension.api.AttributesExtension;
|
||||||
|
import de.siphalor.tweed5.core.api.container.ConfigContainer;
|
||||||
|
import de.siphalor.tweed5.core.api.entry.CompoundConfigEntry;
|
||||||
|
import de.siphalor.tweed5.core.api.entry.ConfigEntry;
|
||||||
|
import de.siphalor.tweed5.weaver.pojo.api.annotation.CompoundWeaving;
|
||||||
|
import de.siphalor.tweed5.weaver.pojo.api.annotation.DefaultWeavingExtensions;
|
||||||
|
import de.siphalor.tweed5.weaver.pojo.api.annotation.PojoWeaving;
|
||||||
|
import de.siphalor.tweed5.weaver.pojo.api.annotation.PojoWeavingExtension;
|
||||||
|
import de.siphalor.tweed5.weaver.pojo.impl.weaving.TweedPojoWeaverBootstrapper;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.assertj.core.api.InstanceOfAssertFactories.type;
|
||||||
|
|
||||||
|
class AttributesPojoWeavingProcessorTest {
|
||||||
|
@Test
|
||||||
|
void test() {
|
||||||
|
ConfigContainer<Config> configContainer = TweedPojoWeaverBootstrapper.create(Config.class).weave();
|
||||||
|
configContainer.initialize();
|
||||||
|
|
||||||
|
AttributesExtension attributesExtension = configContainer.extension(AttributesExtension.class).orElseThrow();
|
||||||
|
|
||||||
|
assertThat(configContainer.rootEntry()).asInstanceOf(type(CompoundConfigEntry.class)).satisfies(
|
||||||
|
compoundEntry -> assertThat(compoundEntry.subEntries().get("string"))
|
||||||
|
.asInstanceOf(type(ConfigEntry.class)).satisfies(
|
||||||
|
entry -> assertThat(attributesExtension.getAttributeValues(entry, "scope"))
|
||||||
|
.isEqualTo(List.of("game"))
|
||||||
|
),
|
||||||
|
compoundEntry -> assertThat(compoundEntry.subEntries().get("sub1"))
|
||||||
|
.asInstanceOf(type(CompoundConfigEntry.class)).satisfies(
|
||||||
|
subEntry -> assertThat(attributesExtension.getAttributeValues(subEntry, "color"))
|
||||||
|
.isEqualTo(List.of("green")),
|
||||||
|
subEntry -> assertThat(subEntry.subEntries().get("a"))
|
||||||
|
.asInstanceOf(type(ConfigEntry.class)).satisfies(
|
||||||
|
entry -> assertThat(attributesExtension.getAttributeValues(entry, "color"))
|
||||||
|
.isEqualTo(List.of("red"))
|
||||||
|
),
|
||||||
|
subEntry -> assertThat(subEntry.subEntries().get("b"))
|
||||||
|
.asInstanceOf(type(ConfigEntry.class)).satisfies(
|
||||||
|
entry -> assertThat(attributesExtension.getAttributeValues(entry, "color"))
|
||||||
|
.isNullOrEmpty()
|
||||||
|
)
|
||||||
|
),
|
||||||
|
compoundEntry -> assertThat(compoundEntry.subEntries().get("sub2"))
|
||||||
|
.asInstanceOf(type(CompoundConfigEntry.class)).satisfies(
|
||||||
|
subEntry -> assertThat(attributesExtension.getAttributeValues(subEntry, "color"))
|
||||||
|
.isEqualTo(List.of("green")),
|
||||||
|
subEntry -> assertThat(attributesExtension.getAttributeValues(subEntry, "scope"))
|
||||||
|
.isEqualTo(List.of("world")),
|
||||||
|
subEntry -> assertThat(subEntry.subEntries().get("a"))
|
||||||
|
.asInstanceOf(type(ConfigEntry.class)).satisfies(
|
||||||
|
entry -> assertThat(attributesExtension.getAttributeValues(entry, "color"))
|
||||||
|
.isEqualTo(List.of("red")),
|
||||||
|
entry -> assertThat(attributesExtension.getAttributeValues(entry, "scope"))
|
||||||
|
.isEqualTo(List.of("game"))
|
||||||
|
),
|
||||||
|
subEntry -> assertThat(subEntry.subEntries().get("b"))
|
||||||
|
.asInstanceOf(type(ConfigEntry.class)).satisfies(
|
||||||
|
entry -> assertThat(attributesExtension.getAttributeValues(entry, "color"))
|
||||||
|
.isEqualTo(List.of("green")),
|
||||||
|
entry -> assertThat(attributesExtension.getAttributeValues(entry, "scope"))
|
||||||
|
.isEqualTo(List.of("game"))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PojoWeaving(extensions = AttributesExtension.class)
|
||||||
|
@DefaultWeavingExtensions
|
||||||
|
@PojoWeavingExtension(AttributesPojoWeavingProcessor.class)
|
||||||
|
@CompoundWeaving
|
||||||
|
public static class Config {
|
||||||
|
@Attribute(key = "scope", values = "game")
|
||||||
|
public String string;
|
||||||
|
@Attribute(key = "color", values = "green")
|
||||||
|
public SubConfig sub1;
|
||||||
|
@AttributeDefault(key = "color", defaultValue = "green")
|
||||||
|
@AttributeDefault(key = "scope", defaultValue = "game")
|
||||||
|
@Attribute(key = "scope", values = "world")
|
||||||
|
public SubConfig sub2;
|
||||||
|
}
|
||||||
|
|
||||||
|
@CompoundWeaving
|
||||||
|
public static class SubConfig {
|
||||||
|
@Attribute(key = "color", values = "red")
|
||||||
|
public String a;
|
||||||
|
public String b;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user