// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.dialogs.relation;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import org.junit.Rule;
import org.junit.Test;
import org.openstreetmap.josm.Main;
import org.openstreetmap.josm.data.coor.LatLon;
import org.openstreetmap.josm.data.osm.DataSet;
import org.openstreetmap.josm.data.osm.Node;
import org.openstreetmap.josm.data.osm.Relation;
import org.openstreetmap.josm.data.osm.RelationMember;
import org.openstreetmap.josm.gui.dialogs.relation.SelectionTable.DoubleClickAdapter;
import org.openstreetmap.josm.gui.layer.OsmDataLayer;
import org.openstreetmap.josm.testutils.JOSMTestRules;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
/**
* Unit tests of {@link SelectionTable} class.
*/
public class SelectionTableTest {
/**
* Setup test.
*/
@Rule
@SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
public JOSMTestRules test = new JOSMTestRules();
/**
* Unit test of {@link SelectionTable#SelectionTable}.
*/
@Test
public void testSelectionTable() {
// Constructs a relation with a member
DataSet ds = new DataSet();
Node n = new Node(LatLon.ZERO);
Relation r = new Relation();
r.addMember(new RelationMember(null, n));
// Add it to dataset
ds.addPrimitive(n);
ds.addPrimitive(r);
// Add a new layer as active one
OsmDataLayer layer = new OsmDataLayer(ds, "", null);
try {
Main.getLayerManager().addLayer(layer);
// Constructs models and table
MemberTableModel memberTableModel = new MemberTableModel(r, layer, null);
memberTableModel.populate(r);
memberTableModel.register();
SelectionTableModel selectionTableModel = new SelectionTableModel(layer);
selectionTableModel.register();
try {
SelectionTable t = new SelectionTable(selectionTableModel, memberTableModel);
DoubleClickAdapter adapter = null;
for (MouseListener listener : t.getMouseListeners()) {
if (listener instanceof DoubleClickAdapter) {
adapter = (DoubleClickAdapter) listener;
}
}
assertNotNull(adapter);
// Select member, trigger selection change events
ds.setSelected(n);
// Simple left click, do nothing
adapter.mouseClicked(new MouseEvent(t, MouseEvent.MOUSE_CLICKED, System.currentTimeMillis(), 0, 0, 0,
1, false, MouseEvent.BUTTON1));
assertEquals(-1, memberTableModel.getSelectionModel().getMinSelectionIndex());
// Double right click, do nothing
adapter.mouseClicked(new MouseEvent(t, MouseEvent.MOUSE_CLICKED, System.currentTimeMillis(), 0, 0, 0,
2, false, MouseEvent.BUTTON2));
assertEquals(-1, memberTableModel.getSelectionModel().getMinSelectionIndex());
// Double left click, select member
adapter.mouseClicked(new MouseEvent(t, MouseEvent.MOUSE_CLICKED, System.currentTimeMillis(), 0, 0, 0,
2, false, MouseEvent.BUTTON1));
assertEquals(0, memberTableModel.getSelectionModel().getMinSelectionIndex());
} finally {
selectionTableModel.unregister();
memberTableModel.unregister();
}
} finally {
Main.getLayerManager().removeLayer(layer);
}
}
}