source: josm/trunk/test/unit/org/openstreetmap/josm/io/session/SessionWriterTest.java@ 10937

Last change on this file since 10937 was 10937, checked in by Don-vip, 8 years ago

sonar - squid:S3658 - Unit tests should throw exceptions

  • Property svn:eol-style set to native
File size: 7.2 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.io.session;
3
4import java.io.File;
5import java.io.IOException;
6import java.util.Arrays;
7import java.util.Collections;
8import java.util.HashMap;
9import java.util.List;
10import java.util.Map;
11
12import org.junit.BeforeClass;
13import org.junit.Test;
14import org.openstreetmap.josm.JOSMFixture;
15import org.openstreetmap.josm.data.coor.EastNorth;
16import org.openstreetmap.josm.data.coor.LatLon;
17import org.openstreetmap.josm.data.gpx.GpxData;
18import org.openstreetmap.josm.data.gpx.WayPoint;
19import org.openstreetmap.josm.data.imagery.ImageryInfo;
20import org.openstreetmap.josm.data.notes.Note;
21import org.openstreetmap.josm.data.osm.DataSet;
22import org.openstreetmap.josm.gui.layer.GpxLayer;
23import org.openstreetmap.josm.gui.layer.ImageryLayer;
24import org.openstreetmap.josm.gui.layer.Layer;
25import org.openstreetmap.josm.gui.layer.NoteLayer;
26import org.openstreetmap.josm.gui.layer.OsmDataLayer;
27import org.openstreetmap.josm.gui.layer.TMSLayer;
28import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
29import org.openstreetmap.josm.gui.preferences.projection.ProjectionPreference;
30import org.openstreetmap.josm.tools.MultiMap;
31import org.openstreetmap.josm.tools.Utils;
32
33/**
34 * Unit tests for Session writing.
35 */
36public class SessionWriterTest {
37
38 protected static final class OsmHeadlessJosExporter extends OsmDataSessionExporter {
39 public OsmHeadlessJosExporter(OsmDataLayer layer) {
40 super(layer);
41 }
42
43 @Override
44 public boolean requiresZip() {
45 return false;
46 }
47 }
48
49 protected static final class OsmHeadlessJozExporter extends OsmDataSessionExporter {
50 public OsmHeadlessJozExporter(OsmDataLayer layer) {
51 super(layer);
52 }
53
54 @Override
55 public boolean requiresZip() {
56 return true;
57 }
58 }
59
60 protected static final class GpxHeadlessJosExporter extends GpxTracksSessionExporter {
61 public GpxHeadlessJosExporter(GpxLayer layer) {
62 super(layer);
63 }
64
65 @Override
66 public boolean requiresZip() {
67 return false;
68 }
69 }
70
71 protected static final class GpxHeadlessJozExporter extends GpxTracksSessionExporter {
72 public GpxHeadlessJozExporter(GpxLayer layer) {
73 super(layer);
74 }
75
76 @Override
77 public boolean requiresZip() {
78 return true;
79 }
80 }
81
82 /**
83 * Setup tests.
84 */
85 @BeforeClass
86 public static void setUpBeforeClass() {
87 JOSMFixture.createUnitTestFixture().init(true);
88 ProjectionPreference.setProjection();
89 }
90
91 private void testWrite(List<Layer> layers, final boolean zip) throws IOException {
92 Map<Layer, SessionLayerExporter> exporters = new HashMap<>();
93 if (zip) {
94 SessionWriter.registerSessionLayerExporter(OsmDataLayer.class, OsmHeadlessJozExporter.class);
95 SessionWriter.registerSessionLayerExporter(GpxLayer.class, GpxHeadlessJozExporter.class);
96 } else {
97 SessionWriter.registerSessionLayerExporter(OsmDataLayer.class, OsmHeadlessJosExporter.class);
98 SessionWriter.registerSessionLayerExporter(GpxLayer.class, GpxHeadlessJosExporter.class);
99 }
100 for (final Layer l : layers) {
101 exporters.put(l, SessionWriter.getSessionLayerExporter(l));
102 }
103 SessionWriter sw = new SessionWriter(layers, -1, exporters, new MultiMap<Layer, Layer>(), zip);
104 File file = new File(System.getProperty("java.io.tmpdir"), getClass().getName()+(zip ? ".joz" : ".jos"));
105 try {
106 sw.write(file);
107 } finally {
108 if (file.exists()) {
109 Utils.deleteFile(file);
110 }
111 }
112 }
113
114 private OsmDataLayer createOsmLayer() {
115 OsmDataLayer layer = new OsmDataLayer(new DataSet(), "OSM layer name", null);
116 layer.setAssociatedFile(new File("data.osm"));
117 return layer;
118 }
119
120 private GpxLayer createGpxLayer() {
121 GpxData data = new GpxData();
122 data.waypoints.add(new WayPoint(new LatLon(42.72665, -0.00747)));
123 data.waypoints.add(new WayPoint(new LatLon(42.72659, -0.00749)));
124 GpxLayer layer = new GpxLayer(data, "GPX layer name");
125 layer.setAssociatedFile(new File("data.gpx"));
126 return layer;
127 }
128
129 private MarkerLayer createMarkerLayer(GpxLayer gpx) {
130 return new MarkerLayer(gpx.data, "Marker layer name", gpx.getAssociatedFile(), gpx);
131 }
132
133 private ImageryLayer createImageryLayer() {
134 TMSLayer layer = new TMSLayer(new ImageryInfo("the name", "http://www.url.com/"));
135 layer.getDisplaySettings().setDisplacement(new EastNorth(12, 34));
136 return layer;
137 }
138
139 private NoteLayer createNoteLayer() {
140 return new NoteLayer(Arrays.asList(new Note(LatLon.ZERO)), "layer name");
141 }
142
143 /**
144 * Tests to write an empty .jos file.
145 * @throws IOException if an I/O error occurs
146 */
147 @Test
148 public void testWriteEmptyJos() throws IOException {
149 testWrite(Collections.<Layer>emptyList(), false);
150 }
151
152 /**
153 * Tests to write an empty .joz file.
154 * @throws IOException if an I/O error occurs
155 */
156 @Test
157 public void testWriteEmptyJoz() throws IOException {
158 testWrite(Collections.<Layer>emptyList(), true);
159 }
160
161 /**
162 * Tests to write a .jos file containing OSM data.
163 * @throws IOException if an I/O error occurs
164 */
165 @Test
166 public void testWriteOsmJos() throws IOException {
167 testWrite(Collections.<Layer>singletonList(createOsmLayer()), false);
168 }
169
170 /**
171 * Tests to write a .joz file containing OSM data.
172 * @throws IOException if an I/O error occurs
173 */
174 @Test
175 public void testWriteOsmJoz() throws IOException {
176 testWrite(Collections.<Layer>singletonList(createOsmLayer()), true);
177 }
178
179 /**
180 * Tests to write a .jos file containing GPX data.
181 * @throws IOException if an I/O error occurs
182 */
183 @Test
184 public void testWriteGpxJos() throws IOException {
185 testWrite(Collections.<Layer>singletonList(createGpxLayer()), false);
186 }
187
188 /**
189 * Tests to write a .joz file containing GPX data.
190 * @throws IOException if an I/O error occurs
191 */
192 @Test
193 public void testWriteGpxJoz() throws IOException {
194 testWrite(Collections.<Layer>singletonList(createGpxLayer()), true);
195 }
196
197 /**
198 * Tests to write a .joz file containing GPX and marker data.
199 * @throws IOException if an I/O error occurs
200 */
201 @Test
202 public void testWriteGpxAndMarkerJoz() throws IOException {
203 GpxLayer gpx = createGpxLayer();
204 testWrite(Arrays.asList(gpx, createMarkerLayer(gpx)), true);
205 }
206
207 /**
208 * Tests to write a .joz file containing an imagery layer.
209 * @throws IOException if an I/O error occurs
210 */
211 @Test
212 public void testWriteImageryLayer() throws IOException {
213 final Layer layer = createImageryLayer();
214 testWrite(Collections.singletonList(layer), true);
215 }
216
217 /**
218 * Tests to write a .joz file containing a note layer.
219 * @throws IOException if an I/O error occurs
220 */
221 @Test
222 public void testWriteNoteLayer() throws IOException {
223 final Layer layer = createNoteLayer();
224 testWrite(Collections.singletonList(layer), true);
225 }
226}
Note: See TracBrowser for help on using the repository browser.