Merge commit '42b2e5ca519766e37ce6941ba4faecc9691cc403' into upstream
[debian/openrocket] / core / test / net / sf / openrocket / preset / xml / BaseComponentDTOTest.java
diff --git a/core/test/net/sf/openrocket/preset/xml/BaseComponentDTOTest.java b/core/test/net/sf/openrocket/preset/xml/BaseComponentDTOTest.java
new file mode 100644 (file)
index 0000000..bbc609d
--- /dev/null
@@ -0,0 +1,72 @@
+package net.sf.openrocket.preset.xml;
+
+import net.sf.openrocket.motor.Manufacturer;
+import net.sf.openrocket.preset.ComponentPreset;
+import net.sf.openrocket.preset.ComponentPresetFactory;
+import net.sf.openrocket.preset.TypedPropertyMap;
+import org.junit.Assert;
+import org.junit.Test;
+
+import javax.imageio.ImageIO;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+import java.awt.image.BufferedImage;
+import java.awt.image.DataBufferByte;
+import java.io.StringReader;
+import java.io.StringWriter;
+
+/**
+ */
+public class BaseComponentDTOTest {
+
+
+    @Test
+    public void testImage() throws Exception {
+        TypedPropertyMap presetspec = new TypedPropertyMap();
+        presetspec.put(ComponentPreset.TYPE, ComponentPreset.Type.BODY_TUBE);
+        presetspec.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer("manufacturer"));
+        presetspec.put(ComponentPreset.PARTNO, "partno");
+        presetspec.put(ComponentPreset.LENGTH, 2.0);
+        presetspec.put(ComponentPreset.OUTER_DIAMETER, 2.0);
+        presetspec.put(ComponentPreset.INNER_DIAMETER, 1.0);
+        presetspec.put(ComponentPreset.MASS, 100.0);
+        ComponentPreset preset = ComponentPresetFactory.create(presetspec);
+
+        //Convert the presets to a BodyTubeDTO
+        BodyTubeDTO dto = new BodyTubeDTO(preset);
+
+        //Add an image to the DTO.
+        BufferedImage image = ImageIO.read(this.getClass().getResourceAsStream("/pix/splashscreen.png"));
+        dto.setImage(image);
+
+        JAXBContext binder = JAXBContext.newInstance(OpenRocketComponentDTO.class);
+        Marshaller marshaller = binder.createMarshaller();
+        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
+        StringWriter sw = new StringWriter();
+
+        //Serialize the dto to XML
+        marshaller.marshal(dto, sw);
+        String xml = sw.toString();
+
+        //Read the XML back to create the dto again
+        Unmarshaller unmarshaller = binder.createUnmarshaller();
+        BodyTubeDTO redone = (BodyTubeDTO) unmarshaller.unmarshal(new StringReader(xml));
+
+        //Compare the image.
+        Assert.assertArrayEquals(((DataBufferByte) image.getData().getDataBuffer()).getData(),
+                ((DataBufferByte) redone.getImage().getData().getDataBuffer()).getData());
+
+        //Assert the rest of the attributes.
+        Assert.assertEquals(dto.getInsideDiameter(), redone.getInsideDiameter(), 0.00001);
+        Assert.assertEquals(dto.getLength(), redone.getLength(), 0.00001);
+        Assert.assertEquals(dto.getOutsideDiameter(), redone.getOutsideDiameter(), 0.00001);
+        Assert.assertEquals(dto.getDescription(), redone.getDescription());
+        Assert.assertEquals(dto.getManufacturer(), redone.getManufacturer());
+        Assert.assertEquals(dto.getMass(), redone.getMass(), 0.00001);
+        Assert.assertEquals(dto.getPartNo(), redone.getPartNo());
+
+        //Uncomment if you want to write the image to a file to view it.
+//        ImageIO.write(redone.getImage(), "png", new FileOutputStream("redone.png"));
+    }
+}