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 examples.collections;
17b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
18b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport java.util.ArrayList;
19b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport java.util.List;
20b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport java.util.Map;
21b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport java.util.Properties;
22b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport java.util.SortedMap;
23b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport java.util.TreeMap;
24b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
25b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport junit.framework.TestCase;
26b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
27b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.Util;
28b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovimport org.yaml.snakeyaml.Yaml;
29b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
30b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov/**
31b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov * Test different Map implementations as JavaBean properties
32b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov */
33b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somovpublic class TypeSafeMapImplementationsTest extends TestCase {
34b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    public void testDumpMap() {
35b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        MapBean bean = new MapBean();
36b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        SortedMap<String, String> sortedMap = new TreeMap<String, String>();
37b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        sortedMap.put("2", "two");
38b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        sortedMap.put("1", "one");
39b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        bean.setSorted(sortedMap);
40b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Properties props = new Properties();
41b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        props.setProperty("key1", "value1");
42b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        props.setProperty("key2", "value2");
43b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        bean.setProperties(props);
44b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Yaml yaml = new Yaml();
45b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        String output = yaml.dumpAsMap(bean);
46b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        // System.out.println(output);
47b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        String etalon = Util.getLocalResource("examples/map-bean-1.yaml");
48b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(etalon, output);
49b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    }
50b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
51b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    public void testLoadMap() {
52b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        String output = Util.getLocalResource("examples/map-bean-1.yaml");
53b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        // System.out.println(output);
54b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Yaml beanLoader = new Yaml();
55b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        MapBean parsed = beanLoader.loadAs(output, MapBean.class);
56b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertNotNull(parsed);
57b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        SortedMap<String, String> sortedMap = parsed.getSorted();
58b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(2, sortedMap.size());
59b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("one", sortedMap.get("1"));
60b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("two", sortedMap.get("2"));
61b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        String first = sortedMap.keySet().iterator().next();
62b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("1", first);
63b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        //
64b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Properties props = parsed.getProperties();
65b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(2, props.size());
66b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("value1", props.getProperty("key1"));
67b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("value2", props.getProperty("key2"));
68b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    }
69b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
70b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    public static class MapBean {
71b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        private SortedMap<String, String> sorted;
72b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        private Properties properties;
73b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        private String name;
74b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
75b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        public MapBean() {
76b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov            name = "Bean123";
77b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        }
78b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
79b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        public SortedMap<String, String> getSorted() {
80b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov            return sorted;
81b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        }
82b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
83b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        public void setSorted(SortedMap<String, String> sorted) {
84b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov            this.sorted = sorted;
85b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        }
86b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
87b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        public Properties getProperties() {
88b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov            return properties;
89b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        }
90b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
91b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        public void setProperties(Properties properties) {
92b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov            this.properties = properties;
93b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        }
94b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
95b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        public String getName() {
96b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov            return name;
97b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        }
98b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
99b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        public void setName(String name) {
100b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov            this.name = name;
101b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        }
102b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    }
103b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
104b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    @SuppressWarnings("unchecked")
105b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    public void testNoJavaBeanMap() {
106b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        List<Object> list = new ArrayList<Object>(3);
107b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        SortedMap<String, String> sortedMap = new TreeMap<String, String>();
108b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        sortedMap.put("2", "two");
109b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        sortedMap.put("1", "one");
110b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        list.add(sortedMap);
111b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Properties props = new Properties();
112b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        props.setProperty("key1", "value1");
113b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        props.setProperty("key2", "value2");
114b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        list.add(props);
115b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        list.add("aaa");
116b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Yaml yaml = new Yaml();
117b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        String output = yaml.dump(list);
118b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        // System.out.println(output);
119b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        String etalon = Util.getLocalResource("examples/map-bean-2.yaml");
120b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(etalon, output);
121b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        // load
122b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        List<Object> list2 = (List<Object>) yaml.load(output);
123b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(3, list2.size());
124b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Map<Object, Object> map1 = (Map<Object, Object>) list.get(0);// it was
125b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov                                                                     // SortedMap
126b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(2, map1.size());
127b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("one", map1.get("1"));
128b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("two", map1.get("2"));
129b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Map<Object, Object> map2 = (Map<Object, Object>) list.get(1);// it was
130b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov                                                                     // Properties
131b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(2, map2.size());
132b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("value1", map2.get("key1"));
133b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("value2", map2.get("key2"));
134b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("aaa", list.get(2));
135b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    }
136b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
137b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    public void testRecursiveNoJavaBeanMap1() {
138b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        SortedMap<String, Object> sortedMap = new TreeMap<String, Object>();
139b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        sortedMap.put("2", "two");
140b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        sortedMap.put("1", "one");
141b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        sortedMap.put("3", sortedMap);
142b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Yaml yaml = new Yaml();
143b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        String output = yaml.dump(sortedMap);
144b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        // System.out.println(output);
145b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        String etalon = Util.getLocalResource("examples/map-recursive-1.yaml");
146b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(etalon, output);
147b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        // load with different order
148b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        @SuppressWarnings("unchecked")
149b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Map<Object, Object> map1 = (Map<Object, Object>) yaml.load(Util
150b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov                .getLocalResource("examples/map-recursive-1_1.yaml"));
151b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(3, map1.size());
152b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("one", map1.get("1"));
153b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("two", map1.get("2"));
154b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        // test that the order is taken from YAML instead of sorting
155b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        String first = (String) map1.keySet().iterator().next();
156b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("2", first);
157b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    }
158b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
159b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    @SuppressWarnings("unchecked")
160b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    public void testRecursiveNoJavaBeanProperties2() {
161b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Properties props = new Properties();
162b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        props.setProperty("key1", "value1");
163b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        props.setProperty("key2", "value2");
164b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Map<Object, Object> map = props;
165b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        map.put("key3", props);
166b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Yaml yaml = new Yaml();
167b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        String output = yaml.dump(props);
168b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        // System.out.println(output);
169b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        String etalon = Util.getLocalResource("examples/map-recursive-2.yaml");
170b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(etalon, output);
171b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        // load
172b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Map<Object, Object> map2 = (Map<Object, Object>) yaml.load(output);
173b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(3, map2.size());
174b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("value1", map2.get("key1"));
175b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("value2", map2.get("key2"));
176b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    }
177b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
178b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    public void testRecursiveNoJavaBeanMap3() {
179b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Yaml yaml = new Yaml();
180b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        String output = Util.getLocalResource("examples/map-recursive-3.yaml");
181b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        // System.out.println(output);
182b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        @SuppressWarnings("unchecked")
183b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        SortedMap<Object, Object> map1 = (SortedMap<Object, Object>) yaml.load(output);
184b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals(3, map1.size());
185b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("one", map1.get("1"));
186b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("two", map1.get("2"));
187b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        // test that the order is NOT taken from YAML but sorted
188b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        String first = (String) map1.keySet().iterator().next();
189b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        assertEquals("1", first);
190b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    }
191b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov
192b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    public void testRecursiveNoJavaBeanProperties4() {
193b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        Yaml yaml = new Yaml();
194b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        String output = Util.getLocalResource("examples/map-recursive-4.yaml");
195b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        // System.out.println(output);
196b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        try {
197b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov            yaml.load(output);
198b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov            fail("Recursive Properties are not supported.");
199b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        } catch (Exception e) {
200b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov            assertTrue(e.getMessage(), e.getMessage().contains("Properties must not be recursive."));
201b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov        }
202b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov    }
203b5f4ec3dfb1a49968ebcc1243da10af9a2dc54a2Andrey Somov}
204