issue73: provide an example to serialise a java.util.Set as a sequence
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index c6441f1..07c8f14 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -8,7 +8,8 @@
<body>
<release version="1.7" date="in Mercurial" description="development">
<action dev="py4fun" type="add" issue="73" due-to="birnbuazn">
- Provide sequence support for loading java.util.Set (2010-07-19)
+ Provide sequence support for loading java.util.Set. Also provide an example
+ to serialise a java.util.Set as a sequence. (2010-07-19)
</action>
<action dev="py4fun" type="add" issue="72" due-to="birnbuazn">
Support java.util.Collection as a parent for List and Set (2010-07-09)
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue73/DumpSetAsSequenceExampleTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue73/DumpSetAsSequenceExampleTest.java
new file mode 100644
index 0000000..9afe840
--- /dev/null
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue73/DumpSetAsSequenceExampleTest.java
@@ -0,0 +1,90 @@
+/**
+ * Copyright (c) 2008-2010, http://code.google.com/p/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 org.yaml.snakeyaml.issues.issue73;
+
+import java.util.Set;
+import java.util.TreeSet;
+
+import junit.framework.TestCase;
+
+import org.yaml.snakeyaml.Dumper;
+import org.yaml.snakeyaml.DumperOptions;
+import org.yaml.snakeyaml.Loader;
+import org.yaml.snakeyaml.Util;
+import org.yaml.snakeyaml.Yaml;
+import org.yaml.snakeyaml.DumperOptions.FlowStyle;
+import org.yaml.snakeyaml.introspector.BeanAccess;
+import org.yaml.snakeyaml.representer.Representer;
+
+public class DumpSetAsSequenceExampleTest extends TestCase {
+
+ public void testDumpFlow() {
+ DumperOptions options = new DumperOptions();
+ options.setAllowReadOnlyProperties(true);
+ Yaml yaml = new Yaml(new Dumper(new SetRepresenter(), options));
+ String output = yaml.dump(createBlog());
+ // System.out.println(output);
+ assertEquals(Util.getLocalResource("issues/issue73-dump7.txt"), output);
+ //
+ check(output);
+ }
+
+ public void testDumpBlock() {
+ DumperOptions options = new DumperOptions();
+ options.setAllowReadOnlyProperties(true);
+ options.setDefaultFlowStyle(FlowStyle.BLOCK);
+ Yaml yaml = new Yaml(new Dumper(new SetRepresenter(), options));
+ String output = yaml.dump(createBlog());
+ // System.out.println(output);
+ assertEquals(Util.getLocalResource("issues/issue73-dump8.txt"), output);
+ //
+ check(output);
+ }
+
+ private class SetRepresenter extends Representer {
+ public SetRepresenter() {
+ this.multiRepresenters.remove(Set.class);
+ }
+ }
+
+ private Blog createBlog() {
+ Blog blog = new Blog("Test Me!");
+ blog.addPost(new Post("Title1", "text 1"));
+ blog.addPost(new Post("Title2", "text text 2"));
+ blog.numbers.add(19);
+ blog.numbers.add(17);
+ TreeSet<String> labels = new TreeSet<String>();
+ labels.add("Java");
+ labels.add("YAML");
+ labels.add("SnakeYAML");
+ blog.setLabels(labels);
+ return blog;
+ }
+
+ private void check(String doc) {
+ Loader loader = new Loader();
+ loader.setBeanAccess(BeanAccess.FIELD);
+ Yaml yamlLoader = new Yaml(loader);
+ Blog blog = (Blog) yamlLoader.load(doc);
+ assertEquals("Test Me!", blog.getName());
+ assertEquals(2, blog.numbers.size());
+ assertEquals(2, blog.getPosts().size());
+ for (Post post : blog.getPosts()) {
+ assertEquals(Post.class, post.getClass());
+ }
+ }
+}
diff --git a/src/test/resources/issues/issue73-dump7.txt b/src/test/resources/issues/issue73-dump7.txt
new file mode 100644
index 0000000..0d36c28
--- /dev/null
+++ b/src/test/resources/issues/issue73-dump7.txt
@@ -0,0 +1,8 @@
+!!org.yaml.snakeyaml.issues.issue73.Blog
+labels: [Java, SnakeYAML, YAML]
+name: Test Me!
+numbers: [19, 17]
+posts:
+- {text: text 1, title: Title1}
+- {text: text text 2, title: Title2}
+
diff --git a/src/test/resources/issues/issue73-dump8.txt b/src/test/resources/issues/issue73-dump8.txt
new file mode 100644
index 0000000..2b61b71
--- /dev/null
+++ b/src/test/resources/issues/issue73-dump8.txt
@@ -0,0 +1,15 @@
+!!org.yaml.snakeyaml.issues.issue73.Blog
+labels:
+- Java
+- SnakeYAML
+- YAML
+name: Test Me!
+numbers:
+- 19
+- 17
+posts:
+- text: text 1
+ title: Title1
+- text: text text 2
+ title: Title2
+