blob: c4b26b5fe37b05e8fd67190f4972e04c345cc087 [file] [log] [blame]
/**
* 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;
import java.sql.Timestamp;
import java.util.Date;
import junit.framework.TestCase;
import org.yaml.snakeyaml.nodes.Node;
import org.yaml.snakeyaml.nodes.Tag;
import org.yaml.snakeyaml.representer.Represent;
import org.yaml.snakeyaml.representer.Representer;
public class JavaBeanWithNullValuesTest extends TestCase {
private JavaBeanLoader<JavaBeanWithNullValues> loader;
@Override
protected void setUp() throws Exception {
loader = new JavaBeanLoader<JavaBeanWithNullValues>(JavaBeanWithNullValues.class);
}
public void testNotNull() throws Exception {
String dumpStr = dumpJavaBeanWithNullValues(false);
// System.out.println(dumpStr);
SnakeYaml yaml = new SnakeYaml();
JavaBeanWithNullValues parsed = (JavaBeanWithNullValues) yaml.load(dumpStr);
assertNotNull(parsed.getString());
assertNotNull(parsed.getBoolean1());
assertNotNull(parsed.getDate());
assertNotNull(parsed.getDouble1());
assertNotNull(parsed.getFloat1());
assertNotNull(parsed.getInteger());
assertNotNull(parsed.getLong1());
assertNotNull(parsed.getSqlDate());
assertNotNull(parsed.getTimestamp());
//
parsed = loader.load(dumpStr);
assertNotNull(parsed.getString());
assertNotNull(parsed.getBoolean1());
assertNotNull(parsed.getDate());
assertNotNull(parsed.getDouble1());
assertNotNull(parsed.getFloat1());
assertNotNull(parsed.getInteger());
assertNotNull(parsed.getLong1());
assertNotNull(parsed.getSqlDate());
assertNotNull(parsed.getTimestamp());
}
public void testNull() throws Exception {
String dumpStr = dumpJavaBeanWithNullValues(true);
SnakeYaml yaml = new SnakeYaml();
JavaBeanWithNullValues parsed = (JavaBeanWithNullValues) yaml.load(dumpStr);
assertNull(parsed.getString());
//
parsed = loader.load(dumpStr);
assertNull(parsed.getString());
}
public void testNullStringAndBoolean() throws Exception {
JavaBeanWithNullValues javaBeanWithNullValues = new JavaBeanWithNullValues();
DumperOptions options = new DumperOptions();
options.setDefaultScalarStyle(DumperOptions.ScalarStyle.DOUBLE_QUOTED);
options.setExplicitStart(true);
options.setExplicitEnd(true);
SnakeYaml yaml = new SnakeYaml(new Dumper(new CustomRepresenter(), options));
javaBeanWithNullValues.setBoolean1(null);
javaBeanWithNullValues.setDate(new Date(System.currentTimeMillis()));
javaBeanWithNullValues.setDouble1(1d);
javaBeanWithNullValues.setFloat1(1f);
javaBeanWithNullValues.setInteger(1);
javaBeanWithNullValues.setLong1(1l);
javaBeanWithNullValues.setSqlDate(new java.sql.Date(System.currentTimeMillis()));
javaBeanWithNullValues.setString(null); // ok
javaBeanWithNullValues.setTimestamp(new Timestamp(System.currentTimeMillis()));
String dumpStr = yaml.dump(javaBeanWithNullValues);
// System.out.println(dumpStr);
yaml = new SnakeYaml();
JavaBeanWithNullValues parsed = (JavaBeanWithNullValues) yaml.load(dumpStr);
assertNull(" expect null, got " + parsed.getBoolean1(), parsed.getBoolean1());
assertNull(" expect null, got " + parsed.getString(), parsed.getString());
}
public void testNoRootTag() throws Exception {
JavaBeanWithNullValues javaBeanWithNullValues = new JavaBeanWithNullValues();
DumperOptions options = new DumperOptions();
options.setDefaultScalarStyle(DumperOptions.ScalarStyle.DOUBLE_QUOTED);
options.setExplicitStart(true);
options.setExplicitEnd(true);
options.setExplicitRoot(Tag.MAP);
SnakeYaml yaml = new SnakeYaml(new Dumper(new CustomRepresenter(), options));
javaBeanWithNullValues.setBoolean1(null);
javaBeanWithNullValues.setDate(new Date(System.currentTimeMillis()));
javaBeanWithNullValues.setDouble1(1d);
javaBeanWithNullValues.setFloat1(1f);
javaBeanWithNullValues.setInteger(1);
javaBeanWithNullValues.setLong1(1l);
javaBeanWithNullValues.setSqlDate(new java.sql.Date(System.currentTimeMillis()));
javaBeanWithNullValues.setString(null); // ok
javaBeanWithNullValues.setTimestamp(new Timestamp(System.currentTimeMillis()));
String dumpStr = yaml.dump(javaBeanWithNullValues);
// System.out.println(dumpStr);
assertFalse("No explicit root tag must be used.", dumpStr
.contains("JavaBeanWithNullValues"));
yaml = new SnakeYaml(new Dumper(new CustomRepresenter(), options));
JavaBeanWithNullValues parsed = loader.load(dumpStr);
assertNull(" expect null, got " + parsed.getBoolean1(), parsed.getBoolean1());
assertNull(" expect null, got " + parsed.getString(), parsed.getString());
assertEquals(1d, parsed.getDouble1());
assertEquals(1f, parsed.getFloat1());
assertEquals(new Integer(1), parsed.getInteger());
assertEquals(new Long(1l), parsed.getLong1());
}
private String dumpJavaBeanWithNullValues(boolean nullValues) {
JavaBeanWithNullValues javaBeanWithNullValues = new JavaBeanWithNullValues();
DumperOptions options = new DumperOptions();
options.setDefaultScalarStyle(DumperOptions.ScalarStyle.DOUBLE_QUOTED);
options.setExplicitStart(true);
options.setExplicitEnd(true);
SnakeYaml yaml = new SnakeYaml(new Dumper(new CustomRepresenter(), options));
if (nullValues) {
return yaml.dump(javaBeanWithNullValues);
}
javaBeanWithNullValues.setBoolean1(false);
javaBeanWithNullValues.setDate(new Date(System.currentTimeMillis()));
javaBeanWithNullValues.setDouble1(1d);
javaBeanWithNullValues.setFloat1(1f);
javaBeanWithNullValues.setInteger(1);
javaBeanWithNullValues.setLong1(1l);
javaBeanWithNullValues.setSqlDate(new java.sql.Date(System.currentTimeMillis()));
javaBeanWithNullValues.setString(""); // ok
javaBeanWithNullValues.setTimestamp(new Timestamp(System.currentTimeMillis()));
return yaml.dump(javaBeanWithNullValues);
}
public class CustomRepresenter extends Representer {
public CustomRepresenter() {
this.representers.put(Float.class, new RepresentFloat());
this.representers.put(Long.class, new RepresentLong());
this.representers.put(java.sql.Date.class, new RepresentDate());
this.representers.put(java.sql.Timestamp.class, new RepresentTime());
}
private class RepresentFloat implements Represent {
public Node representData(Object data) {
return representScalar(new Tag(Tag.PREFIX + "java.lang.Float"), ((Float) data)
.toString());
}
}
private class RepresentLong implements Represent {
public Node representData(Object data) {
return representScalar(new Tag(Tag.PREFIX + "java.lang.Long"), ((Long) data)
.toString());
}
}
private class RepresentDate implements Represent {
public Node representData(Object data) {
return representScalar(new Tag(Tag.PREFIX + "java.sql.Date"),
((java.sql.Date) data).toString());
}
}
private class RepresentTime implements Represent {
public Node representData(Object data) {
return representScalar(new Tag(Tag.PREFIX + "java.sql.Timestamp"),
((java.sql.Timestamp) data).toString());
}
}
}
}