aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/examples/enumset/YamlEnumSetTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/examples/enumset/YamlEnumSetTest.java')
-rw-r--r--src/test/java/examples/enumset/YamlEnumSetTest.java144
1 files changed, 144 insertions, 0 deletions
diff --git a/src/test/java/examples/enumset/YamlEnumSetTest.java b/src/test/java/examples/enumset/YamlEnumSetTest.java
new file mode 100644
index 00000000..d71e587d
--- /dev/null
+++ b/src/test/java/examples/enumset/YamlEnumSetTest.java
@@ -0,0 +1,144 @@
+/**
+ * Copyright (c) 2008, SnakeYAML
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package examples.enumset;
+
+import java.util.EnumSet;
+import org.junit.Assert;
+import org.junit.Test;
+import org.yaml.snakeyaml.LoaderOptions;
+import org.yaml.snakeyaml.TypeDescription;
+import org.yaml.snakeyaml.Yaml;
+import org.yaml.snakeyaml.error.YAMLException;
+import org.yaml.snakeyaml.nodes.Node;
+
+public class YamlEnumSetTest {
+
+ Day day;
+ EnumSet<Day> setOfDays;
+
+ public Day getDay() {
+ return this.day;
+ }
+
+ public void setDay(Day day) {
+ this.day = day;
+ }
+
+ public EnumSet<Day> getSetOfDays() {
+ return this.setOfDays;
+ }
+
+ public void setSetOfDays(EnumSet<Day> setOfDays) {
+ this.setOfDays = setOfDays;
+ }
+
+ @Test
+ public void enumSetDumpLoad() {
+
+ YamlEnumSetTest yEST = new YamlEnumSetTest();
+ yEST.day = Day.SUNDAY;
+ yEST.setOfDays = EnumSet.of(Day.MONDAY, Day.WEDNESDAY, Day.FRIDAY);
+
+ String output = createYaml().dump(yEST);
+ YamlEnumSetTest loaded = createYaml().loadAs(output, YamlEnumSetTest.class);
+ Assert.assertSame(loaded.day, Day.SUNDAY);
+
+ Object[] expected = yEST.setOfDays.toArray();
+ Object[] actual = loaded.setOfDays.toArray();
+
+ Assert.assertArrayEquals(expected, actual);
+ Assert.assertEquals(yEST.setOfDays, loaded.setOfDays);
+ }
+
+ @Test
+ public void enumSetLoadWithoutTags() {
+
+ YamlEnumSetTest yEST = new YamlEnumSetTest();
+ yEST.day = Day.SUNDAY;
+ yEST.setOfDays = EnumSet.of(Day.MONDAY, Day.WEDNESDAY, Day.FRIDAY);
+
+ String yamlStr = "day: SUNDAY\nsetOfDays: { MONDAY, WEDNESDAY, FRIDAY }\n";
+ YamlEnumSetTest loaded = createYaml().loadAs(yamlStr, YamlEnumSetTest.class);
+ Assert.assertSame(loaded.day, Day.SUNDAY);
+
+ Object[] expected = yEST.setOfDays.toArray();
+ Object[] actual = loaded.setOfDays.toArray();
+
+ Assert.assertArrayEquals(expected, actual);
+ Assert.assertEquals(yEST.setOfDays, loaded.setOfDays);
+ }
+
+ @Test
+ public void enumSetLoadWithoutCaseSensitive() {
+ // given
+ LoaderOptions loaderOptions = new LoaderOptions();
+ loaderOptions.setEnumCaseSensitive(false);
+
+ YamlEnumSetTest yEST = new YamlEnumSetTest();
+ yEST.day = Day.SUNDAY;
+ yEST.setOfDays = EnumSet.of(Day.MONDAY, Day.WEDNESDAY, Day.FRIDAY);
+
+ String yamlStr = "day: SUNDAY\nsetOfDays: { MONDAY, wednesday, friDay }\n";
+
+ // when
+ YamlEnumSetTest loaded = createYaml(loaderOptions).loadAs(yamlStr, YamlEnumSetTest.class);
+
+ // then
+ Assert.assertSame(loaded.day, Day.SUNDAY);
+
+ Object[] expected = yEST.setOfDays.toArray();
+ Object[] actual = loaded.setOfDays.toArray();
+
+ Assert.assertArrayEquals(expected, actual);
+ Assert.assertEquals(yEST.setOfDays, loaded.setOfDays);
+ }
+
+ @Test(expected = YAMLException.class)
+ public void enumSetLoadWithCaseSensitive() {
+ YamlEnumSetTest yEST = new YamlEnumSetTest();
+ yEST.day = Day.SUNDAY;
+ yEST.setOfDays = EnumSet.of(Day.MONDAY, Day.WEDNESDAY, Day.FRIDAY);
+
+ String yamlStr = "day: SUNDAY\nsetOfDays: { MONDAY, wednesday, friDay }\n";
+
+ // when
+ createYaml().loadAs(yamlStr, YamlEnumSetTest.class);
+ }
+
+ private Yaml createYaml(LoaderOptions loaderOptions) {
+ Yaml yaml = loaderOptions != null ? new Yaml(loaderOptions) : new Yaml();
+
+ TypeDescription yamlEnumSetTD = new TypeDescription(YamlEnumSetTest.class) {
+
+ @Override
+ public Object newInstance(String propertyName, Node node) {
+ if ("setOfDays".equals(propertyName)) {
+ node.setTwoStepsConstruction(true);
+ return EnumSet.noneOf(Day.class);
+ }
+ return super.newInstance(propertyName, node);
+ }
+ };
+
+ yaml.addTypeDescription(yamlEnumSetTD);
+
+ return yaml;
+ }
+
+ private Yaml createYaml() {
+ return createYaml(null);
+ }
+
+
+}