/** * Copyright (c) 2008-2011, 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.issues.issue67; import junit.framework.TestCase; import org.yaml.snakeyaml.LoaderOptions; import org.yaml.snakeyaml.Util; import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.nodes.Tag; import org.yaml.snakeyaml.representer.Representer; import org.yaml.snakeyaml.scanner.ScannerException; public class NonAsciiCharsInClassNameTest extends TestCase { private String PREFIX = "!!org.yaml.snakeyaml.issues.issue67.NonAsciiCharsInClassNameTest$"; public void testDump() { Académico obj = new Académico(); obj.setId(1); obj.setName("Foo bar baz"); Yaml yaml = new Yaml(); String result = yaml.dump(obj); assertEquals(PREFIX + "Acad%C3%A9mico {\n id: 1, name: Foo bar baz}\n", result); } public void testLoad() { Yaml yaml = new Yaml(); Académico obj = (Académico) yaml.load(PREFIX + "Acad%C3%A9mico {id: 3, name: Foo bar}"); assertEquals(3, obj.getId()); assertEquals("Foo bar", obj.getName()); } public void testLoadInvalidPattern() { try { Yaml yaml = new Yaml(); yaml.load(PREFIX + "Acad%WZ%A9mico {id: 3, name: Foo bar}"); fail("Illegal hex characters in escape (%) pattern must not be accepted."); } catch (Exception e) { assertEquals( "while scanning a tag; expected URI escape sequence of 2 hexadecimal numbers, but found W(87) and Z(90)", e.getMessage()); } } public void testLoadInvalidPatternTooShort() { try { LoaderOptions options = new LoaderOptions(); Yaml yaml = new Yaml(options); yaml.load(PREFIX + "Acad%9%A9mico {id: 3, name: Foo bar}"); fail("Illegal hex characters in escape (%) pattern must not be accepted."); } catch (ScannerException e) { assertEquals( "while scanning a tag; expected URI escape sequence of 2 hexadecimal numbers, but found 9(57) and %(37)", e.getMessage()); assertEquals(Util.getLocalResource("issues/issue67-error1.txt"), e.toString()); } } public void testLoadInvalidUtf8() { try { LoaderOptions options = new LoaderOptions(); Yaml yaml = new Yaml(options); yaml.load(PREFIX + "Acad%C0mico {id: 3, name: Foo bar}"); fail("Illegal UTF-8 must not be accepted."); } catch (ScannerException e) { assertEquals("while scanning a tag; expected URI in UTF-8: Input length = 1", e.getMessage()); assertEquals(Util.getLocalResource("issues/issue67-error2.txt"), e.toString()); } } public static class Académico { public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } private int id; private String name; } public void testDumpCustomTag() { Académico obj = new Académico(); obj.setId(123); obj.setName("Foo bar 123"); Representer repr = new Representer(); repr.addClassTag(Académico.class, new Tag("!foo")); Yaml yaml = new Yaml(repr); String result = yaml.dump(obj); assertEquals("!foo {id: 123, name: Foo bar 123}\n", result); } public void testDumpEscapedTag() { Académico obj = new Académico(); obj.setId(123); obj.setName("Foo bar 123"); Representer repr = new Representer(); repr.addClassTag(Académico.class, new Tag("!Académico")); Yaml yaml = new Yaml(repr); String result = yaml.dump(obj); assertEquals("!Acad%C3%A9mico {id: 123, name: Foo bar 123}\n", result); } public void testTag() { Tag tag = new Tag("!java/javabean:foo.Bar"); assertEquals("!java/javabean:foo.Bar", tag.getValue()); } }