Do not fake an errorMessage for pattern constraints 64/68464/4
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 21 Feb 2018 13:51:03 +0000 (14:51 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 21 Feb 2018 15:10:25 +0000 (16:10 +0100)
Eagerly-formatting a replacement error message is actively hurting
callers of getErrorMessage(), which really expect that method
to return model-defined error message. Fix that.

JIRA: YANGTOOLS-850
Change-Id: Iddb5f9ae529f1ed49eed735a8931ee396334f578
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/CompiledPatternContext.java
yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codecs/StringPatternCheckingCodecTest.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/PatternConstraintImpl.java
yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/PatternConstraintImplTest.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternConstraintImpl.java
yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveStatementTypeTest.java

index afddefdcd771338a48fd44da8399cd41ae6e8618..3806bf35f7f38539bbeeb2332a0d0b2d6f2fe663 100644 (file)
@@ -45,7 +45,7 @@ class CompiledPatternContext {
                 throw new IllegalArgumentException(errorMessage);
             }
 
-            throw new IllegalArgumentException("Value " + str + " " + (invert ? "matches" : "does not match")
+            throw new IllegalArgumentException("Value '" + str + "' " + (invert ? "matches" : "does not match")
                     + " regular expression '" + regEx + "'");
         }
     }
index 4cf56becb503188523168ebf5c74595c5caede50..e053e30c1c150bd08e4b72592d661d6dfb91f413 100644 (file)
@@ -57,7 +57,7 @@ public class StringPatternCheckingCodecTest {
             fail("Exception should have been thrown.");
         } catch (final IllegalArgumentException ex) {
             LOG.debug("IllegalArgumentException was thrown as expected", ex);
-            assertEquals("Supplied value does not match the regular expression ^(?:[A-Z]+)$.", ex.getMessage());
+            assertEquals("Value 'abcd' does not match regular expression '[A-Z]+'", ex.getMessage());
         }
     }
 }
index 19bc54c1b1edace8602808a2898eb6d2e8675aeb..780a59f5c19abbc17f04b4d7bf3242ab1ef8a16e 100644 (file)
@@ -46,8 +46,7 @@ final class PatternConstraintImpl implements PatternConstraint, Immutable {
         this.description = description.orElse(null);
         this.reference = reference.orElse(null);
         this.errorAppTag = errorAppTag != null ? errorAppTag : "invalid-regular-expression";
-        this.errorMessage = errorMessage != null ? errorMessage : String.format(
-                "Supplied value does not match the regular expression %s.", regex);
+        this.errorMessage = errorMessage;
         this.modifier = modifier.orElse(null);
     }
 
@@ -107,7 +106,7 @@ final class PatternConstraintImpl implements PatternConstraint, Immutable {
 
     @Override
     public String toString() {
-        return MoreObjects.toStringHelper(this).add("regex", regex).add("description", description)
+        return MoreObjects.toStringHelper(this).omitNullValues().add("regex", regex).add("description", description)
                 .add("reference", reference).add("errorAppTag", errorAppTag).add("errorMessage", errorMessage)
                 .add("modifier", modifier).toString();
     }
index b475e8243c794bb910080db96ee7b1b21759f8c1..a98fc2ac4c661f941a2a82e9599b310ea4f3056e 100644 (file)
@@ -36,7 +36,7 @@ public class PatternConstraintImplTest {
         assertEquals("Description should be 'test description'.", Optional.of("test description"),
                 patternConstraint.getDescription());
         assertEquals(Optional.of("invalid-regular-expression"), patternConstraint.getErrorAppTag());
-        assertTrue(patternConstraint.getErrorMessage().isPresent());
+        assertFalse(patternConstraint.getErrorMessage().isPresent());
         assertEquals(Optional.of("RFC 6020"), patternConstraint.getReference());
         assertEquals("Regular expression should be equls '\\D'.", "\\D", patternConstraint.getJavaPatternString());
         assertNotEquals("Hash codes shouldn't be equals.", patternConstraint.hashCode(), patternConstraint2.hashCode());
index 2d1f229aa99f4e41603ebfc592991cabfe028418..2bb4fef2a6e02eb10079deb94717de11107054e7 100644 (file)
@@ -12,10 +12,11 @@ import static java.util.Objects.requireNonNull;
 import com.google.common.base.MoreObjects;
 import java.util.Objects;
 import java.util.Optional;
+import org.opendaylight.yangtools.concepts.Immutable;
 import org.opendaylight.yangtools.yang.model.api.type.ModifierKind;
 import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
 
-final class PatternConstraintImpl implements PatternConstraint {
+final class PatternConstraintImpl implements PatternConstraint, Immutable {
 
     private final String regEx;
     private final String rawRegEx;
@@ -37,8 +38,7 @@ final class PatternConstraintImpl implements PatternConstraint {
         this.description = description;
         this.reference = reference;
         this.errorAppTag = errorAppTag != null ? errorAppTag : "invalid-regular-expression";
-        this.errorMessage = errorMessage != null ? errorMessage : String.format(
-                "Supplied value does not match the regular expression %s.", regex);
+        this.errorMessage = errorMessage;
         this.modifier = modifier;
     }
 
@@ -101,7 +101,7 @@ final class PatternConstraintImpl implements PatternConstraint {
 
     @Override
     public String toString() {
-        return MoreObjects.toStringHelper(this).add("regex", regEx).add("description", description)
+        return MoreObjects.toStringHelper(this).omitNullValues().add("regex", regEx).add("description", description)
                 .add("reference", reference).add("errorAppTag", errorAppTag).add("errorMessage", errorMessage)
                 .add("modifier", modifier).toString();
     }
index 33211f566d81a49915e8cdb50d4a0d1455e00994..901e9181f7c1c93a3295ca4220b887726d1ca1a4 100644 (file)
@@ -437,8 +437,7 @@ public class EffectiveStatementTypeTest {
         assertEquals("^(?:[0-9a-fA-F]*)$", patternConstraint.getJavaPatternString());
         assertFalse(patternConstraint.getReference().isPresent());
         assertFalse(patternConstraint.getDescription().isPresent());
-        assertEquals(Optional.of("Supplied value does not match the regular expression ^(?:[0-9a-fA-F]*)$."),
-            patternConstraint.getErrorMessage());
+        assertEquals(Optional.empty(), patternConstraint.getErrorMessage());
         assertEquals(Optional.of("invalid-regular-expression"), patternConstraint.getErrorAppTag());
         assertNotNull(patternConstraint.toString());
         assertNotNull(patternConstraint.hashCode());