create changelog entry
[debian/openrocket] / core / test / net / sf / openrocket / preset / xml / BaseComponentDTOTest.java
1 package net.sf.openrocket.preset.xml;
2
3 import net.sf.openrocket.motor.Manufacturer;
4 import net.sf.openrocket.preset.ComponentPreset;
5 import net.sf.openrocket.preset.ComponentPresetFactory;
6 import net.sf.openrocket.preset.TypedPropertyMap;
7 import org.junit.Assert;
8 import org.junit.Test;
9
10 import javax.imageio.ImageIO;
11 import javax.xml.bind.JAXBContext;
12 import javax.xml.bind.Marshaller;
13 import javax.xml.bind.Unmarshaller;
14 import java.awt.image.BufferedImage;
15 import java.awt.image.DataBufferByte;
16 import java.io.StringReader;
17 import java.io.StringWriter;
18
19 /**
20  */
21 public class BaseComponentDTOTest {
22
23
24     @Test
25     public void testImage() throws Exception {
26         TypedPropertyMap presetspec = new TypedPropertyMap();
27         presetspec.put(ComponentPreset.TYPE, ComponentPreset.Type.BODY_TUBE);
28         presetspec.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer("manufacturer"));
29         presetspec.put(ComponentPreset.PARTNO, "partno");
30         presetspec.put(ComponentPreset.LENGTH, 2.0);
31         presetspec.put(ComponentPreset.OUTER_DIAMETER, 2.0);
32         presetspec.put(ComponentPreset.INNER_DIAMETER, 1.0);
33         presetspec.put(ComponentPreset.MASS, 100.0);
34         ComponentPreset preset = ComponentPresetFactory.create(presetspec);
35
36         //Convert the presets to a BodyTubeDTO
37         BodyTubeDTO dto = new BodyTubeDTO(preset);
38
39         //Add an image to the DTO.
40         BufferedImage image = ImageIO.read(this.getClass().getResourceAsStream("/pix/splashscreen.png"));
41         dto.setImage(image);
42
43         JAXBContext binder = JAXBContext.newInstance(OpenRocketComponentDTO.class);
44         Marshaller marshaller = binder.createMarshaller();
45         marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
46         StringWriter sw = new StringWriter();
47
48         //Serialize the dto to XML
49         marshaller.marshal(dto, sw);
50         String xml = sw.toString();
51
52         //Read the XML back to create the dto again
53         Unmarshaller unmarshaller = binder.createUnmarshaller();
54         BodyTubeDTO redone = (BodyTubeDTO) unmarshaller.unmarshal(new StringReader(xml));
55
56         //Compare the image.
57         Assert.assertArrayEquals(((DataBufferByte) image.getData().getDataBuffer()).getData(),
58                 ((DataBufferByte) redone.getImage().getData().getDataBuffer()).getData());
59
60         //Assert the rest of the attributes.
61         Assert.assertEquals(dto.getInsideDiameter(), redone.getInsideDiameter(), 0.00001);
62         Assert.assertEquals(dto.getLength(), redone.getLength(), 0.00001);
63         Assert.assertEquals(dto.getOutsideDiameter(), redone.getOutsideDiameter(), 0.00001);
64         Assert.assertEquals(dto.getDescription(), redone.getDescription());
65         Assert.assertEquals(dto.getManufacturer(), redone.getManufacturer());
66         Assert.assertEquals(dto.getMass(), redone.getMass(), 0.00001);
67         Assert.assertEquals(dto.getPartNo(), redone.getPartNo());
68
69         //Uncomment if you want to write the image to a file to view it.
70 //        ImageIO.write(redone.getImage(), "png", new FileOutputStream("redone.png"));
71     }
72 }