org.marketcetera.util.test.SerializableAssert.java Source code

Java tutorial

Introduction

Here is the source code for org.marketcetera.util.test.SerializableAssert.java

Source

package org.marketcetera.util.test;

import java.io.Serializable;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.SerializationException;
import org.apache.commons.lang.SerializationUtils;

/**
 * Assertions for serialization.
 * 
 * @author tlerios@marketcetera.com
 * @since 1.0.0
 * @version $Id$
 */

/* $License$ */

public final class SerializableAssert {

    // CLASS METHODS.

    /**
     * Asserts that the given object serializes correctly, i.e. the
     * deserialized version of the object is equal to the original
     * object. If the assertion does not hold, the {@link
     * AssertionError} thrown starts with the given message, which may
     * be null if no such custom message prefix is desired.
     *
     * @param message The message.
     * @param o The object.
     */

    public static void assertSerializable(String message, Serializable o) {
        String content = null;
        SerializationException cause = null;
        try {
            Object oNew = SerializationUtils.deserialize(SerializationUtils.serialize(o));
            if (ObjectUtils.equals(o, oNew)) {
                return;
            }
            content = "expected object is '" + o + //$NON-NLS-1$
                    "' actual is '" + oNew + "'"; //$NON-NLS-1$ //$NON-NLS-2$
        } catch (SerializationException ex) {
            content = "de/serialization failed"; //$NON-NLS-1$
            cause = ex;
        }
        if (message != null) {
            content = message + " " + content; //$NON-NLS-1$
        }
        AssertionError error = new AssertionError(content);
        if (cause != null) {
            error.initCause(cause);
        }
        throw error;
    }

    /**
     * Asserts that the given object serializes correctly, i.e. the
     * deserialized version of the object is equal to the original
     * object.
     *
     * @param o The object.
     */

    public static void assertSerializable(Serializable o) {
        assertSerializable(null, o);
    }

    // CONSTRUCTOR.

    /**
     * Constructor. It is private so that no instances can be created.
     */

    private SerializableAssert() {
    }
}