package org.marketcetera.util.test;
import java.io.Serializable;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.SerializationException;
import org.junit.Test;
import static org.junit.Assert.*;
import static org.marketcetera.util.test.SerializableAssert.*;
/**
* @author tlerios@marketcetera.com
* @since 1.0.0
* @version $Id: SerializableAssertTest.java 16154 2012-07-14 16:34:05Z colin $
*/
/* $License$ */
public class SerializableAssertTest
{
private static final class TransientData
implements Serializable
{
private static final long serialVersionUID=1L;
private transient int mValue;
public TransientData
(int value)
{
mValue=value;
}
public int getValue()
{
return mValue;
}
@Override
public String toString()
{
return "I am "+getValue();
}
@Override
public int hashCode()
{
return getValue();
}
@Override
public boolean equals
(Object other)
{
if (this==other) {
return true;
}
if ((other==null) || !getClass().equals(other.getClass())) {
return false;
}
TransientData o=(TransientData)other;
return (getValue()==o.getValue());
}
}
private static final class NonSerializableMember
{
private int mValue;
public NonSerializableMember
(int value)
{
mValue=value;
}
public int getValue()
{
return mValue;
}
@Override
public String toString()
{
return "I am "+getValue();
}
@Override
public int hashCode()
{
return getValue();
}
@Override
public boolean equals
(Object other)
{
if (this==other) {
return true;
}
if ((other==null) || !getClass().equals(other.getClass())) {
return false;
}
NonSerializableMember o=(NonSerializableMember)other;
return (getValue()==o.getValue());
}
}
private static final class NonSerializableClass
implements Serializable
{
private static final long serialVersionUID=1L;
private NonSerializableMember mValue;
public NonSerializableClass
(NonSerializableMember value)
{
mValue=value;
}
public NonSerializableMember getValue()
{
return mValue;
}
@Override
public String toString()
{
return ObjectUtils.toString(getValue());
}
@Override
public int hashCode()
{
return ObjectUtils.hashCode(getValue());
}
@Override
public boolean equals
(Object other)
{
if (this==other) {
return true;
}
if ((other==null) || !getClass().equals(other.getClass())) {
return false;
}
NonSerializableClass o=(NonSerializableClass)other;
return ObjectUtils.equals(getValue(),o.getValue());
}
}
@Test
public void serializable()
{
assertSerializable(0);
}
@Test
public void transientData()
{
try {
assertSerializable(new TransientData(1));
} catch (AssertionError ex) {
assertEquals("expected object is 'I am 1' actual is 'I am 0'",
ex.getMessage());
assertNull(ex.getCause());
return;
}
fail();
}
@Test
public void nonSerializable()
{
try {
assertSerializable(new NonSerializableClass
(new NonSerializableMember(1)));
} catch (AssertionError ex) {
assertEquals("de/serialization failed",ex.getMessage());
assertEquals(SerializationException.class,ex.getCause().getClass());
return;
}
fail();
}
@Test
public void message()
{
try {
assertSerializable("Right now,",new TransientData(1));
} catch (AssertionError ex) {
assertEquals
("Right now, expected object is 'I am 1' actual is 'I am 0'",
ex.getMessage());
assertNull(ex.getCause());
return;
}
fail();
}
}