Fix issue73: set can be loaded as seq
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue73/Blog.java b/src/test/java/org/yaml/snakeyaml/issues/issue73/Blog.java
index 39ff8ea..2ae3ee6 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue73/Blog.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue73/Blog.java
@@ -16,15 +16,15 @@
package org.yaml.snakeyaml.issues.issue73;
-import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;
-class Blog {
+public class Blog {
private String name;
- private Set<Post> posts = new HashSet<Post>();
- public Set<Integer> numbers = new TreeSet<Integer>();
+ private Set<Post> posts = new TreeSet<Post>();
+ public Set<Integer> numbers = new LinkedHashSet<Integer>();
public Blog() {
name = "SuperBlog";
@@ -49,4 +49,24 @@
public void setName(String name) {
this.name = name;
}
+
+ public void setPosts(Set<Post> posts) {
+ this.posts = posts;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ return name.equals(obj.toString());
+ }
+
+ @Override
+ public int hashCode() {
+ return name.hashCode();
+ }
+
+ @Override
+ public String toString() {
+ return "Blog '" + name + "'";
+ }
+
}
\ No newline at end of file
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue73/Post.java b/src/test/java/org/yaml/snakeyaml/issues/issue73/Post.java
index 963e1db..85f85e7 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue73/Post.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue73/Post.java
@@ -16,7 +16,7 @@
package org.yaml.snakeyaml.issues.issue73;
-class Post {
+class Post implements Comparable<Post> {
private String title;
private String text;
@@ -37,4 +37,8 @@
public String getText() {
return text;
}
+
+ public int compareTo(Post o) {
+ return title.compareTo(o.title);
+ }
}
\ No newline at end of file
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue73/SetAsSequenceTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue73/SetAsSequenceTest.java
index 8b5a49d..de2ed00 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue73/SetAsSequenceTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue73/SetAsSequenceTest.java
@@ -20,6 +20,9 @@
import junit.framework.TestCase;
+import org.yaml.snakeyaml.Dumper;
+import org.yaml.snakeyaml.DumperOptions;
+import org.yaml.snakeyaml.JavaBeanLoader;
import org.yaml.snakeyaml.Loader;
import org.yaml.snakeyaml.Util;
import org.yaml.snakeyaml.Yaml;
@@ -31,41 +34,47 @@
Blog blog = new Blog("Test Me!");
blog.addPost(new Post("Title1", "text 1"));
blog.addPost(new Post("Title2", "text text 2"));
- blog.numbers.add(17);
blog.numbers.add(19);
- Yaml yaml = new Yaml();
+ blog.numbers.add(17);
+ DumperOptions options = new DumperOptions();
+ options.setAllowReadOnlyProperties(true);
+ Yaml yaml = new Yaml(new Dumper(options));
String output = yaml.dump(blog);
- System.out.println(output);
+ // System.out.println(output);
assertEquals(Util.getLocalResource("issues/issue73-1.txt"), output);
}
public void testLoad() {
+ Loader loader = new Loader();
+ loader.setBeanAccess(BeanAccess.FIELD);
+ Yaml yaml = new Yaml(loader);
String doc = Util.getLocalResource("issues/issue73-1.txt");
- Blog blog = (Blog) constructYamlParser().load(doc);
- System.out.println(blog);
+ Blog blog = (Blog) yaml.load(doc);
+ // System.out.println(blog);
+ 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());
+ }
}
public void testYaml() {
- String serialized = "!!org.yaml.snakeyaml.issues.issue73.Blog\n" + "posts:\n"
- + " - text: Dummy\n" + " title: Test\n" + " - text: Creative\n"
- + " title: Highly\n";
-
- Yaml yaml2 = constructYamlParser();
- Blog rehydrated = (Blog) yaml2.load(serialized);
+ String serialized = Util.getLocalResource("issues/issue73-2.txt");
+ // System.out.println(serialized);
+ JavaBeanLoader<Blog> beanLoader = new JavaBeanLoader<Blog>(Blog.class, BeanAccess.FIELD);
+ Blog rehydrated = beanLoader.load(serialized);
checkTestBlog(rehydrated);
}
- protected Yaml constructYamlParser() {
- Loader loader = new Loader();
- loader.setBeanAccess(BeanAccess.FIELD);
-
- Yaml yaml = new Yaml(loader);
- return yaml;
- }
-
protected void checkTestBlog(Blog blog) {
Set<Post> posts = blog.getPosts();
assertEquals("Blog contains 2 posts", 2, posts.size());
+ for (Post post : posts) {
+ assertEquals(Post.class, post.getClass());
+ }
+ assertEquals("No tags!", blog.getName());
+ assertEquals(0, blog.numbers.size());
}
}
diff --git a/src/test/resources/issues/issue73-1.txt b/src/test/resources/issues/issue73-1.txt
index 7b8437b..67be3af 100644
--- a/src/test/resources/issues/issue73-1.txt
+++ b/src/test/resources/issues/issue73-1.txt
@@ -1,4 +1,9 @@
!!org.yaml.snakeyaml.issues.issue73.Blog
name: Test Me!
-numbers: !!set {17: null, 19: null}
+numbers: !!set {19: null, 17: null}
+posts: !!set
+ ? {text: text 1, title: Title1}
+ : null
+ ? {text: text text 2, title: Title2}
+ : null
diff --git a/src/test/resources/issues/issue73-2.txt b/src/test/resources/issues/issue73-2.txt
new file mode 100644
index 0000000..ade8322
--- /dev/null
+++ b/src/test/resources/issues/issue73-2.txt
@@ -0,0 +1,7 @@
+name: No tags!
+posts:
+ - text: Dummy
+ title: Test
+ - text: Creative
+ title: Highly
+