Changeset 14517 in josm
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java
r14508 r14517 533 533 } else if (!isTagInPresets(key, value)) { 534 534 // try to fix common typos and check again if value is still unknown 535 String fixedValue = harmonizeValue(prop.getValue()); 535 final String harmonizedValue = harmonizeValue(prop.getValue()); 536 String fixedValue = null; 536 537 Set<String> possibleValues = getPresetValues(key); 537 538 List<String> fixVals = new ArrayList<>(); 538 539 int maxPresetValueLen = 0; 539 if (!possibleValues.contains(fixedValue)) { 540 if (possibleValues.contains(harmonizedValue)) { 541 fixedValue = harmonizedValue; 542 } else { 540 543 // use Levenshtein distance to find typical typos 541 544 int minDist = MAX_LEVENSHTEIN_DISTANCE + 1; … … 544 547 if (possibleVal.isEmpty()) 545 548 continue; 549 if (harmonizedValue.length() < 3 && possibleVal.length() >= harmonizedValue.length() + MAX_LEVENSHTEIN_DISTANCE) { 550 // don't suggest fix value when given value is short and lengths are too different 551 // for example surface=u would result in surface=mud 552 continue; 553 } 546 554 maxPresetValueLen = Math.max(maxPresetValueLen, possibleVal.length()); 547 int dist = Utils.getLevenshteinDistance(possibleVal, fixedValue);555 int dist = Utils.getLevenshteinDistance(possibleVal, harmonizedValue); 548 556 if (dist < minDist) { 549 557 closest = possibleVal; … … 555 563 } 556 564 } 557 fixedValue = null;558 565 if (minDist <= MAX_LEVENSHTEIN_DISTANCE && maxPresetValueLen > MAX_LEVENSHTEIN_DISTANCE) { 559 566 if (fixVals.size() < 2) { -
trunk/test/unit/org/openstreetmap/josm/data/validation/tests/TagCheckerTest.java
r14508 r14517 138 138 assertTrue(errors.get(0).isFixable()); 139 139 } 140 140 141 /** 141 142 * Check for misspelled value. … … 167 168 assertTrue(errors.toString(), errors.isEmpty()); 168 169 } 170 171 /** 172 * Check regression: Don't fix surface=u -> surface=mud. 173 * @throws IOException if any I/O error occurs 174 */ 175 @Test 176 public void testTooShortToFix() throws IOException { 177 final List<TestError> errors = test(OsmUtils.createPrimitive("node surface=u")); 178 assertEquals(1, errors.size()); 179 assertEquals("Presets do not contain property value", errors.get(0).getMessage()); 180 assertEquals("Value 'u' for key 'surface' not in presets.", errors.get(0).getDescription()); 181 assertEquals(Severity.OTHER, errors.get(0).getSeverity()); 182 assertFalse(errors.get(0).isFixable()); 183 } 184 185 /** 186 * Check value with upper case 187 * @throws IOException if any I/O error occurs 188 */ 189 @Test 190 public void testValueDifferentCase() throws IOException { 191 final List<TestError> errors = test(OsmUtils.createPrimitive("node highway=Residential")); 192 assertEquals(1, errors.size()); 193 assertEquals("Misspelled property value", errors.get(0).getMessage()); 194 assertEquals("Value 'Residential' for key 'highway' looks like 'residential'.", errors.get(0).getDescription()); 195 assertEquals(Severity.WARNING, errors.get(0).getSeverity()); 196 assertTrue(errors.get(0).isFixable()); 197 } 198 169 199 }
Note:
See TracChangeset
for help on using the changeset viewer.