// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.history; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import org.junit.Rule; import org.junit.Test; import org.openstreetmap.josm.data.osm.Node; import org.openstreetmap.josm.data.osm.OsmPrimitiveType; import org.openstreetmap.josm.data.osm.SimplePrimitiveId; import org.openstreetmap.josm.data.osm.User; import org.openstreetmap.josm.data.osm.history.History; import org.openstreetmap.josm.data.osm.history.HistoryDataSet; import org.openstreetmap.josm.data.osm.history.HistoryNode; import org.openstreetmap.josm.testutils.JOSMTestRules; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Unit tests of {@link HistoryBrowserModel} class. */ public class HistoryBrowserModelTest { /** * Setup test. */ @Rule @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD") public JOSMTestRules test = new JOSMTestRules().preferences().devAPI(); /** * Test for {@link HistoryBrowserModel#HistoryBrowserModel}. */ @Test public void testHistoryBrowserModel() { HistoryBrowserModel model = new HistoryBrowserModel(); assertNotNull(model.getVersionTableModel()); assertNull(model.getHistory()); Node n = new Node(1, 1); n.setUser(User.getAnonymous()); n.setChangesetId(1); HistoryDataSet.getInstance().put(new HistoryNode(n)); History history = HistoryDataSet.getInstance().getHistory(1, OsmPrimitiveType.NODE); assertNotNull(history); model.setHistory(history); assertEquals(history, model.getHistory()); model = new HistoryBrowserModel(history); assertEquals(history, model.getHistory()); } /** * Unit test of {@link HistoryBrowserModel#getTagTableModel}. */ @Test public void testGetTagTableModel() { HistoryBrowserModel model = new HistoryBrowserModel(); TagTableModel t1 = model.getTagTableModel(PointInTimeType.CURRENT_POINT_IN_TIME); TagTableModel t2 = model.getTagTableModel(PointInTimeType.REFERENCE_POINT_IN_TIME); assertNotNull(t1); assertNotNull(t2); assertNotEquals(t1, t2); } /** * Unit test of {@link HistoryBrowserModel#getNodeListTableModel}. */ @Test public void testGetNodeListTableModel() { HistoryBrowserModel model = new HistoryBrowserModel(); DiffTableModel t1 = model.getNodeListTableModel(PointInTimeType.CURRENT_POINT_IN_TIME); DiffTableModel t2 = model.getNodeListTableModel(PointInTimeType.REFERENCE_POINT_IN_TIME); assertNotNull(t1); assertNotNull(t2); assertNotEquals(t1, t2); } /** * Unit test of {@link HistoryBrowserModel#getRelationMemberTableModel}. */ @Test public void testGetRelationMemberTableModel() { HistoryBrowserModel model = new HistoryBrowserModel(); DiffTableModel t1 = model.getRelationMemberTableModel(PointInTimeType.CURRENT_POINT_IN_TIME); DiffTableModel t2 = model.getRelationMemberTableModel(PointInTimeType.REFERENCE_POINT_IN_TIME); assertNotNull(t1); assertNotNull(t2); assertNotEquals(t1, t2); } /** * Unit test of {@link HistoryBrowserModel#setCurrentPointInTime} and {@link HistoryBrowserModel#setReferencePointInTime} - null history. */ @Test public void testSetPointsInTimeNullHistory() { HistoryBrowserModel model = new HistoryBrowserModel(); VersionTableModel tableModel = model.getVersionTableModel(); tableModel.setValueAt(false, 0, 0); // code coverage tableModel.setValueAt(true, 0, 1); // reference point tableModel.setValueAt(true, 1, 2); // current point tableModel.setValueAt(true, 3, 3); // code coverage } /** * Unit test of {@link HistoryBrowserModel#setCurrentPointInTime} and {@link HistoryBrowserModel#setReferencePointInTime} - node history. */ @Test public void testSetPointsInTimeNodeHistory() { SimplePrimitiveId id = new SimplePrimitiveId(2, OsmPrimitiveType.NODE); new HistoryLoadTask().add(id).run(); History history = HistoryDataSet.getInstance().getHistory(id); assertTrue(history.getNumVersions() >= 4); HistoryBrowserModel model = new HistoryBrowserModel(history); VersionTableModel tableModel = model.getVersionTableModel(); tableModel.setValueAt(false, 0, 0); // code coverage tableModel.setValueAt(true, 0, 1); // reference point tableModel.setValueAt(true, 3, 2); // current point tableModel.setValueAt(true, 3, 3); // code coverage // nodes only for ways assertEquals(0, model.getNodeListTableModel(PointInTimeType.REFERENCE_POINT_IN_TIME).getRowCount()); assertEquals(0, model.getNodeListTableModel(PointInTimeType.CURRENT_POINT_IN_TIME).getRowCount()); // members only for relations assertEquals(0, model.getRelationMemberTableModel(PointInTimeType.REFERENCE_POINT_IN_TIME).getRowCount()); assertEquals(0, model.getRelationMemberTableModel(PointInTimeType.CURRENT_POINT_IN_TIME).getRowCount()); } /** * Unit test of {@link HistoryBrowserModel#setCurrentPointInTime} and {@link HistoryBrowserModel#setReferencePointInTime} - way history. */ @Test public void testSetPointsInTimeWayHistory() { SimplePrimitiveId id = new SimplePrimitiveId(2, OsmPrimitiveType.WAY); new HistoryLoadTask().add(id).run(); History history = HistoryDataSet.getInstance().getHistory(id); assertTrue(history.getNumVersions() >= 2); HistoryBrowserModel model = new HistoryBrowserModel(history); VersionTableModel tableModel = model.getVersionTableModel(); tableModel.setValueAt(false, 0, 0); // code coverage tableModel.setValueAt(true, 0, 1); // reference point tableModel.setValueAt(true, 3, 2); // current point tableModel.setValueAt(true, 3, 3); // code coverage // nodes only for ways assertEquals(2, model.getNodeListTableModel(PointInTimeType.REFERENCE_POINT_IN_TIME).getRowCount()); assertEquals(2, model.getNodeListTableModel(PointInTimeType.CURRENT_POINT_IN_TIME).getRowCount()); // members only for relations assertEquals(0, model.getRelationMemberTableModel(PointInTimeType.REFERENCE_POINT_IN_TIME).getRowCount()); assertEquals(0, model.getRelationMemberTableModel(PointInTimeType.CURRENT_POINT_IN_TIME).getRowCount()); } /** * Unit test of {@link HistoryBrowserModel#setCurrentPointInTime} and {@link HistoryBrowserModel#setReferencePointInTime} - relation history. */ @Test public void testSetPointsInTimeRelationHistory() { SimplePrimitiveId id = new SimplePrimitiveId(2, OsmPrimitiveType.RELATION); new HistoryLoadTask().add(id).run(); History history = HistoryDataSet.getInstance().getHistory(id); assertTrue(history.getNumVersions() >= 2); HistoryBrowserModel model = new HistoryBrowserModel(history); VersionTableModel tableModel = model.getVersionTableModel(); tableModel.setValueAt(false, 0, 0); // code coverage tableModel.setValueAt(true, 0, 1); // reference point tableModel.setValueAt(true, 3, 2); // current point tableModel.setValueAt(true, 3, 3); // code coverage // nodes only for ways assertEquals(0, model.getNodeListTableModel(PointInTimeType.REFERENCE_POINT_IN_TIME).getRowCount()); assertEquals(0, model.getNodeListTableModel(PointInTimeType.CURRENT_POINT_IN_TIME).getRowCount()); // members only for relations assertEquals(1, model.getRelationMemberTableModel(PointInTimeType.REFERENCE_POINT_IN_TIME).getRowCount()); assertEquals(1, model.getRelationMemberTableModel(PointInTimeType.CURRENT_POINT_IN_TIME).getRowCount()); } }