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