package org.osgl.util;
import org.junit.Test;
import org.osgl.TestBase;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ValueObjectTest extends TestBase {
@Test
public void testBoolean() {
ValueObject vo = new ValueObject(true);
eq(vo.toString(), "true");
eq(vo.toJSONString(), "true");
yes(vo.booleanValue());
}
@Test
public void testByte() {
byte b = 100;
ValueObject vo = new ValueObject(b);
eq(vo.toString(), "100");
eq(vo.toJSONString(), "100");
eq(b, vo.byteValue());
}
@Test
public void testChar() {
ValueObject vo = new ValueObject('c');
eq(vo.toString(), "c");
eq(vo.toJSONString(), "\"c\"");
eq('c', vo.charValue());
}
@Test
public void testString() {
String s = S.random();
ValueObject vo = new ValueObject(s);
eq(vo.toString(), s);
eq(vo.toJSONString(), "\"" + s + "\"");
eq(s, vo.stringValue());
}
@Test
public void testEnum() {
Enum e = FilteredIterator.Type.ALL;
ValueObject vo = new ValueObject(e);
eq(vo.toString(), e.toString());
eq(vo.toJSONString(), "\"" + e + "\"");
FilteredIterator.Type type = vo.enumValue();
eq(FilteredIterator.Type.ALL, type);
}
@Test
public void testShort() {
short s = 100;
ValueObject vo = new ValueObject(s);
eq(vo.toString(), "100");
eq(vo.toJSONString(), "100");
eq(s, vo.shortValue());
}
@Test
public void testInt() {
int i = Integer.MAX_VALUE;
ValueObject vo = new ValueObject(i);
eq(vo.toString(), S.string(i));
eq(vo.toJSONString(), S.string(i));
eq(i, vo.intValue());
}
@Test
public void testLong() {
long l = Long.MAX_VALUE;
ValueObject vo = new ValueObject(l);
eq(vo.toString(), S.string(l));
eq(vo.toJSONString(), S.string(l));
eq(l, vo.longValue());
}
@Test
public void testFloat() {
float f = 10.234f;
ValueObject vo = new ValueObject(f);
eq(vo.toString(), "10.234");
eq(vo.toJSONString(), "10.234");
eq(f, vo.floatValue());
}
@Test
public void testDouble() {
double d = 2109.32143125d;
ValueObject vo = new ValueObject(d);
eq(vo.toString(), "2109.32143125");
eq(vo.toJSONString(), "2109.32143125");
eq(d, vo.doubleValue());
}
@Test
public void testObject() {
Object o = 100;
ValueObject vo = new ValueObject(o);
eq(vo.toString(), "100");
eq(vo.toJSONString(), "100");
o = null;
vo = new ValueObject(o);
eq(vo.toString(), "");
eq(vo.toJSONString(), "\"\"");
o = false;
vo = new ValueObject(o);
eq(vo.toString(), "false");
eq(vo.toJSONString(), "false");
}
@Test
public void testUDF() {
final DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
ValueObject.Codec dateCodec = new ValueObject.Codec<Date>() {
@Override
public Class<Date> targetClass() {
return Date.class;
}
@Override
public Date parse(String s) {
try {
return df.parse(s);
} catch (Exception e) {
throw E.unexpected(e);
}
}
@Override
public String toString(Date o) {
return df.format(o);
}
@Override
public String toJSONString(Date o) {
return S.fmt("\"%s\"", df.format(o));
}
};
ValueObject.register(dateCodec);
Date date = new Date();
ValueObject vo = new ValueObject(date);
eq(vo.toString(), df.format(date));
eq(vo.toJSONString(), S.fmt("\"%s\"", df.format(date)));
}
@Test(expected = NullPointerException.class)
public void testIncorrectType() {
ValueObject vo = new ValueObject(false);
vo.intValue();
}
@Test
public void testCopyConstructor() {
ValueObject vo = new ValueObject(5);
ValueObject copy = new ValueObject(vo);
eq(copy, vo);
}
}