package org.beanfabrics.swing.goodies.calendar; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import java.awt.BorderLayout; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import javax.swing.JComponent; import javax.swing.JDialog; import org.beanfabrics.model.DatePM; import org.junit.Test; public class SerializationTest { @Test public void testBnCalendarChooserButton() throws Exception { // Given: BnCalendarChooserButton gui = new BnCalendarChooserButton(); DatePM pm = new DatePM(); Date newDate = newDate("2014-05-31"); byte[] buf = serialize(gui); // When: BnCalendarChooserButton act = deserialize(buf); act.setPresentationModel(pm); pm.setDate(newDate); // Then: // show(act); assertThat(act.getCalendarChooser().getSelectedDate(), is(newDate)); } @Test public void testBnCalendarChooser() throws Exception { // Given: BnCalendarChooser gui = new BnCalendarChooser(); gui.setNumberOfPreviousVisibleMonths(3); DatePM pm = new DatePM(); Date newDate = newDate("2014-05-31"); byte[] buf = serialize(gui); // When: BnCalendarChooser act = deserialize(buf); act.setPresentationModel(pm); pm.setDate(newDate); // Then: // show(act); assertThat(act.getSelectedDate(), is(newDate)); } private Date newDate(String source) throws ParseException { return new SimpleDateFormat("yyyy-MM-dd").parse(source); } // / private void show(final JComponent comp) { System.out.println("Showing component"); JDialog dlg = new JDialog(); dlg.setModal(true); dlg.getContentPane().add(comp, BorderLayout.CENTER); dlg.pack(); dlg.setLocationRelativeTo(null); dlg.setVisible(true); } private <T> byte[] serialize(T p) throws IOException { ByteArrayOutputStream bout = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(bout); try { out.writeObject(p); out.close(); bout.close(); return bout.toByteArray(); } finally { bout.close(); out.close(); } } private <T> T deserialize(byte[] buff) throws IOException, ClassNotFoundException { ByteArrayInputStream bin = new ByteArrayInputStream(buff); ObjectInputStream in = new ObjectInputStream(bin); try { @SuppressWarnings("unchecked") T result = (T) in.readObject(); return result; } finally { bin.close(); in.close(); } } }