blob: 39886fe4fc2a9c80e1784f12ae4b6cd2d9444928 [file] [log] [blame]
/**
* Copyright (c) 2008-2014, http://www.snakeyaml.org
*
* 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.ByteArrayOutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.DumperOptions.ScalarStyle;
import org.yaml.snakeyaml.Yaml;
/**
* @see http://yaml.org/type/str.html
*/
public class StrTagTest extends AbstractTest {
private String getData(String data, String key) {
return (String) getMapValue(data, key);
}
public void testString() {
assertEquals("abcd", getData("string: abcd", "string"));
}
public void testStringShorthand() {
assertEquals("abcd", getData("string: !!str abcd", "string"));
}
public void testStringTag() {
assertEquals("abcd", getData("string: !<tag:yaml.org,2002:str> abcd", "string"));
}
public void testUnicode() {
// escaped 8-bit unicode character (u-umlaut):
assertEquals("\u00fc", load("\"\\xfc\""));
assertEquals("\\xfc", load("\\xfc"));
// 2 escaped 8-bit unicode characters (u-umlaut following by e-grave):
assertEquals("\u00fc\u00e8", load("\"\\xfc\\xe8\""));
// escaped 16-bit unicode character (em dash):
assertEquals("\u2014", load("\"\\u2014\""));
// UTF-32 encoding is explicitly not supported
assertEquals("\\U2014AAAA", load("'\\U2014AAAA'"));
// (and I don't have a surrogate pair handy at the moment)
// raw unicode characters in the stream (em dash)
assertEquals("\u2014", load("\u2014"));
}
/**
* @see http://code.google.com/p/jvyamlb/issues/detail?id=6
*/
@SuppressWarnings("unchecked")
public void testIssueId6() {
Map<String, String> map = (Map<String, String>) load("---\ntest: |-\n \"Test\r\r (* error here)\"");
assertEquals("\"Test\n\n(* error here)\"", map.get("test"));
}
public void testStrDump() {
assertEquals("abc\n", dump("abc"));
}
public void testUnicodeDump() {
assertEquals("\\u263a\n", dump("\\u263a"));
assertEquals("The leading zero must be preserved.", "\\u063a\n", dump("\\u063a"));
}
public void testStringIntOut() {
Map<String, String> map = new HashMap<String, String>();
map.put("number", "1");
String output = dump(map);
assertTrue(output, output.contains("number: '1'"));
}
public void testStringFloatOut() {
Map<String, String> map = new HashMap<String, String>();
map.put("number", "1.1");
String output = dump(map);
assertTrue(output, output.contains("number: '1.1'"));
}
public void testStringBoolOut() {
Map<String, String> map = new HashMap<String, String>();
map.put("number", "True");
String output = dump(map);
assertTrue(output, output.contains("number: 'True'"));
}
public void testEmitLongString() {
String str = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
String output = dump(str);
assertEquals(str + "\n", output);
}
public void testEmitLongStringWithCR() {
String str = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n";
String output = dump(str);
assertEquals("|+\n " + str, output);
}
public void testEmitDoubleQuoted() {
String str = "\"xx\"";
String output = dump(str);
assertEquals("'" + str + "'\n", output);
}
/**
* http://pyyaml.org/ticket/196
*/
public void testEmitQuoted() {
List<String> list = new ArrayList<String>(3);
list.add("This is an 'example'.");
list.add("This is an \"example\".");
list.add("123");
String output = dump(list);
assertEquals("[This is an 'example'., This is an \"example\"., '123']\n", output);
// single quoted
DumperOptions options = new DumperOptions();
options.setDefaultScalarStyle(ScalarStyle.SINGLE_QUOTED);
Yaml yaml = new Yaml(options);
String output2 = yaml.dump(list);
// System.out.println(output2);
assertEquals("- 'This is an ''example''.'\n- 'This is an \"example\".'\n- '123'\n", output2);
// double quoted
DumperOptions options2 = new DumperOptions();
options2.setDefaultScalarStyle(ScalarStyle.DOUBLE_QUOTED);
yaml = new Yaml(options2);
String output3 = yaml.dump(list);
// System.out.println(output2);
assertEquals("- \"This is an 'example'.\"\n- \"This is an \\\"example\\\".\"\n- \"123\"\n",
output3);
}
public void testEmitEndOfLine() {
String str = "xxxxxxx\n";
String output = dump(str);
assertEquals("|\n " + str, output);
}
public void testDumpUtf16() throws UnsupportedEncodingException {
String str = "xxx";
assertEquals(3, str.toString().length());
Yaml yaml = new Yaml();
Charset charset = Charset.forName("UTF-16");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
Writer writer = new OutputStreamWriter(stream, charset);
yaml.dump(str, writer);
assertEquals(str + "\n", stream.toString("UTF-16"));
assertEquals("Must include BOM: " + stream.toString(), (1 + 3 + 1) * 2, stream.toString()
.length());
}
}