// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.io; import static org.junit.Assert.assertEquals; import java.io.IOException; import java.util.List; import org.junit.Test; import org.openstreetmap.josm.data.coor.LatLon; import org.openstreetmap.josm.data.notes.Note; import org.openstreetmap.josm.data.notes.Note.State; import org.openstreetmap.josm.data.notes.NoteComment; import org.openstreetmap.josm.data.notes.NoteComment.Action; import org.openstreetmap.josm.data.osm.User; import org.openstreetmap.josm.tools.date.DateUtils; import org.xml.sax.SAXException; /** * Unit tests of {@link NoteReader} class. */ public class NoteReaderTest { /** * Test to read the first note of OSM database. * @throws SAXException if any SAX parsing error occurs * @throws IOException if any I/O error occurs */ @Test public void testNoteReader() throws SAXException, IOException { List<Note> list = new NoteReader( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"+ "<osm version=\"0.6\" generator=\"OpenStreetMap server\">\n"+ "<note lon=\"68.86415\" lat=\"36.7232991\">\n"+ " <id>4</id>\n"+ " <url>http://api.openstreetmap.org/api/0.6/notes/4</url>\n"+ " <reopen_url>http://api.openstreetmap.org/api/0.6/notes/4/reopen</reopen_url>\n"+ " <date_created>2013-04-24 08:07:02 UTC</date_created>\n"+ " <status>closed</status>\n"+ " <date_closed>2013-04-24 08:08:51 UTC</date_closed>\n"+ " <comments>\n"+ " <comment>\n"+ " <date>2013-04-24 08:07:02 UTC</date>\n"+ " <uid>1626</uid>\n"+ " <user>FredB</user>\n"+ " <user_url>http://www.openstreetmap.org/user/FredB</user_url>\n"+ " <action>opened</action>\n"+ " <text>test</text>\n"+ " <html><p>test</p></html>\n"+ " </comment>\n"+ " <comment>\n"+ " <date>2013-04-24 08:08:51 UTC</date>\n"+ " <uid>1626</uid>\n"+ " <user>FredB</user>\n"+ " <user_url>http://www.openstreetmap.org/user/FredB</user_url>\n"+ " <action>closed</action>\n"+ " <text></text>\n"+ " <html><p></p></html>\n"+ " </comment>\n"+ " </comments>\n"+ "</note>\n"+ "</osm>").parse(); assertEquals(1, list.size()); Note n = list.get(0); assertEquals(DateUtils.fromString("2013-04-24 08:08:51 UTC"), n.getClosedAt()); assertEquals(DateUtils.fromString("2013-04-24 08:07:02 UTC"), n.getCreatedAt()); assertEquals(4, n.getId()); assertEquals(new LatLon(36.7232991, 68.86415), n.getLatLon()); assertEquals(State.CLOSED, n.getState()); List<NoteComment> comments = n.getComments(); assertEquals(2, comments.size()); NoteComment c1 = comments.get(0); assertEquals(c1, n.getFirstComment()); assertEquals(DateUtils.fromString("2013-04-24 08:07:02 UTC"), c1.getCommentTimestamp()); assertEquals(Action.OPENED, c1.getNoteAction()); assertEquals("test", c1.getText()); assertEquals(User.createOsmUser(1626, "FredB"), c1.getUser()); NoteComment c2 = comments.get(1); assertEquals(Action.CLOSED, c2.getNoteAction()); assertEquals("", c2.getText()); } /** * Non-regression test for bug #12393. * @throws Exception if an error occurs */ @Test public void testTicket12393() throws Exception { // CHECKSTYLE.OFF: LineLength new NoteReader( "<note id=\"233775\" lat=\"48.2411985\" lon=\"-122.3744820\" created_at=\"2014-08-31T17:13:29Z\" closed_at=\"2015-09-06T23:35:14Z\">"+ "<comment action=\"opened\" timestamp=\"2014-08-31T17:13:29Z\" uid=\"7247\" user=\"goldfndr\">Jump Start Espresso | 26930</comment>"+ "<comment action=\"hidden\" timestamp=\"2015-09-06T23:34:26Z\" uid=\"355617\" user=\"pnorman\"></comment>"+ "<comment action=\"reopened\" timestamp=\"2015-09-06T23:34:38Z\" uid=\"355617\" user=\"pnorman\"></comment>"+ "<comment action=\"closed\" timestamp=\"2015-09-06T23:35:14Z\" uid=\"355617\" user=\"pnorman\">mapped, but inadvertently hid the note</comment>"+ "</note>").parse(); // CHECKSTYLE.ON: LineLength } }