source: josm/trunk/test/unit/org/openstreetmap/josm/io/OsmWriterTest.java@ 14274

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

fix bug when writing a locked OSM layer

  • Property svn:eol-style set to native
File size: 3.4 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.io;
3
4import static org.junit.Assert.assertArrayEquals;
5import static org.junit.Assert.assertEquals;
6
7import java.io.ByteArrayOutputStream;
8import java.io.IOException;
9import java.io.OutputStreamWriter;
10import java.io.PrintWriter;
11import java.nio.charset.StandardCharsets;
12import java.util.ArrayList;
13import java.util.Arrays;
14import java.util.Collections;
15import java.util.List;
16
17import org.junit.Test;
18import org.openstreetmap.josm.data.osm.DataSet;
19import org.openstreetmap.josm.data.osm.DownloadPolicy;
20import org.openstreetmap.josm.data.osm.NodeData;
21import org.openstreetmap.josm.data.osm.UploadPolicy;
22
23/**
24 * Unit tests of {@link OsmWriter} class.
25 */
26public class OsmWriterTest {
27
28 /**
29 * Unit test of {@link OsmWriter#byIdComparator}.
30 */
31 @Test
32 public void testByIdComparator() {
33
34 final List<NodeData> ids = new ArrayList<>();
35 for (Long id : Arrays.asList(12L, Long.MIN_VALUE, 65L, -12L, 2L, 0L, -3L, -20L, Long.MAX_VALUE)) {
36 final NodeData n = new NodeData();
37 n.setId(id);
38 ids.add(n);
39 }
40
41 Collections.sort(ids, OsmWriter.byIdComparator);
42
43 final long[] longIds = ids.stream().mapToLong(NodeData::getUniqueId).toArray();
44 assertArrayEquals(new long[] {
45 -3, -12, -20, -9223372036854775808L, 0, 2, 12, 65, 9223372036854775807L
46 }, longIds);
47 }
48
49 /**
50 * Unit test of {@link OsmWriter#header(DownloadPolicy, UploadPolicy)}.
51 * @throws IOException if an I/O error occurs
52 */
53 @Test
54 public void testHeader() throws IOException {
55 doTestHeader(null, null,
56 "<osm version='0.6' generator='JOSM'>");
57 doTestHeader(DownloadPolicy.NORMAL, UploadPolicy.NORMAL,
58 "<osm version='0.6' generator='JOSM'>");
59 doTestHeader(DownloadPolicy.BLOCKED, UploadPolicy.BLOCKED,
60 "<osm version='0.6' download='never' upload='never' generator='JOSM'>");
61 }
62
63 private static void doTestHeader(DownloadPolicy download, UploadPolicy upload, String expected) throws IOException {
64 ByteArrayOutputStream baos = new ByteArrayOutputStream();
65 try (PrintWriter out = new PrintWriter(new OutputStreamWriter(baos, StandardCharsets.UTF_8));
66 OsmWriter writer = OsmWriterFactory.createOsmWriter(out, true, OsmWriter.DEFAULT_API_VERSION)) {
67 writer.header(download, upload);
68 }
69 assertEquals("<?xml version='1.0' encoding='UTF-8'?>" + expected,
70 baos.toString("UTF-8").replaceAll("\r", "").replaceAll("\n", ""));
71 }
72
73 /**
74 * Unit test of {@link OsmWriter#write} with dataset locked.
75 * @throws IOException if an I/O error occurs
76 */
77 @Test
78 public void testWriteLock() throws IOException {
79 ByteArrayOutputStream baos = new ByteArrayOutputStream();
80 try (PrintWriter out = new PrintWriter(new OutputStreamWriter(baos, StandardCharsets.UTF_8));
81 OsmWriter writer = OsmWriterFactory.createOsmWriter(out, true, OsmWriter.DEFAULT_API_VERSION)) {
82 DataSet ds = new DataSet();
83 ds.lock();
84 writer.write(ds);
85 }
86 assertEquals("<?xml version='1.0' encoding='UTF-8'?><osm version='0.6' locked='true' generator='JOSM'></osm>",
87 baos.toString("UTF-8").replaceAll("\r", "").replaceAll("\n", ""));
88 }
89}
Note: See TracBrowser for help on using the repository browser.