blob: ab6938622d0ce353cb95fb98578b59b857347644 [file] [log] [blame]
/**
* Copyright (c) 2008-2012, 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.extensions.compactnotation;
import java.util.List;
import java.util.Map;
import junit.framework.TestCase;
import org.yaml.snakeyaml.Util;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.BaseConstructor;
public class CompactConstructorErrorsTest extends TestCase {
public void test1() {
BaseConstructor compact = new CompactConstructor();
Yaml yaml = new Yaml(compact);
String doc = Util.getLocalResource("compactnotation/error1.yaml");
try {
yaml.load(doc);
fail("Package is not specified.");
} catch (Exception e) {
assertEquals("java.lang.ClassNotFoundException: Table", e.getMessage());
}
}
private Object load(String fileName) {
CompactConstructor compact = new PackageCompactConstructor(
"org.yaml.snakeyaml.extensions.compactnotation");
Yaml yaml = new Yaml(compact);
String doc = Util.getLocalResource("compactnotation/" + fileName);
Object obj = yaml.load(doc);
assertNotNull(obj);
return obj;
}
private void failLoad(String fileName, String failure) {
load(fileName);
fail(failure);
}
private void check(String fileName, String failure, String message) {
try {
failLoad(fileName, failure);
} catch (Exception e) {
assertEquals(message, e.getMessage());
}
}
public void test2() {
check("error2.yaml",
"No single argument constructor provided.",
"java.lang.NoSuchMethodException: org.yaml.snakeyaml.extensions.compactnotation.Table.<init>(java.lang.String)");
}
public void test3() {
check("error3.yaml",
"In-line parameters can only be Strings.",
"org.yaml.snakeyaml.error.YAMLException: Cannot set property='size' with value='17' (class java.lang.String) in Row id=id111");
}
/**
* Created Map instead of Row
*/
@SuppressWarnings("unchecked")
public void test4() {
Table table = (Table) load("error4.yaml");
List<Row> rows = table.getRows();
assertEquals(1, rows.size());
assertFalse("Row should not be created.", rows.get(0) instanceof Row);
Map<String, String> map = (Map<String, String>) rows.get(0);
assertEquals(1, map.size());
assertEquals("15}", map.get("Row(id111, description = text) {size"));
}
/**
* Wrong indent
*/
@SuppressWarnings("unchecked")
public void test5() {
Table table = (Table) load("error5.yaml");
List<Row> rows = table.getRows();
assertEquals(1, rows.size());
assertFalse("Row should not be created.", rows.get(0) instanceof Row);
Map<String, String> map = (Map<String, String>) rows.get(0);
assertEquals(4, map.size());
// System.out.println(map);
assertNull(map.get(new Row("id222")));
assertTrue(map.containsKey(new Row("id222")));
assertEquals(17, map.get("size"));
}
public void test6() {
check("error6.yaml",
"Invalid property.",
"org.yaml.snakeyaml.error.YAMLException: Unable to find property 'foo' on class: org.yaml.snakeyaml.extensions.compactnotation.Table");
}
public void test7() {
check("error7.yaml",
"Invalid property.",
"org.yaml.snakeyaml.error.YAMLException: Unable to find property 'foo' on class: org.yaml.snakeyaml.extensions.compactnotation.Table");
}
public void test8() {
check("error8.yaml",
"No list property",
"org.yaml.snakeyaml.error.YAMLException: No list property found in class org.yaml.snakeyaml.extensions.compactnotation.Row");
}
public void test9() {
check("error9.yaml",
"Many list properties found",
"org.yaml.snakeyaml.error.YAMLException: Many list properties found in class org.yaml.snakeyaml.extensions.compactnotation.ManyListsTable; Please override getSequencePropertyName() to specify which property to use.");
}
}