From 153932dc303fceaca7df9148788de841a7fc3349 Mon Sep 17 00:00:00 2001 From: Bentley Breithaupt Date: Thu, 30 Apr 2020 17:08:02 -0700 Subject: [PATCH] ignore single character switch (#283) Co-authored-by: Daniel B --- config/configuration.json | 1 + docs/checks/streetNameIntegersOnlyCheck.md | 5 ++++- .../tag/StreetNameIntegersOnlyCheck.java | 16 ++++++++++------ .../tag/StreetNameIntegersOnlyCheckTest.java | 10 ++++++++++ 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/config/configuration.json b/config/configuration.json index 4c535ba57..01c8378b1 100644 --- a/config/configuration.json +++ b/config/configuration.json @@ -833,6 +833,7 @@ }, "StreetNameIntegersOnlyCheck": { "name.keys.filter":["name","name:left","name:right"], + "character.single.ignore": true, "challenge": { "description": "Tasks containing name tags with only integers", "blurb": "Street Names Integers Only", diff --git a/docs/checks/streetNameIntegersOnlyCheck.md b/docs/checks/streetNameIntegersOnlyCheck.md index da8d05d9f..36f385183 100644 --- a/docs/checks/streetNameIntegersOnlyCheck.md +++ b/docs/checks/streetNameIntegersOnlyCheck.md @@ -5,7 +5,10 @@ This check flags roads that have only integers in their name. An example of an improper name tag in this case is something like: `name=42` -Items like `name=1st Ave` are allowed, and not flagged. +Items like `name=1st Ave` are allowed, and not flagged. + +To avoid overlap with [ShortNameCheck](../../src/main/java/org/openstreetmap/atlas/checks/validation/tag/ShortNameCheck.java), +this check can be configured to not flag any name tag with only a single character (i.e. `name=1` would not be flagged). #### Live Example diff --git a/src/main/java/org/openstreetmap/atlas/checks/validation/tag/StreetNameIntegersOnlyCheck.java b/src/main/java/org/openstreetmap/atlas/checks/validation/tag/StreetNameIntegersOnlyCheck.java index 372adfe59..79600690e 100644 --- a/src/main/java/org/openstreetmap/atlas/checks/validation/tag/StreetNameIntegersOnlyCheck.java +++ b/src/main/java/org/openstreetmap/atlas/checks/validation/tag/StreetNameIntegersOnlyCheck.java @@ -19,13 +19,13 @@ /** * This check flags {@link Edge}s that are car navigable highways and have a name tag that contains - * only integers. + * only integers. Name tags with a single character are optionally ignored, as they will be flagged + * by {@link ShortNameCheck}. * * @author bbreithaupt */ -public class StreetNameIntegersOnlyCheck extends BaseCheck +public class StreetNameIntegersOnlyCheck extends BaseCheck { - private static final long serialVersionUID = 3439708862406928654L; private static final List FALLBACK_INSTRUCTIONS = Arrays @@ -35,6 +35,7 @@ public class StreetNameIntegersOnlyCheck extends BaseCheck NameLeftTag.KEY, NameRightTag.KEY); private final List nameKeys; + private final boolean ignoreSingleCharacter; /** * The default constructor that must be supplied. The Atlas Checks framework will generate the @@ -47,8 +48,9 @@ public class StreetNameIntegersOnlyCheck extends BaseCheck public StreetNameIntegersOnlyCheck(final Configuration configuration) { super(configuration); - this.nameKeys = (List) configurationValue(configuration, "name.keys.filter", - NAME_KEYS_DEFAULT); + this.nameKeys = configurationValue(configuration, "name.keys.filter", NAME_KEYS_DEFAULT); + this.ignoreSingleCharacter = configurationValue(configuration, "character.single.ignore", + false); } /** @@ -81,7 +83,9 @@ protected Optional flag(final AtlasObject object) for (final String nameKey : this.nameKeys) { final Optional nameValue = object.getTag(nameKey); - if (nameValue.isPresent()) + // Only test present name tags, and optionally ignore single character name values + if (nameValue.isPresent() + && (!this.ignoreSingleCharacter || nameValue.get().length() > 1)) { try { diff --git a/src/test/java/org/openstreetmap/atlas/checks/validation/tag/StreetNameIntegersOnlyCheckTest.java b/src/test/java/org/openstreetmap/atlas/checks/validation/tag/StreetNameIntegersOnlyCheckTest.java index 8d3023743..cd247bbc6 100644 --- a/src/test/java/org/openstreetmap/atlas/checks/validation/tag/StreetNameIntegersOnlyCheckTest.java +++ b/src/test/java/org/openstreetmap/atlas/checks/validation/tag/StreetNameIntegersOnlyCheckTest.java @@ -28,6 +28,16 @@ public void motorwayWithIntegerNameTagTest() this.verifier.globallyVerify(flags -> Assert.assertEquals(1, flags.size())); } + @Test + public void motorwayWithMixedNameTagIntegerNameLeftTagIgnoreSingleTest() + { + this.verifier.actual(this.setup.motorwayWithMixedNameTagIntegerNameLeftTagAtlas(), + new StreetNameIntegersOnlyCheck(ConfigurationResolver + .inlineConfiguration("{\"StreetNameIntegersOnlyCheck\": {\n" + + " \"character.single.ignore\":true}}"))); + this.verifier.globallyVerify(flags -> Assert.assertEquals(0, flags.size())); + } + @Test public void motorwayWithMixedNameTagIntegerNameLeftTagOnlyCheckNameTest() {