Home | History | Annotate | Download | only in types
      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.types;
     17 
     18 import java.util.ArrayList;
     19 import java.util.HashMap;
     20 import java.util.List;
     21 import java.util.Map;
     22 
     23 import org.yaml.snakeyaml.DumperOptions;
     24 import org.yaml.snakeyaml.DumperOptions.FlowStyle;
     25 import org.yaml.snakeyaml.Yaml;
     26 import org.yaml.snakeyaml.nodes.Node;
     27 import org.yaml.snakeyaml.nodes.Tag;
     28 import org.yaml.snakeyaml.representer.Represent;
     29 import org.yaml.snakeyaml.representer.Representer;
     30 
     31 /**
     32  * @see <a href="http://yaml.org/type/null.html"></a>
     33  */
     34 public class NullTagTest extends AbstractTest {
     35 
     36     public void testNull() {
     37         assertNull("Got: '" + load("---\n") + "'", load("---\n"));
     38         assertNull(load("---\n..."));
     39         assertNull(load("---\n...\n"));
     40         assertNull(load("\n"));
     41         assertNull(load(""));
     42         assertNull(load(" "));
     43         assertNull(load("~"));
     44         assertNull(load("---\n~"));
     45         assertNull(load("null"));
     46         assertNull(load("Null"));
     47         assertNull(load("NULL"));
     48         assertNull(getMapValue("empty:\n", "empty"));
     49         assertNull(getMapValue("canonical: ~", "canonical"));
     50         assertNull(getMapValue("english: null", "english"));
     51         assertNull(getMapValue("english: Null", "english"));
     52         assertNull(getMapValue("english: NULL", "english"));
     53         assertEquals("null key", getMapValue("~: null key\n", null));
     54     }
     55 
     56     @SuppressWarnings("unchecked")
     57     public void testSequenceNull() {
     58         String input = "---\n# This sequence has five\n# entries, two have values.\nsparse:\n  - ~\n  - 2nd entry\n  -\n  - 4th entry\n  - Null\n";
     59         List<String> parsed = (List<String>) getMapValue(input, "sparse");
     60         assertEquals(5, parsed.size());
     61         assertNull(parsed.get(0));
     62         assertEquals("2nd entry", parsed.get(1));
     63         assertNull("Got: '" + parsed.get(2) + "'", parsed.get(2));
     64         assertEquals("4th entry", parsed.get(3));
     65         assertNull(parsed.get(4));
     66     }
     67 
     68     public void testNullInMap() {
     69         String input = "key1: null\n~: value1";
     70         Map<String, Object> parsed = getMap(input);
     71         assertEquals(2, parsed.size());
     72         assertTrue(parsed.containsKey(null));
     73         Object value1 = parsed.get(null);
     74         assertEquals("value1", value1);
     75         //
     76         assertNull(parsed.get("key1"));
     77         //
     78         assertFalse(getMap("key2: value2").containsKey(null));
     79     }
     80 
     81     public void testNullShorthand() {
     82         assertNull(getMapValue("nothing: !!null null", "nothing"));
     83     }
     84 
     85     public void testNullTag() {
     86         assertNull(getMapValue("nothing: !<tag:yaml.org,2002:null> null", "nothing"));
     87     }
     88 
     89     public void testNullOut() {
     90         String output = dump(null);
     91         assertEquals("null\n", output);
     92     }
     93 
     94     public void testNullOutAsEmpty() {
     95         Yaml yaml = new Yaml(new NullRepresenter());
     96         String output = yaml.dump(null);
     97         assertEquals("", output);
     98     }
     99 
    100     /**
    101      * test flow style
    102      */
    103     public void testNullOutAsEmpty2() {
    104         Yaml yaml = new Yaml(new NullRepresenter());
    105         Map<String, String> map = new HashMap<String, String>();
    106         map.put("aaa", "foo");
    107         map.put("bbb", null);
    108         String output = yaml.dump(map);
    109         assertEquals("{aaa: foo, bbb: !!null ''}\n", output);
    110     }
    111 
    112     /**
    113      * test block style
    114      */
    115     public void testBoolOutAsEmpty3() {
    116         DumperOptions options = new DumperOptions();
    117         options.setDefaultFlowStyle(FlowStyle.BLOCK);
    118         Yaml yaml = new Yaml(new NullRepresenter(), options);
    119         Map<String, String> map = new HashMap<String, String>();
    120         map.put("aaa", "foo");
    121         map.put("bbb", null);
    122         String output = yaml.dump(map);
    123         assertEquals("aaa: foo\nbbb:\n", output);
    124     }
    125 
    126     private class NullRepresenter extends Representer {
    127         public NullRepresenter() {
    128             super();
    129             // null representer is exceptional and it is stored as an instance
    130             // variable.
    131             this.nullRepresenter = new RepresentNull();
    132         }
    133 
    134         private class RepresentNull implements Represent {
    135             public Node representData(Object data) {
    136                 // possible values are here http://yaml.org/type/null.html
    137                 return representScalar(Tag.NULL, "");
    138             }
    139         }
    140     }
    141 
    142     public void testNoAnchors() {
    143         List<String> list = new ArrayList<String>(3);
    144         list.add(null);
    145         list.add("value");
    146         list.add(null);
    147         Yaml yaml = new Yaml();
    148         String output = yaml.dump(list);
    149         assertEquals("Null values must not get anchors and aliases.", "[null, value, null]\n",
    150                 output);
    151     }
    152 }
    153