/** | |
* Copyright (c) 2008-2010, http://code.google.com/p/snakeyaml/ | |
* | |
* Licensed under the Apache License, Version 2.0 (the "License"); | |
* you may not use this file except in compliance with the License. | |
* You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
*/ | |
package org.yaml.snakeyaml.types; | |
import java.io.IOException; | |
import java.util.HashMap; | |
import java.util.List; | |
import java.util.Map; | |
import org.yaml.snakeyaml.Dumper; | |
import org.yaml.snakeyaml.DumperOptions; | |
import org.yaml.snakeyaml.Yaml; | |
import org.yaml.snakeyaml.DumperOptions.FlowStyle; | |
import org.yaml.snakeyaml.nodes.Node; | |
import org.yaml.snakeyaml.nodes.Tag; | |
import org.yaml.snakeyaml.representer.Represent; | |
import org.yaml.snakeyaml.representer.Representer; | |
/** | |
* @see http://yaml.org/type/null.html | |
*/ | |
public class NullTagTest extends AbstractTest { | |
public void testNull() throws IOException { | |
assertNull("Got: '" + load("---\n") + "'", load("---\n")); | |
assertNull(load("---\n...")); | |
assertNull(load("---\n...\n")); | |
assertNull(load("\n")); | |
assertNull(load("")); | |
assertNull(load(" ")); | |
assertNull(load("~")); | |
assertNull(load("---\n~")); | |
assertNull(load("null")); | |
assertNull(load("Null")); | |
assertNull(load("NULL")); | |
assertNull(getMapValue("empty:\n", "empty")); | |
assertNull(getMapValue("canonical: ~", "canonical")); | |
assertNull(getMapValue("english: null", "english")); | |
assertNull(getMapValue("english: Null", "english")); | |
assertNull(getMapValue("english: NULL", "english")); | |
assertEquals("null key", getMapValue("~: null key\n", null)); | |
} | |
@SuppressWarnings("unchecked") | |
public void testSequenceNull() throws IOException { | |
String input = "---\n# This sequence has five\n# entries, two have values.\nsparse:\n - ~\n - 2nd entry\n -\n - 4th entry\n - Null\n"; | |
List<String> parsed = (List<String>) getMapValue(input, "sparse"); | |
assertEquals(5, parsed.size()); | |
assertNull(parsed.get(0)); | |
assertEquals("2nd entry", parsed.get(1)); | |
assertNull("Got: '" + parsed.get(2) + "'", parsed.get(2)); | |
assertEquals("4th entry", parsed.get(3)); | |
assertNull(parsed.get(4)); | |
} | |
public void testNullInMap() throws IOException { | |
String input = "key1: null\n~: value1"; | |
Map<String, Object> parsed = getMap(input); | |
assertEquals(2, parsed.size()); | |
assertTrue(parsed.containsKey(null)); | |
Object value1 = parsed.get(null); | |
assertEquals("value1", value1); | |
// | |
assertNull(parsed.get("key1")); | |
// | |
assertFalse(getMap("key2: value2").containsKey(null)); | |
} | |
public void testNullShorthand() throws IOException { | |
assertNull(getMapValue("nothing: !!null null", "nothing")); | |
} | |
public void testNullTag() throws IOException { | |
assertNull(getMapValue("nothing: !<tag:yaml.org,2002:null> null", "nothing")); | |
} | |
public void testNullOut() throws IOException { | |
String output = dump(null); | |
assertEquals("null\n", output); | |
} | |
public void testNullOutAsEmpty() throws IOException { | |
Yaml yaml = new Yaml(new Dumper(new NullRepresenter(), new DumperOptions())); | |
String output = yaml.dump(null); | |
assertEquals("", output); | |
} | |
/** | |
* test flow style | |
*/ | |
public void testNullOutAsEmpty2() throws IOException { | |
Yaml yaml = new Yaml(new Dumper(new NullRepresenter())); | |
Map<String, String> map = new HashMap<String, String>(); | |
map.put("aaa", "foo"); | |
map.put("bbb", null); | |
String output = yaml.dump(map); | |
assertEquals("{aaa: foo, bbb: !!null ''}\n", output); | |
} | |
/** | |
* test block style | |
*/ | |
public void testBoolOutAsEmpty3() throws IOException { | |
DumperOptions options = new DumperOptions(); | |
options.setDefaultFlowStyle(FlowStyle.BLOCK); | |
Yaml yaml = new Yaml(new Dumper(new NullRepresenter(), options)); | |
Map<String, String> map = new HashMap<String, String>(); | |
map.put("aaa", "foo"); | |
map.put("bbb", null); | |
String output = yaml.dump(map); | |
assertEquals("aaa: foo\nbbb:\n", output); | |
} | |
private class NullRepresenter extends Representer { | |
public NullRepresenter() { | |
super(); | |
// null representer is exceptional and it is stored as an instance | |
// variable. | |
this.nullRepresenter = new RepresentNull(); | |
} | |
private class RepresentNull implements Represent { | |
public Node representData(Object data) { | |
// possible values are here http://yaml.org/type/null.html | |
return representScalar(Tag.NULL, ""); | |
} | |
} | |
} | |
} |