1b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov/**
211a89b445f3bde56bf07e6a0d04f0b0256dcb215Andrey Somov * Copyright (c) 2008, http://www.snakeyaml.org
3b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov *
4b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Licensed under the Apache License, Version 2.0 (the "License");
5b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * you may not use this file except in compliance with the License.
6b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * You may obtain a copy of the License at
7b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov *
8b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov *     http://www.apache.org/licenses/LICENSE-2.0
9b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov *
10b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Unless required by applicable law or agreed to in writing, software
11b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * distributed under the License is distributed on an "AS IS" BASIS,
12b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * See the License for the specific language governing permissions and
14b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * limitations under the License.
15b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */
16b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovpackage org.yaml.snakeyaml.extensions.compactnotation;
17b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
18b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport java.util.Iterator;
19b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport java.util.List;
20b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport java.util.Map;
21b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
22b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport junit.framework.TestCase;
23b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
24b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.Util;
25b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.Yaml;
26b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.constructor.Constructor;
27b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
28b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovpublic class CompactConstructorExampleTest extends TestCase {
29b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
30b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    private Object load(String fileName) {
31b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        CompactConstructor compact = new CompactConstructor();
32b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Yaml yaml = new Yaml(compact);
33b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        String doc = Util.getLocalResource("compactnotation/" + fileName);
34b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Object obj = yaml.load(doc);
35b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertNotNull(obj);
36b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        return obj;
37b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    }
38b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
39b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    public void test1() {
40b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Object obj = load("example1.yaml");
41b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(new Container(), obj);
42b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    }
43b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
44b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    public void test2() {
45b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Object obj = load("example2.yaml");
46b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(new Container("title"), obj);
47b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    }
48b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
49b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    public void test3() {
50b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Container obj = (Container) load("example3.yaml");
51b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(new Container("title3"), obj);
52b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("title3", obj.getTitle());
53b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("parent", obj.getName());
54b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("123", obj.getId());
55b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    }
56b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
57b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    public void test4() {
58b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Object obj = load("example4.yaml");
59b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        // System.out.println(obj);
60b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Container container = (Container) obj;
61b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertNotNull(obj);
62b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(new Container("title4"), obj);
63b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("title4", container.getTitle());
64b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("child4", container.getName());
65b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("444", container.getId());
66b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    }
67b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
68b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    public void test5() {
69b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Object obj = load("example5.yaml");
70b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        // System.out.println(obj);
71b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Container container = (Container) obj;
72b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertNotNull(obj);
73b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(new Container("title4"), obj);
74b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("title4", container.getTitle());
75b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("child5", container.getName());
76b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("ID555", container.getId());
77b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    }
78b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
79b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    public void test6() {
80b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Object obj = load("example6.yaml");
81b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        // System.out.println(obj);
82b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Container container = (Container) obj;
83b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertNotNull(obj);
84b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(new Container("title4"), obj);
85b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("title4", container.getTitle());
86b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("child6", container.getName());
87b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("ID6", container.getId());
88b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    }
89b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
90b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    public void test7() {
91b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Object obj = load("example7.yaml");
92b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        // System.out.println(obj);
93b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Container container = (Container) obj;
94b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertNotNull(obj);
95b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(new Container("The title"), obj);
96b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("The title", container.getTitle());
97b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("child7", container.getName());
98b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("id7", container.getId());
99b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    }
100b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
101b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    @SuppressWarnings("unchecked")
102b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    // TODO it is unclear how the result should look like for CON
103b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    public void test9() {
104b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Map<String, Object> map = (Map<String, Object>) load("example9.yaml");
105b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(1, map.size());
106b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Map<Container, Map<String, String>> containers = (Map<Container, Map<String, String>>) map
107b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov                .get("something");
108b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        // System.out.println(obj);
109b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(2, containers.size());
110b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        for (Container c : containers.keySet()) {
111b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov            assertTrue(c.getId().matches("id\\d"));
112b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov            assertEquals(1, containers.get(c).size());
113b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        }
114b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    }
115b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
116b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    @SuppressWarnings("unchecked")
117b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    public void test10() {
118b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Map<String, Object> map = (Map<String, Object>) load("example10.yaml");
119b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(1, map.size());
120b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        List<Container> containers = (List<Container>) map.get("something");
121b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        // System.out.println(obj);
122b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(3, containers.size());
123b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        for (Container c : containers) {
124b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov            assertTrue(c.toString(), c.getId().matches("id\\d+"));
125b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov            assertTrue(c.toString(), c.getName().matches("child\\d+"));
126b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov            // System.out.println(c);
127b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        }
128b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    }
129b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
130b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    public void test11withoutPackageNames() {
131b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Constructor compact = new PackageCompactConstructor(
132b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov                "org.yaml.snakeyaml.extensions.compactnotation");
133b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Yaml yaml = new Yaml(compact);
134b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        String doc = Util.getLocalResource("compactnotation/example11.yaml");
135b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Box box = (Box) yaml.load(doc);
136b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertNotNull(box);
137b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("id11", box.getId());
138b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("Main box", box.getName());
139b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Item top = box.getTop();
140b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("id003", top.getId());
141b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("25.0", top.getPrice());
142b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("parrot", top.getName());
143b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Item bottom = box.getBottom();
144b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("id004", bottom.getId());
145b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("3.5", bottom.getPrice());
146b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("sweet", bottom.getName());
147b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    }
148b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
149b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    public void test12withList() {
150b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Constructor compact = new TableCompactConstructor(
151b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov                "org.yaml.snakeyaml.extensions.compactnotation");
152b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Yaml yaml = new Yaml(compact);
153b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        String doc = Util.getLocalResource("compactnotation/example12.yaml");
154b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Table table = (Table) yaml.load(doc);
155b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertNotNull(table);
156b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("id12", table.getId());
157b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("A table", table.getName());
158b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        List<Row> rows = table.getRows();
159b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(3, rows.size());
160b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Iterator<Row> iter = rows.iterator();
161b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Row first = iter.next();
162b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("id111", first.getId());
163b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("I think; therefore I am.", first.getDescription());
164b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(0.125, first.getRatio(), 0.000000001);
165b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(15, first.getSize());
166b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Row second = iter.next();
167b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("id222", second.getId());
168b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("We do not need new lines here, just replace them all with spaces\n",
169b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov                second.getDescription());
170b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(0.333, second.getRatio(), 0.000000001);
171b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(17, second.getSize());
172b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Row third = iter.next();
173b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("id333", third.getId());
174b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(
175b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov                "Please preserve all\nthe lines because they may be\nimportant, but do not include the last one !!!",
176b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov                third.getDescription());
177b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(0.88, third.getRatio(), 0.000000001);
178b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(52, third.getSize());
179b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    }
180b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov}
181