View Javadoc

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