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

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

see #15229 - deprecate Main.platform and related methods - new class PlatformManager

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