Make ConstraintMetaDefition attributes Optional 20/64820/9
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 27 Oct 2017 17:47:03 +0000 (19:47 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Sat, 28 Oct 2017 10:23:45 +0000 (12:23 +0200)
Both error message and application tag can be null, wrap them in
an Optional, reducing confusion for users around empty string
semantics in their values.

Change-Id: Ie96850655b23bda81c864e3804b21e05ace5acbe
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
20 files changed:
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-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ConstraintMetaDefinition.java
yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/SchemaContextEmitter.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/PatternConstraintImpl.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/RangeConstraintImpl.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/JavaLengthConstraints.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/RangeRestrictedTypeBuilder.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/type/ResolvedLengthConstraint.java
yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/PatternConstraintImplTest.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/MustEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/AbstractConstraintEffectiveStatement.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/PatternConstraintEffectiveImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/PatternEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/RangeConstraintEffectiveImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/RangeEffectiveStatementImpl.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveStatementTypeTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/MustAndWhenStmtTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/YangParserSimpleTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/Bug5200Test.java

index 2977f3ef6ecacdfbd81b1078c27a1cad574abf7b..a42b2a46f28c34f1cc34f6804ff05f9a40d23830 100644 (file)
@@ -7,9 +7,6 @@
  */
 package org.opendaylight.yangtools.yang.data.impl.codec;
 
-import static com.google.common.base.Preconditions.checkArgument;
-
-import com.google.common.base.Strings;
 import java.util.regex.Pattern;
 import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
 
@@ -20,15 +17,17 @@ class CompiledPatternContext {
 
     CompiledPatternContext(final PatternConstraint yangConstraint) {
         pattern = Pattern.compile("^" + yangConstraint.getRegularExpression() + "$");
-        final String yangMessage = yangConstraint.getErrorMessage();
-        if (Strings.isNullOrEmpty(yangMessage)) {
-            errorMessage = "Value %s does not match regular expression <" + pattern.pattern() + ">";
-        } else {
-            errorMessage = yangMessage;
-        }
+        errorMessage = yangConstraint.getErrorMessage().orElse(null);
     }
 
-    public void validate(final String str) {
-        checkArgument(pattern.matcher(str).matches(), errorMessage, str);
+    void validate(final String str) {
+        if (!pattern.matcher(str).matches()) {
+            if (errorMessage != null) {
+                throw new IllegalArgumentException(errorMessage);
+            }
+
+            throw new IllegalArgumentException("Value " + str + "does not match regular expression '"
+                    + pattern.pattern() + "'");
+        }
     }
 }
index 39ea19159402d50d40b3130c0f5379bf7ae4417a..6dc9c686d05798803124f2eb65cf4692c024e652 100644 (file)
@@ -10,7 +10,6 @@ package org.opendaylight.yangtools.yang.data.impl.codecs;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.opendaylight.yangtools.yang.data.impl.codecs.TypeDefinitionAwareCodecTestHelper.getCodec;
 
@@ -62,8 +61,7 @@ public class StringPatternCheckingCodecTest {
             fail("Exception should have been thrown.");
         } catch (final IllegalArgumentException ex) {
             LOG.debug("IllegalArgumentException was thrown as expected: {}", ex);
-            assertTrue(ex.getMessage().contains(
-                "Supplied value does not match the regular expression ^[A-Z]+$. [abcd]"));
+            assertEquals("Supplied value does not match the regular expression ^[A-Z]+$.", ex.getMessage());
         }
     }
 }
index c662881d6d2c1e27bd1c4f29ff5e3a9845073585..a02851319bf14c0fc573db29631dbe496e588304 100644 (file)
@@ -7,6 +7,8 @@
  */
 package org.opendaylight.yangtools.yang.model.api;
 
+import java.util.Optional;
+
 /**
  * Contains methods which retrieve values for description, error message, error app tag and reference (to some external
  * definition, resource or similar).
@@ -14,18 +16,16 @@ package org.opendaylight.yangtools.yang.model.api;
 public interface ConstraintMetaDefinition extends DocumentedNode {
 
     /**
-     * Returns the value of the argument of YANG <code>error-app-tag</code>
-     * keyword.
+     * Returns the value of the argument of YANG <code>error-app-tag</code> keyword.
      *
-     * @return string with the application tag
+     * @return string with the application tag, or empty if it was not provided.
      */
-    String getErrorAppTag();
+    Optional<String> getErrorAppTag();
 
     /**
-     * Returns the value of the argument of YANG <code>error-message</code>
-     * keyword.
+     * Returns the value of the argument of YANG <code>error-message</code> keyword.
      *
-     * @return string with the error message
+     * @return string with the error message, or empty if it was not provided.
      */
-    String getErrorMessage();
+    Optional<String> getErrorMessage();
 }
index b1375c6bb18b5ba54cc6d4e10ee5711b62a91877..b09401702148620d548e0aabeb0a447c24d2735d 100644 (file)
@@ -1514,8 +1514,8 @@ abstract class SchemaContextEmitter {
             if (!list.isEmpty()) {
                 super.writer.startRangeNode(toRangeString(list));
                 final RangeConstraint first = list.iterator().next();
-                emitErrorMessageNode(first.getErrorMessage());
-                emitErrorAppTagNode(first.getErrorAppTag());
+                first.getErrorMessage().ifPresent(this::emitErrorMessageNode);
+                first.getErrorAppTag().ifPresent(this::emitErrorAppTagNode);
                 emitDescriptionNode(first.getDescription());
                 emitReferenceNode(first.getReference());
                 super.writer.endNode();
@@ -1544,8 +1544,8 @@ abstract class SchemaContextEmitter {
 
         private void emitLength(final LengthConstraint constraint) {
             super.writer.startLengthNode(toLengthString(constraint.getAllowedRanges()));
-            emitErrorMessageNode(constraint.getErrorMessage());
-            emitErrorAppTagNode(constraint.getErrorAppTag());
+            constraint.getErrorMessage().ifPresent(this::emitErrorMessageNode);
+            constraint.getErrorAppTag().ifPresent(this::emitErrorAppTagNode);
             emitDescriptionNode(constraint.getDescription());
             emitReferenceNode(constraint.getReference());
             super.writer.endNode();
@@ -1599,10 +1599,8 @@ abstract class SchemaContextEmitter {
 
         private void emitPatternNode(final PatternConstraint pattern) {
             super.writer.startPatternNode(pattern.getRawRegularExpression());
-            // FIXME: BUG-2444: Optional
-            emitErrorMessageNode(pattern.getErrorMessage());
-            // FIXME: BUG-2444: Optional
-            emitErrorAppTagNode(pattern.getErrorAppTag());
+            pattern.getErrorMessage().ifPresent(this::emitErrorMessageNode);
+            pattern.getErrorAppTag().ifPresent(this::emitErrorAppTagNode);
             emitDescriptionNode(pattern.getDescription());
             emitModifier(pattern.getModifier());
             super.writer.endNode();
@@ -1732,8 +1730,8 @@ abstract class SchemaContextEmitter {
         private void emitMust(@Nullable final MustDefinition mustCondition) {
             if (mustCondition != null && mustCondition.getXpath() != null) {
                 super.writer.startMustNode(mustCondition.getXpath());
-                emitErrorMessageNode(mustCondition.getErrorMessage());
-                emitErrorAppTagNode(mustCondition.getErrorAppTag());
+                mustCondition.getErrorMessage().ifPresent(this::emitErrorMessageNode);
+                mustCondition.getErrorAppTag().ifPresent(this::emitErrorAppTagNode);
                 emitDescriptionNode(mustCondition.getDescription());
                 emitReferenceNode(mustCondition.getReference());
                 super.writer.endNode();
@@ -1742,17 +1740,13 @@ abstract class SchemaContextEmitter {
         }
 
         private void emitErrorMessageNode(@Nullable final String input) {
-            if (input != null && !input.isEmpty()) {
-                super.writer.startErrorMessageNode(input);
-                super.writer.endNode();
-            }
+            super.writer.startErrorMessageNode(input);
+            super.writer.endNode();
         }
 
         private void emitErrorAppTagNode(final String input) {
-            if (input != null && !input.isEmpty()) {
-                super.writer.startErrorAppTagNode(input);
-                super.writer.endNode();
-            }
+            super.writer.startErrorAppTagNode(input);
+            super.writer.endNode();
         }
 
         private void emitMinElementsNode(final Integer min) {
index 742d2d1e0d2e50fdd574d7bc6d12701e1f536cb3..bb10b18389ae4f09244e78e234d15b53c4d4b81d 100644 (file)
@@ -57,13 +57,13 @@ final class PatternConstraintImpl implements PatternConstraint, Immutable {
     }
 
     @Override
-    public String getErrorAppTag() {
-        return errorAppTag;
+    public Optional<String> getErrorAppTag() {
+        return Optional.ofNullable(errorAppTag);
     }
 
     @Override
-    public String getErrorMessage() {
-        return errorMessage;
+    public Optional<String> getErrorMessage() {
+        return Optional.ofNullable(errorMessage);
     }
 
     @Override
index 8ed0ad973bb0936b4654fcc1eb46b67a5d63a83a..a25051a6543784b2298e157639284d9ecca11eb4 100644 (file)
@@ -58,13 +58,13 @@ final class RangeConstraintImpl implements RangeConstraint, Immutable {
     }
 
     @Override
-    public String getErrorAppTag() {
-        return errorAppTag;
+    public Optional<String> getErrorAppTag() {
+        return Optional.ofNullable(errorAppTag);
     }
 
     @Override
-    public String getErrorMessage() {
-        return errorMessage;
+    public Optional<String> getErrorMessage() {
+        return Optional.ofNullable(errorMessage);
     }
 
     @Override
index 75227153d2baaf7a51fa8c3320f5e4941b14c273..216728f9d1099e5e6b23f9a991c16915c8f3ca43 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.yangtools.yang.model.util.type;
 import com.google.common.collect.ImmutableRangeSet;
 import com.google.common.collect.Range;
 import com.google.common.collect.RangeSet;
+import java.util.Optional;
 import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
 
 final class JavaLengthConstraints {
@@ -27,13 +28,13 @@ final class JavaLengthConstraints {
         }
 
         @Override
-        public String getErrorMessage() {
-            return null;
+        public Optional<String> getErrorMessage() {
+            return Optional.empty();
         }
 
         @Override
-        public String getErrorAppTag() {
-            return null;
+        public Optional<String> getErrorAppTag() {
+            return Optional.empty();
         }
 
         @Override
index ba71860a3883348ef1c3993161275665d5447ece..03bd31bdb99fdcc8b70c828ad7dc8ac6c15d0005 100644 (file)
@@ -65,7 +65,8 @@ public abstract class RangeRestrictedTypeBuilder<T extends RangeRestrictedTypeDe
                     ?  ((UnresolvedNumber)min).resolveRange(baseRangeConstraints) : min;
 
                 builder.add(BaseConstraints.newRangeConstraint(rMin, rMax, Optional.ofNullable(c.getDescription()),
-                    Optional.ofNullable(c.getReference()), c.getErrorAppTag(), c.getErrorMessage()));
+                    Optional.ofNullable(c.getReference()), c.getErrorAppTag().orElse(null),
+                    c.getErrorMessage().orElse(null)));
             } else {
                 builder.add(c);
             }
@@ -106,7 +107,8 @@ public abstract class RangeRestrictedTypeBuilder<T extends RangeRestrictedTypeDe
                         c, clazz.getSimpleName()), e);
                 }
                 builder.add(BaseConstraints.newRangeConstraint(min, max, Optional.ofNullable(c.getDescription()),
-                    Optional.ofNullable(c.getReference()), c.getErrorAppTag(), c.getErrorMessage()));
+                    Optional.ofNullable(c.getReference()), c.getErrorAppTag().orElse(null),
+                    c.getErrorMessage().orElse(null)));
             } else {
                 builder.add(c);
             }
index 53ae1ada96a733cafa74891dbf625f91739ca2b3..95e5c3e352a9102f779d8e60ddf27021ee75596e 100644 (file)
@@ -11,6 +11,7 @@ import static java.util.Objects.requireNonNull;
 
 import com.google.common.collect.ImmutableRangeSet;
 import com.google.common.collect.RangeSet;
+import java.util.Optional;
 import org.opendaylight.yangtools.yang.model.api.ConstraintMetaDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
 
@@ -29,12 +30,12 @@ final class ResolvedLengthConstraint implements LengthConstraint {
     }
 
     @Override
-    public String getErrorAppTag() {
+    public Optional<String> getErrorAppTag() {
         return meta.getErrorAppTag();
     }
 
     @Override
-    public String getErrorMessage() {
+    public Optional<String> getErrorMessage() {
         return meta.getErrorMessage();
     }
 
index dadeb1a79367f210698b4b83f9053a089ebdeda3..a2b1f8fdf7ad447ffc120106164c4b8a88abab44 100644 (file)
@@ -35,9 +35,8 @@ public class PatternConstraintImplTest {
         assertNotNull("Object of PatternConstraintImpl shouldn't be null.", patternConstraint);
         assertEquals("Description should be 'test description'.", "test description",
                 patternConstraint.getDescription());
-        assertEquals("Error app tag shouldn't be null.", "invalid-regular-expression",
-                patternConstraint.getErrorAppTag());
-        assertNotNull(patternConstraint.getErrorMessage());
+        assertEquals(Optional.of("invalid-regular-expression"), patternConstraint.getErrorAppTag());
+        assertTrue(patternConstraint.getErrorMessage().isPresent());
         assertEquals("Reference should be equals 'RFC 6020'.", "RFC 6020", patternConstraint.getReference());
         assertEquals("Regular expression should be equls '\\D'.", "\\D", patternConstraint.getRegularExpression());
         assertNotEquals("Hash codes shouldn't be equals.", patternConstraint.hashCode(), patternConstraint2.hashCode());
index 8415ea43f13e65ffc72342cdf4e488b63b1ed7ce..b6a3af42cd91f188b68c7673abedad23231f6276 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 
 import java.util.Objects;
+import java.util.Optional;
 import org.opendaylight.yangtools.yang.model.api.MustDefinition;
 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
 import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement;
@@ -50,13 +51,13 @@ public class MustEffectiveStatementImpl extends DeclaredEffectiveStatementBase<R
     }
 
     @Override
-    public String getErrorAppTag() {
-        return errorAppTag;
+    public Optional<String> getErrorAppTag() {
+        return Optional.ofNullable(errorAppTag);
     }
 
     @Override
-    public String getErrorMessage() {
-        return errorMessage;
+    public Optional<String> getErrorMessage() {
+        return Optional.ofNullable(errorMessage);
     }
 
     @Override
index 35f001c49821fc271251036cf8757449ac9daba8..b936e6a363b19107aa96b6924c273c8470dbc0f4 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type;
 
+import java.util.Optional;
 import org.opendaylight.yangtools.yang.model.api.ConstraintMetaDefinition;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
@@ -87,13 +88,13 @@ abstract class AbstractConstraintEffectiveStatement<A, D extends DeclaredStateme
     }
 
     @Override
-    public final String getErrorAppTag() {
-        return errorAppTag;
+    public final Optional<String> getErrorAppTag() {
+        return Optional.ofNullable(errorAppTag);
     }
 
     @Override
-    public final String getErrorMessage() {
-        return errorMessage;
+    public final Optional<String> getErrorMessage() {
+        return Optional.ofNullable(errorMessage);
     }
 
     abstract A createConstraints(A argument);
index 1df4fe95262371d0e3026cc3ae61299dd30f3616..cb664d969361c91a062ca0a3b819951ef343d437 100644 (file)
@@ -58,13 +58,13 @@ public class PatternConstraintEffectiveImpl implements PatternConstraint {
     }
 
     @Override
-    public String getErrorAppTag() {
-        return errorAppTag;
+    public Optional<String> getErrorAppTag() {
+        return Optional.ofNullable(errorAppTag);
     }
 
     @Override
-    public String getErrorMessage() {
-        return errorMessage;
+    public Optional<String> getErrorMessage() {
+        return Optional.ofNullable(errorMessage);
     }
 
     @Override
index df6331fedc4804c8d943a03c988c03e79e9dfe48..8cfbbba08b4dbe573d478423a5a3b90983920821 100644 (file)
@@ -24,6 +24,7 @@ public class PatternEffectiveStatementImpl extends
         }
 
         return new PatternConstraintEffectiveImpl(argument.getRegularExpression(), argument.getRawRegularExpression(),
-            getDescription(), getReference(), getErrorAppTag(), getErrorMessage(), getModifier());
+            getDescription(), getReference(), getErrorAppTag().orElse(null), getErrorMessage().orElse(null),
+            getModifier());
     }
 }
index 6c599531722ddca8adc056572a6d259114975b0f..89e277d3c49b552b400946e99245fb1db1712aa2 100644 (file)
@@ -48,13 +48,13 @@ public class RangeConstraintEffectiveImpl implements RangeConstraint {
     }
 
     @Override
-    public String getErrorAppTag() {
-        return errorAppTag;
+    public Optional<String> getErrorAppTag() {
+        return Optional.ofNullable(errorAppTag);
     }
 
     @Override
-    public String getErrorMessage() {
-        return errorMessage;
+    public Optional<String> getErrorMessage() {
+        return Optional.ofNullable(errorMessage);
     }
 
     @Override
index 3ffe1d672627bec8e2c00feec70bd1e58086a30a..416f6295f48dedf73a6820942097e912b214eb0f 100644 (file)
@@ -21,6 +21,6 @@ public class RangeEffectiveStatementImpl extends
     @Override
     final RangeConstraint createCustomizedConstraint(final RangeConstraint rangeConstraint) {
         return new RangeConstraintEffectiveImpl(rangeConstraint.getMin(), rangeConstraint.getMax(),
-                getDescription(), getReference(), getErrorAppTag(), getErrorMessage());
+                getDescription(), getReference(), getErrorAppTag().orElse(null), getErrorMessage().orElse(null));
     }
 }
index 6b41d8e0d5afdc1bba21908ffb326e3a04651a18..df387ffb254e4d5b3c6a64341e88857780c4cdcb 100644 (file)
@@ -17,6 +17,7 @@ import static org.opendaylight.yangtools.yang.stmt.StmtTestUtils.sourceForResour
 
 import com.google.common.collect.Range;
 import java.util.List;
+import java.util.Optional;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -406,8 +407,8 @@ public class EffectiveStatementTypeTest {
         assertEquals(255, span.upperEndpoint().intValue());
         assertNull(lengthConstraint.getReference());
         assertNull(lengthConstraint.getDescription());
-        assertNull(lengthConstraint.getErrorMessage());
-        assertNull(lengthConstraint.getErrorAppTag());
+        assertFalse(lengthConstraint.getErrorMessage().isPresent());
+        assertFalse(lengthConstraint.getErrorAppTag().isPresent());
         assertNotNull(lengthConstraint.toString());
         assertNotNull(lengthConstraint.hashCode());
         assertFalse(lengthConstraint.equals(null));
@@ -439,9 +440,9 @@ public class EffectiveStatementTypeTest {
         assertEquals("^[0-9a-fA-F]*$", patternConstraint.getRegularExpression());
         assertNull(patternConstraint.getReference());
         assertNull(patternConstraint.getDescription());
-        assertEquals("Supplied value does not match the regular expression ^[0-9a-fA-F]*$.",
+        assertEquals(Optional.of("Supplied value does not match the regular expression ^[0-9a-fA-F]*$."),
             patternConstraint.getErrorMessage());
-        assertEquals("invalid-regular-expression", patternConstraint.getErrorAppTag());
+        assertEquals(Optional.of("invalid-regular-expression"), patternConstraint.getErrorAppTag());
         assertNotNull(patternConstraint.toString());
         assertNotNull(patternConstraint.hashCode());
         assertFalse(patternConstraint.equals(null));
index f6bc785260e91b81aaa12a284876359afcfe58b8..8ddabcebbdaac655bbb30f65b92b4a624ff336a9 100644 (file)
@@ -17,6 +17,7 @@ import static org.junit.Assert.assertTrue;
 import static org.opendaylight.yangtools.yang.stmt.StmtTestUtils.sourceForResource;
 
 import java.util.Iterator;
+import java.util.Optional;
 import java.util.Set;
 import org.junit.Test;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -57,15 +58,18 @@ public class MustAndWhenStmtTest {
         MustDefinition mustStmt = mustsIterator.next();
         assertThat(mustStmt.getXpath().toString(), anyOf(is("ifType != 'ethernet' or (ifType = 'ethernet' and "
                 + "ifMTU = 1500)"), is("ifType != 'atm' or (ifType = 'atm' and ifMTU <= 17966 and ifMTU >= 64)")));
-        assertThat(mustStmt.getErrorMessage(), anyOf(is("An ethernet MTU must be 1500"), is("An atm MTU must be 64 "
-                + ".. 17966")));
-        assertThat(mustStmt.getErrorAppTag(), anyOf(is("An ethernet error"), is("An atm error")));
+        assertThat(mustStmt.getErrorMessage(), anyOf(is(Optional.of("An ethernet MTU must be 1500")),
+            is(Optional.of("An atm MTU must be 64 .. 17966"))));
+        assertThat(mustStmt.getErrorAppTag(), anyOf(is(Optional.of("An ethernet error")),
+            is(Optional.of("An atm error"))));
         mustStmt = mustsIterator.next();
-        assertThat(mustStmt.getXpath().toString(), anyOf(is("ifType != 'ethernet' or (ifType = 'ethernet' and "
-                + "ifMTU = 1500)"), is("ifType != 'atm' or (ifType = 'atm' and ifMTU <= 17966 and ifMTU >= 64)")));
-        assertThat(mustStmt.getErrorMessage(), anyOf(is("An ethernet MTU must be 1500"), is("An atm MTU must be 64 "
-                + ".. 17966")));
-        assertThat(mustStmt.getErrorAppTag(), anyOf(is("An ethernet error"), is("An atm error")));
+        assertThat(mustStmt.getXpath().toString(), anyOf(
+            is("ifType != 'ethernet' or (ifType = 'ethernet' and ifMTU = 1500)"),
+            is("ifType != 'atm' or (ifType = 'atm' and ifMTU <= 17966 and ifMTU >= 64)")));
+        assertThat(mustStmt.getErrorMessage(), anyOf(is(Optional.of("An ethernet MTU must be 1500")),
+            is(Optional.of("An atm MTU must be 64 .. 17966"))));
+        assertThat(mustStmt.getErrorAppTag(), anyOf(is(Optional.of("An ethernet error")),
+            is(Optional.of("An atm error"))));
     }
 
     @Test
index a0f6230341fa6e7ed283c5ddfc86ccecd9426070..25140285ebd01a48504647498f65fc9947e1770a 100644 (file)
@@ -16,6 +16,7 @@ import static org.junit.Assert.assertTrue;
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 import org.junit.Before;
 import org.junit.Test;
@@ -76,20 +77,18 @@ public class YangParserSimpleTest {
         assertEquals(2, constraints.getMustConstraints().size());
 
         final String must1 = "ifType != 'ethernet' or (ifType = 'ethernet' and ifMTU = 1500)";
-        final String errMsg1 = "An ethernet MTU must be 1500";
         final String must2 = "ifType != 'atm' or (ifType = 'atm' and ifMTU <= 17966 and ifMTU >= 64)";
-        final String errMsg2 = "An atm MTU must be  64 .. 17966";
 
         boolean found1 = false;
         boolean found2 = false;
         for (final MustDefinition must : mustConstraints) {
             if (must1.equals(must.toString())) {
                 found1 = true;
-                assertEquals(errMsg1, must.getErrorMessage());
+                assertEquals(Optional.of("An ethernet MTU must be 1500"), must.getErrorMessage());
             } else if (must2.equals(must.toString())) {
                 found2 = true;
-                assertEquals(errMsg2, must.getErrorMessage());
-                assertEquals("anyxml data error-app-tag", must.getErrorAppTag());
+                assertEquals(Optional.of("An atm MTU must be  64 .. 17966"), must.getErrorMessage());
+                assertEquals(Optional.of("anyxml data error-app-tag"), must.getErrorAppTag());
                 assertEquals("an error occured in data", must.getDescription());
                 assertEquals("data must ref", must.getReference());
             }
@@ -132,11 +131,11 @@ public class YangParserSimpleTest {
         for (final MustDefinition must : mustConstraints) {
             if (must1.equals(must.toString())) {
                 found1 = true;
-                assertEquals(errMsg1, must.getErrorMessage());
+                assertEquals(Optional.of(errMsg1), must.getErrorMessage());
             } else if (must2.equals(must.toString())) {
                 found2 = true;
-                assertNull(must.getErrorMessage());
-                assertNull(must.getErrorAppTag());
+                assertFalse(must.getErrorMessage().isPresent());
+                assertFalse(must.getErrorAppTag().isPresent());
                 assertNull(must.getDescription());
                 assertNull(must.getReference());
             }
index 33db95204366b4a399bf40b5fe76cb8183ababf5..f0ba1294863d336eb353d15c73f61d66e77ec49f 100644 (file)
@@ -12,6 +12,7 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import java.util.List;
+import java.util.Optional;
 import org.junit.Test;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
@@ -59,18 +60,18 @@ public class Bug5200Test {
         assertEquals(1, lengthConstraint.getAllowedRanges().asRanges().size());
         assertEquals(1, patternConstraints.size());
 
-        assertEquals("lenght constraint error-app-tag", lengthConstraint.getErrorAppTag());
-        assertEquals("lenght constraint error-app-message", lengthConstraint.getErrorMessage());
+        assertEquals(Optional.of("lenght constraint error-app-tag"), lengthConstraint.getErrorAppTag());
+        assertEquals(Optional.of("lenght constraint error-app-message"), lengthConstraint.getErrorMessage());
 
         PatternConstraint patternConstraint = patternConstraints.iterator().next();
-        assertEquals("pattern constraint error-app-tag", patternConstraint.getErrorAppTag());
-        assertEquals("pattern constraint error-app-message", patternConstraint.getErrorMessage());
+        assertEquals(Optional.of("pattern constraint error-app-tag"), patternConstraint.getErrorAppTag());
+        assertEquals(Optional.of("pattern constraint error-app-message"), patternConstraint.getErrorMessage());
 
         List<RangeConstraint> rangeConstraints = ((IntegerTypeDefinition) myLeaf2Type).getRangeConstraints();
         assertEquals(1, rangeConstraints.size());
 
         RangeConstraint rangeConstraint = rangeConstraints.iterator().next();
-        assertEquals("range constraint error-app-tag", rangeConstraint.getErrorAppTag());
-        assertEquals("range constraint error-app-message", rangeConstraint.getErrorMessage());
+        assertEquals(Optional.of("range constraint error-app-tag"), rangeConstraint.getErrorAppTag());
+        assertEquals(Optional.of("range constraint error-app-message"), rangeConstraint.getErrorMessage());
     }
 }