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

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

fix #13172 - Move ImageryLayer.d[xy] to the settings (patch by michael2402) - gsoc-core

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