/*
 * SerializerRoundtripTest.java 21.05.2007
 *
 * Copyright (c) 2007 WEB.DE GmbH, Karlsruhe. All rights reserved.
 */
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;

import junit.framework.TestCase;

import com.caucho.hessian.io.HessianSerializerInput;
import com.caucho.hessian.io.HessianSerializerOutput;

/**
 * @author stfl
 */
public class SerializerRoundtripTest extends TestCase {

    private HessianSerializerOutput serializer;
    private HessianSerializerInput deserializer;
    private Calendar cal;
    private ByteArrayOutputStream out;

    @Override
    public void setUp() {
        out = new ByteArrayOutputStream();
        serializer = new HessianSerializerOutput(out);
        deserializer = new HessianSerializerInput();
        cal = Calendar.getInstance();
    }

    public void testMapWithCalendar() throws IOException {
        Map<String, Calendar> map = new HashMap<String, Calendar>();
        map.put("cal", cal);
        serializer.writeObject(map);

        deserializer.init(new ByteArrayInputStream(out.toByteArray()));
        Map resultMap = (Map) deserializer.readObject(Map.class);
        Calendar resultCal = (Calendar) resultMap.get("cal");
        assertEquals(cal, resultCal);
    }

    static class ClassWithCalendar implements Serializable {
        private Calendar calendar;
        public Calendar getCalendar() {
            return calendar;
        }
        public void setCalendar(Calendar cal) {
            this.calendar = cal;
        }

    }

    public void testClassWithCalendar() throws IOException {
        ClassWithCalendar cwc = new ClassWithCalendar();
        cwc.setCalendar(cal);
        serializer.writeObject(cwc);

        deserializer.init(new ByteArrayInputStream(out.toByteArray()));
        // The following line throws IOExceptionWrapper: java.util.Caleandar: null
        // with cause: java.lang.InstantiationException
        ClassWithCalendar resultCwc = (ClassWithCalendar) deserializer.readObject();
        assertEquals(resultCwc.getCalendar(), cwc.getCalendar());
    }

}
