Skip to content

Commit 8146f9f

Browse files
author
taylor.smock
committed
Fix #23049: Informational errors cause validator dialog to occur on upload, even if they are not enabled
git-svn-id: https://josm.openstreetmap.de/svn/trunk@18775 0c6e7542-c601-0410-84e7-c038aed88b3b
1 parent 62396ae commit 8146f9f

File tree

2 files changed

+56
-4
lines changed

2 files changed

+56
-4
lines changed

src/org/openstreetmap/josm/actions/upload/ValidateUploadHook.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414

1515
import org.openstreetmap.josm.data.APIDataSet;
1616
import org.openstreetmap.josm.data.osm.OsmPrimitive;
17+
import org.openstreetmap.josm.data.preferences.sources.ValidatorPrefHelper;
1718
import org.openstreetmap.josm.data.validation.OsmValidator;
19+
import org.openstreetmap.josm.data.validation.Severity;
1820
import org.openstreetmap.josm.data.validation.TestError;
1921
import org.openstreetmap.josm.data.validation.ValidationTask;
2022
import org.openstreetmap.josm.data.validation.util.AggregatePrimitivesVisitor;
@@ -50,6 +52,10 @@ public boolean checkUpload(APIDataSet apiDataSet) {
5052
Collection<OsmPrimitive> visited = v.visit(apiDataSet.getPrimitivesToUpdate());
5153
OsmValidator.initializeTests();
5254
new ValidationTask(errors -> {
55+
if (!Boolean.TRUE.equals(ValidatorPrefHelper.PREF_OTHER_UPLOAD.get())) {
56+
// Use >= just in case we add additional levels.
57+
errors.removeIf(error -> error.getSeverity().getLevel() >= Severity.OTHER.getLevel());
58+
}
5359
if (errors.stream().allMatch(TestError::isIgnored)) {
5460
returnCode.set(true);
5561
} else {

test/unit/org/openstreetmap/josm/actions/upload/ValidateUploadHookTest.java

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,31 @@
11
// License: GPL. For details, see LICENSE file.
22
package org.openstreetmap.josm.actions.upload;
33

4+
import static org.junit.jupiter.api.Assertions.assertEquals;
45
import static org.junit.jupiter.api.Assertions.assertTrue;
56

6-
import org.junit.jupiter.api.extension.RegisterExtension;
7+
import java.util.Collections;
8+
9+
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
10+
import mockit.Mock;
711
import org.junit.jupiter.api.Test;
12+
import org.junit.jupiter.api.extension.RegisterExtension;
13+
import org.junit.jupiter.params.ParameterizedTest;
14+
import org.junit.jupiter.params.provider.ValueSource;
15+
import org.openstreetmap.josm.TestUtils;
816
import org.openstreetmap.josm.data.APIDataSet;
17+
import org.openstreetmap.josm.data.Bounds;
18+
import org.openstreetmap.josm.data.DataSource;
19+
import org.openstreetmap.josm.data.coor.LatLon;
20+
import org.openstreetmap.josm.data.osm.DataSet;
21+
import org.openstreetmap.josm.data.osm.Node;
22+
import org.openstreetmap.josm.data.osm.Way;
23+
import org.openstreetmap.josm.data.preferences.sources.ValidatorPrefHelper;
24+
import org.openstreetmap.josm.gui.ExtendedDialog;
25+
import org.openstreetmap.josm.gui.MainApplication;
26+
import org.openstreetmap.josm.gui.layer.OsmDataLayer;
927
import org.openstreetmap.josm.testutils.JOSMTestRules;
10-
11-
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
28+
import org.openstreetmap.josm.testutils.mockers.ExtendedDialogMocker;
1229

1330
/**
1431
* Unit tests for class {@link ValidateUploadHook}.
@@ -20,7 +37,7 @@ class ValidateUploadHookTest {
2037
*/
2138
@RegisterExtension
2239
@SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
23-
public JOSMTestRules test = new JOSMTestRules().fakeAPI().timeout(30000);
40+
public JOSMTestRules test = new JOSMTestRules().main().projection().fakeAPI().timeout(30000);
2441

2542
/**
2643
* Test of {@link ValidateUploadHook#checkUpload} method.
@@ -29,4 +46,33 @@ class ValidateUploadHookTest {
2946
void testCheckUpload() {
3047
assertTrue(new ValidateUploadHook().checkUpload(new APIDataSet()));
3148
}
49+
50+
@ParameterizedTest
51+
@ValueSource(booleans = {true, false})
52+
void testUploadOtherErrors(boolean otherEnabled) {
53+
ValidatorPrefHelper.PREF_OTHER_UPLOAD.put(otherEnabled);
54+
final DataSet ds = new DataSet();
55+
final Way building = TestUtils.newWay("building=yes", new Node(new LatLon(33.2287665, -111.8259225)),
56+
new Node(new LatLon(33.2287335, -111.8257513)), new Node(new LatLon(33.2285316, -111.8258086)),
57+
new Node(new LatLon(33.2285696, -111.8259781)));
58+
ds.addPrimitiveRecursive(building);
59+
building.addNode(building.firstNode());
60+
ds.addDataSource(new DataSource(new Bounds(33, -112, 34, -111), ""));
61+
MainApplication.getLayerManager().addLayer(new OsmDataLayer(ds,
62+
"ValidateUploadHookTest#testUploadOtherErrors", null));
63+
final ExtendedDialogMocker mocker =
64+
new ExtendedDialogMocker(Collections.singletonMap("Suspicious data found. Upload anyway?", "Cancel")) {
65+
@Override
66+
protected String getString(ExtendedDialog instance) {
67+
return instance.getTitle();
68+
}
69+
70+
@Mock
71+
public void dispose() {
72+
// Do nothing
73+
}
74+
};
75+
new ValidateUploadHook().checkUpload(new APIDataSet(ds));
76+
assertEquals(!otherEnabled, mocker.getInvocationLog().isEmpty());
77+
}
3278
}

0 commit comments

Comments
 (0)