From a9b6773ea0d96efc5b5c05564a5c9dccd270575f Mon Sep 17 00:00:00 2001 From: simonpoole Date: Thu, 16 May 2024 23:23:13 +0200 Subject: [PATCH] Add test for DirectionFragment and rotation in EasyEdit modes --- .../de/blau/android/easyedit/NodeTest.java | 39 ++++- .../blau/android/easyedit/RelationTest.java | 69 +++++++++ .../propertyeditor/PropertyEditorTest.java | 140 +++++++++++++++++- 3 files changed, 241 insertions(+), 7 deletions(-) diff --git a/src/androidTest/java/de/blau/android/easyedit/NodeTest.java b/src/androidTest/java/de/blau/android/easyedit/NodeTest.java index 12a662eff..4d7776420 100644 --- a/src/androidTest/java/de/blau/android/easyedit/NodeTest.java +++ b/src/androidTest/java/de/blau/android/easyedit/NodeTest.java @@ -4,6 +4,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import java.util.HashMap; import java.util.List; import org.junit.After; @@ -28,6 +29,7 @@ import de.blau.android.osm.Node; import de.blau.android.osm.OsmElement; import de.blau.android.osm.StorageDelegator; +import de.blau.android.osm.Tags; import de.blau.android.osm.Way; import de.blau.android.prefs.AdvancedPrefDatabase; import de.blau.android.prefs.Preferences; @@ -91,7 +93,7 @@ public void selectNode() { Node node = (Node) App.getDelegator().getOsmElement(Node.NAME, 3465444349L); assertNotNull(node); TestUtils.clickAtCoordinates(device, map, node.getLon(), node.getLat(), true); - TestUtils.clickAwayTip(device, context); + TestUtils.clickAwayTip(device, context); assertTrue(TestUtils.clickTextContains(device, "Toilets", true, 5000)); node = App.getLogic().getSelectedNode(); assertNotNull(node); @@ -121,7 +123,7 @@ public void selectNode() { @Test public void dragNode() { TestUtils.clickAtCoordinates(device, map, 8.38782, 47.390339, true); - TestUtils.clickAwayTip(device, context); + TestUtils.clickAwayTip(device, context); assertTrue(TestUtils.clickTextContains(device, "Toilets", true, 5000)); Node node = App.getLogic().getSelectedNode(); assertNotNull(node); @@ -164,7 +166,7 @@ public void unjoinMergeWays() { assertEquals(OsmElement.STATE_UNCHANGED, unjoinedWay.getState()); TestUtils.clickAtCoordinates(device, map, 8.3874964, 47.3884769, false); - TestUtils.clickAwayTip(device, context); + TestUtils.clickAwayTip(device, context); assertTrue(TestUtils.clickTextContains(device, false, " #633468419", false)); // the first node in the list assertTrue(TestUtils.clickMenuButton(device, context.getString(R.string.menu_merge), false, true)); @@ -192,7 +194,7 @@ public void unjoinMergeNodes() { assertEquals(apiNodeCount + 3, delegator.getApiNodeCount()); TestUtils.clickAtCoordinates(device, map, 8.3866386, 47.3904394, false); - TestUtils.clickAwayTip(device, context); + TestUtils.clickAwayTip(device, context); assertTrue(TestUtils.clickTextContains(device, false, " #-2221", false)); // the first node in the list assertTrue(TestUtils.clickMenuButton(device, context.getString(R.string.menu_merge), false, true)); @@ -241,4 +243,33 @@ public void appendWithMenu() { assertTrue(TestUtils.findText(device, false, context.getString(R.string.actionmode_createpath))); TestUtils.clickButton(device, device.getCurrentPackageName() + ":id/simpleButton", true); } + + /** + * Select node, set direction tag, rotate + */ + // @SdkSuppress(minSdkVersion = 26) + @Test + public void rotate() { + TestUtils.zoomToLevel(device, main, 21); + TestUtils.clickAtCoordinates(device, map, 8.3881577, 47.3886924, true); + assertTrue(TestUtils.findText(device, false, context.getString(R.string.actionmode_nodeselect))); + Node node = App.getLogic().getSelectedNode(); + assertNotNull(node); + java.util.Map tags = new HashMap<>(); + tags.put("traffic_sign", "stop"); + tags.put(Tags.KEY_DIRECTION, "90"); + App.getLogic().setTags(main, node, tags); + main.getEasyEditManager().invalidate(); + if (!TestUtils.clickMenuButton(device, context.getString(R.string.menu_rotate), false, false)) { + TestUtils.clickOverflowButton(device); + TestUtils.clickText(device, false, context.getString(R.string.menu_rotate), false, false); + } + assertTrue(TestUtils.findText(device, false, context.getString(R.string.actionmode_rotate))); + TestUtils.drag(device, map, 8.3882867, 47.38887072, 8.3882853, 47.3886022, true, 100); + + TestUtils.clickButton(device, device.getCurrentPackageName() + ":id/simpleButton", true); + assertTrue(TestUtils.findText(device, false, context.getString(R.string.actionmode_nodeselect))); + + assertEquals(205, Integer.parseInt(node.getTagWithKey(Tags.KEY_DIRECTION)), 5); + } } diff --git a/src/androidTest/java/de/blau/android/easyedit/RelationTest.java b/src/androidTest/java/de/blau/android/easyedit/RelationTest.java index de6fa4a4f..fc2b0cfdd 100644 --- a/src/androidTest/java/de/blau/android/easyedit/RelationTest.java +++ b/src/androidTest/java/de/blau/android/easyedit/RelationTest.java @@ -31,6 +31,7 @@ import de.blau.android.Map; import de.blau.android.R; import de.blau.android.TestUtils; +import de.blau.android.osm.Node; import de.blau.android.osm.OsmElement; import de.blau.android.osm.Relation; import de.blau.android.osm.RelationMember; @@ -38,6 +39,7 @@ import de.blau.android.osm.Way; import de.blau.android.prefs.AdvancedPrefDatabase; import de.blau.android.prefs.Preferences; +import de.blau.android.presets.Preset; import de.blau.android.propertyeditor.PropertyEditorActivity; import de.blau.android.propertyeditor.PropertyEditorTest; @@ -174,6 +176,73 @@ public void createRelation() { assertTrue(TestUtils.clickMenuButton(device, "Delete", false, true)); } + /** + * Create a multipolygon, rotate it + */ + // @SdkSuppress(minSdkVersion = 26) + @Test + public void rotateMultipolygon() { + map.getDataLayer().setVisible(true); + TestUtils.unlock(device); + TestUtils.clickAwayTip(device, main); + TestUtils.zoomToLevel(device, main, 22); + // split building first + TestUtils.clickAtCoordinates(device, map, 8.3882060, 47.3885768, true); + TestUtils.clickAwayTip(device, main); + assertTrue(TestUtils.findText(device, false, context.getString(R.string.actionmode_wayselect))); + assertTrue(TestUtils.clickMenuButton(device, "Split", false, true)); + TestUtils.clickAwayTip(device, context); + assertTrue(TestUtils.findText(device, false, context.getString(R.string.actionmode_closed_way_split_1))); + TestUtils.clickAtCoordinates(device, map, 8.3881251, 47.3885077, true); + assertTrue(TestUtils.findText(device, false, context.getString(R.string.actionmode_closed_way_split_2))); + TestUtils.clickAtCoordinates(device, map, 8.3881577, 47.3886924, true); + assertTrue(TestUtils.findText(device, false, context.getString(R.string.actionmode_multiselect))); + + assertTrue(TestUtils.clickOverflowButton(device)); + TestUtils.scrollTo(context.getString(R.string.menu_relation), false); + assertTrue(TestUtils.clickText(device, false, context.getString(R.string.menu_relation), true, false)); + + assertTrue(TestUtils.findText(device, false, context.getString(R.string.select_relation_type_title), 2000)); + TestUtils.scrollTo("Multipolygon", false); + assertTrue(TestUtils.clickText(device, false, "Multipolygon", true, false)); + + assertTrue(TestUtils.findText(device, false, context.getString(R.string.menu_relation), 2000)); + + TestUtils.sleep(3000); + + TestUtils.clickButton(device, device.getCurrentPackageName() + ":id/simpleButton", true); + + assertTrue(TestUtils.findText(device, false, context.getString(R.string.move_outer_tags_title), 2000)); + TestUtils.clickButton(device, "android:id/button1", true); + + assertTrue(TestUtils.findText(device, false, "Multipolygon", 2000)); + TestUtils.clickHome(device, true); + + assertTrue(TestUtils.findText(device, false, context.getString(R.string.actionmode_relationselect), 2000)); + TestUtils.sleep(); + List relations = App.getLogic().getSelectedRelations(); + assertNotNull(relations); + assertEquals(1, relations.size()); + Relation relation = relations.get(0); + Way way = (Way) relation.getMembers().get(0).getElement(); + Node n0 = way.getFirstNode(); + + assertEquals(83881251, n0.getLon()); + assertEquals(473885077, n0.getLat()); + if (!TestUtils.clickMenuButton(device, context.getString(R.string.menu_rotate), false, false)) { + TestUtils.clickOverflowButton(device); + TestUtils.clickText(device, false, context.getString(R.string.menu_rotate), false, false); + } + assertTrue(TestUtils.findText(device, false, context.getString(R.string.actionmode_rotate))); + TestUtils.drag(device, map, 8.3882867, 47.38887072, 8.3882853, 47.3886022, true, 100); + + TestUtils.clickButton(device, device.getCurrentPackageName() + ":id/simpleButton", true); + assertTrue(TestUtils.findText(device, false, context.getString(R.string.actionmode_relationselect))); + + assertEquals(83882342, n0.getLon(), 1000); + assertEquals(473890641, n0.getLat(), 1000); + } + /** * Create way, create multipolygon, check roles */ diff --git a/src/androidTest/java/de/blau/android/propertyeditor/PropertyEditorTest.java b/src/androidTest/java/de/blau/android/propertyeditor/PropertyEditorTest.java index 3f8456436..e27e71692 100644 --- a/src/androidTest/java/de/blau/android/propertyeditor/PropertyEditorTest.java +++ b/src/androidTest/java/de/blau/android/propertyeditor/PropertyEditorTest.java @@ -10,6 +10,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.TreeMap; import java.util.concurrent.CountDownLatch; @@ -180,8 +181,6 @@ public void newNode() { Logic logic = App.getLogic(); Map map = main.getMap(); logic.setZoom(map, 20); - float tolerance = DataStyle.getCurrent().getWayToleranceValue(); - System.out.println("Tolerance " + tolerance); // create a relation for testing Relation r = logic.createRelation(main, Tags.VALUE_ROUTE, new ArrayList<>()); @@ -230,6 +229,142 @@ public void newNode() { assertEquals(1, parents.size()); assertEquals(r, parents.get(0)); } + + /** + * Add set a direction value on a new node + */ + @Test + public void nodeWithDirection1() { + Logic logic = App.getLogic(); + Map map = main.getMap(); + logic.setZoom(map, 20); + + logic.setSelectedWay(null); + logic.setSelectedNode(null); + logic.setSelectedRelation(null); + try { + logic.performAdd(main, 1000.0f, 0.0f); + } catch (OsmIllegalOperationException e1) { + fail(e1.getMessage()); + } + + Node n = logic.getSelectedNode(); + assertNotNull(n); + + main.performTagEdit(n, null, false, false); + waitForPropertyEditor(); + assertTrue(TestUtils.clickText(device, true, main.getString(R.string.tag_menu_preset), false, false)); + boolean found = TestUtils.clickText(device, true, getTranslatedPresetGroupName(main, "Highways"), true, false); + assertTrue(found); + found = TestUtils.clickText(device, true, getTranslatedPresetGroupName(main, "Waypoints"), true, false); + assertTrue(found); + found = TestUtils.clickText(device, true, getTranslatedPresetItemName(main, "Traffic sign"), true, true); + assertTrue(found); + UiObject2 direction = null; + try { + direction = getField(device, "For traffic direction", 1); + } catch (UiObjectNotFoundException e) { + fail(); + } + assertNotNull(direction); + assertEquals("Type or tap for values", direction.getText()); + direction.clickAndWait(Until.newWindow(), 2000); + TestUtils.clickText(device, true, main.getString(R.string.save), true, false); + TestUtils.clickHome(device, true); + try { + assertTrue(Integer.parseInt(direction.getText()) >= 0); + } catch (NumberFormatException nfex) { + fail(nfex.getMessage()); + } + } + + /** + * Add set a direction value on a new node + */ + @Test + public void nodeWithDirection2() { + Logic logic = App.getLogic(); + Map map = main.getMap(); + logic.setZoom(map, 20); + + logic.setSelectedWay(null); + logic.setSelectedNode(null); + logic.setSelectedRelation(null); + try { + logic.performAdd(main, 1000.0f, 0.0f); + } catch (OsmIllegalOperationException e1) { + fail(e1.getMessage()); + } + + Node n = logic.getSelectedNode(); + assertNotNull(n); + + main.performTagEdit(n, null, false, false); + waitForPropertyEditor(); + assertTrue(TestUtils.clickText(device, true, main.getString(R.string.tag_menu_preset), false, false)); + boolean found = TestUtils.clickText(device, true, getTranslatedPresetGroupName(main, "Highways"), true, false); + assertTrue(found); + found = TestUtils.clickText(device, true, getTranslatedPresetGroupName(main, "Waypoints"), true, false); + assertTrue(found); + found = TestUtils.clickText(device, true, getTranslatedPresetItemName(main, "Traffic sign"), true, true); + assertTrue(found); + UiObject2 direction = null; + try { + direction = getField(device, "For traffic direction", 1); + } catch (UiObjectNotFoundException e) { + fail(); + } + assertNotNull(direction); + assertEquals("Type or tap for values", direction.getText()); + direction.clickAndWait(Until.newWindow(), 2000); + TestUtils.clickText(device, true, "Forward", false, false); + TestUtils.clickText(device, true, main.getString(R.string.save), true, false); + TestUtils.clickHome(device, true); + assertEquals("forward", direction.getText()); + } + + @Test + public void nodeWithDirection3() { + Logic logic = App.getLogic(); + Map map = main.getMap(); + logic.setZoom(map, 20); + + logic.setSelectedWay(null); + logic.setSelectedNode(null); + logic.setSelectedRelation(null); + try { + logic.performAdd(main, 1000.0f, 0.0f); + } catch (OsmIllegalOperationException e1) { + fail(e1.getMessage()); + } + + Node n = logic.getSelectedNode(); + assertNotNull(n); + java.util.Map tags = new HashMap<>(); + tags.put("traffic_sign", "stop"); + tags.put("direction", "forward"); + logic.setTags(main, n, tags); + + main.performTagEdit(n, null, false, false); + waitForPropertyEditor(); + UiObject2 direction = null; + try { + direction = getField(device, "For traffic direction", 1); + } catch (UiObjectNotFoundException e) { + fail(); + } + assertNotNull(direction); + assertEquals("forward", direction.getText()); + direction.clickAndWait(Until.newWindow(), 2000); + TestUtils.clickText(device, true, "Forward", false, false); + TestUtils.clickText(device, true, main.getString(R.string.save), true, false); + TestUtils.clickHome(device, true); + try { + assertTrue(Integer.parseInt(direction.getText()) >= 0); + } catch (NumberFormatException nfex) { + fail(nfex.getMessage()); + } + } /** * Check that we moan if a duplicate key is added @@ -292,7 +427,6 @@ public void duplicateKey() { } TestUtils.clickHome(device, true); assertTrue(n.hasTag("key", "value")); - } /**