1 /** 2 * Copyright (c) 2008, http://www.snakeyaml.org 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package org.yaml.snakeyaml; 17 18 import java.util.ArrayList; 19 import java.util.Calendar; 20 import java.util.Date; 21 import java.util.LinkedHashMap; 22 import java.util.List; 23 import java.util.Map; 24 import java.util.Set; 25 import java.util.TimeZone; 26 27 import junit.framework.TestCase; 28 29 import org.yaml.snakeyaml.constructor.AbstractConstruct; 30 import org.yaml.snakeyaml.constructor.Constructor; 31 import org.yaml.snakeyaml.nodes.Node; 32 import org.yaml.snakeyaml.nodes.ScalarNode; 33 import org.yaml.snakeyaml.nodes.Tag; 34 35 /** 36 * Test Chapter 2.4 from the YAML specification 37 * 38 * @see <a href="http://yaml.org/spec/1.1/"></a> 39 */ 40 public class Chapter2_4Test extends TestCase { 41 42 @SuppressWarnings("unchecked") testExample_2_19()43 public void testExample_2_19() { 44 YamlDocument document = new YamlDocument("example2_19.yaml"); 45 Map<String, Object> map = (Map<String, Object>) document.getNativeData(); 46 assertEquals(5, map.size()); 47 assertEquals("Expect 12345 to be an Integer.", Integer.class, map.get("canonical") 48 .getClass()); 49 assertEquals(new Integer(12345), map.get("canonical")); 50 assertEquals(new Integer(12345), map.get("decimal")); 51 assertEquals(new Integer(3 * 3600 + 25 * 60 + 45), map.get("sexagesimal")); 52 assertEquals(new Integer(014), map.get("octal")); 53 assertEquals(new Integer(0xC), map.get("hexadecimal")); 54 } 55 56 @SuppressWarnings("unchecked") testExample_2_20()57 public void testExample_2_20() { 58 YamlDocument document = new YamlDocument("example2_20.yaml"); 59 Map<String, Object> map = (Map<String, Object>) document.getNativeData(); 60 assertEquals(6, map.size()); 61 assertEquals("Expect '1.23015e+3' to be a Double.", Double.class, map.get("canonical") 62 .getClass()); 63 assertEquals(new Double(1230.15), map.get("canonical")); 64 assertEquals(new Double(12.3015e+02), map.get("exponential")); 65 assertEquals(new Double(20 * 60 + 30.15), map.get("sexagesimal")); 66 assertEquals(new Double(1230.15), map.get("fixed")); 67 assertEquals(Double.NEGATIVE_INFINITY, map.get("negative infinity")); 68 assertEquals(Double.NaN, map.get("not a number")); 69 } 70 71 @SuppressWarnings("unchecked") testExample_2_21()72 public void testExample_2_21() { 73 YamlDocument document = new YamlDocument("example2_21.yaml"); 74 Map<String, Object> map = (Map<String, Object>) document.getNativeData(); 75 assertEquals(4, map.size()); 76 assertNull("'~' must be parsed as 'null': " + map.get(null), map.get(null)); 77 assertTrue((Boolean) map.get(Boolean.TRUE)); 78 assertFalse((Boolean) map.get(Boolean.FALSE)); 79 assertEquals("12345", map.get("string")); 80 } 81 82 @SuppressWarnings("unchecked") testExample_2_22()83 public void testExample_2_22() { 84 YamlDocument document = new YamlDocument("example2_22.yaml"); 85 Map<String, Object> map = (Map<String, Object>) document.getNativeData(); 86 assertEquals(4, map.size()); 87 assertEquals("Expect '2001-12-15T02:59:43.1Z' to be a Date.", Date.class, 88 map.get("canonical").getClass()); 89 Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); 90 cal.clear(); 91 cal.set(Calendar.YEAR, 2001); 92 cal.set(Calendar.MONTH, 11); // Java's months are zero-based... 93 cal.set(Calendar.DAY_OF_MONTH, 15); 94 cal.set(Calendar.HOUR_OF_DAY, 2); 95 cal.set(Calendar.MINUTE, 59); 96 cal.set(Calendar.SECOND, 43); 97 cal.set(Calendar.MILLISECOND, 100); 98 Date date = cal.getTime(); 99 assertEquals(date, map.get("canonical")); 100 assertEquals("Expect '2001-12-14t21:59:43.10-05:00' to be a Date.", Date.class, 101 map.get("iso8601").getClass()); 102 assertEquals("Expect '2001-12-14 21:59:43.10 -5' to be a Date.", Date.class, 103 map.get("spaced").getClass()); 104 assertEquals("Expect '2002-12-14' to be a Date.", Date.class, map.get("date").getClass()); 105 } 106 107 @SuppressWarnings("unchecked") testExample_2_23_non_date()108 public void testExample_2_23_non_date() { 109 try { 110 YamlDocument document = new YamlDocument("example2_23_non_date.yaml"); 111 Map<String, Object> map = (Map<String, Object>) document.getNativeData(); 112 assertEquals(1, map.size()); 113 assertEquals("2002-04-28", map.get("not-date")); 114 } catch (RuntimeException e) { 115 fail("Cannot parse '!!str': 'not-date: !!str 2002-04-28'"); 116 } 117 } 118 119 @SuppressWarnings("unchecked") testExample_2_23_picture()120 public void testExample_2_23_picture() { 121 YamlDocument document = new YamlDocument("example2_23_picture.yaml", false); 122 Map<String, Object> map = (Map<String, Object>) document.getNativeData(); 123 assertEquals(1, map.size()); 124 byte[] picture = (byte[]) map.get("picture"); 125 assertEquals((byte) 'G', picture[0]); 126 assertEquals((byte) 'I', picture[1]); 127 assertEquals((byte) 'F', picture[2]); 128 } 129 130 class SomethingConstructor extends Constructor { SomethingConstructor()131 public SomethingConstructor() { 132 this.yamlConstructors.put(new Tag("!something"), new ConstructSomething()); 133 } 134 135 private class ConstructSomething extends AbstractConstruct { construct(Node node)136 public Object construct(Node node) { 137 // convert to upper case 138 String val = (String) constructScalar((ScalarNode) node); 139 return val.toUpperCase().replace('\n', ' ').trim(); 140 } 141 } 142 } 143 144 @SuppressWarnings("unchecked") testExample_2_23()145 public void testExample_2_23() { 146 YamlDocument document = new YamlDocument("example2_23.yaml", false, 147 new SomethingConstructor()); 148 Map<String, Object> map = (Map<String, Object>) document.getNativeData(); 149 assertEquals(3, map.size()); 150 String special = (String) map.get("application specific tag"); 151 assertEquals("THE SEMANTICS OF THE TAG ABOVE MAY BE DIFFERENT FOR DIFFERENT DOCUMENTS.", 152 special); 153 } 154 155 @SuppressWarnings("unchecked") testExample_2_25()156 public void testExample_2_25() { 157 YamlDocument document = new YamlDocument("example2_25.yaml"); 158 Set<String> set = (Set<String>) document.getNativeData(); 159 assertEquals(3, set.size()); 160 assertTrue(set.contains("Mark McGwire")); 161 assertTrue(set.contains("Sammy Sosa")); 162 assertTrue(set.contains("Ken Griff")); 163 } 164 165 @SuppressWarnings("unchecked") testExample_2_26()166 public void testExample_2_26() { 167 YamlDocument document = new YamlDocument("example2_26.yaml"); 168 Map<String, String> map = (Map<String, String>) document.getNativeData(); 169 assertEquals(3, map.size()); 170 assertTrue(map instanceof LinkedHashMap); 171 assertEquals(new Integer(65), map.get("Mark McGwire")); 172 assertEquals(new Integer(63), map.get("Sammy Sosa")); 173 assertEquals(new Integer(58), map.get("Ken Griffy")); 174 List<String> list = new ArrayList<String>(); 175 for (String key : map.keySet()) { 176 list.add(key); 177 } 178 assertEquals("Mark McGwire", list.get(0)); 179 assertEquals("Sammy Sosa", list.get(1)); 180 assertEquals("Ken Griffy", list.get(2)); 181 } 182 } 183