Fix ReactorStmtCtx.calculateParentRefcount()
[yangtools.git] / parser / yang-parser-rfc7950 / src / test / java / org / opendaylight / yangtools / yang / stmt / AbstractYangTest.java
index 64e7a986dc30ee58ae7a2636507af9de06a0405a..080f0b4db0a111675f0398e0e87e292dfc607b26 100644 (file)
@@ -7,15 +7,22 @@
  */
 package org.opendaylight.yangtools.yang.stmt;
 
-import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertInstanceOf;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
+import com.google.common.base.Throwables;
+import java.util.List;
+import java.util.Set;
 import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 import org.hamcrest.Matcher;
+import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
+import org.opendaylight.yangtools.yang.model.ri.type.InvalidBitDefinitionException;
+import org.opendaylight.yangtools.yang.model.ri.type.InvalidEnumDefinitionException;
 import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException;
 import org.opendaylight.yangtools.yang.parser.spi.meta.InvalidSubstatementException;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SomeModifiersUnresolvedException;
@@ -25,27 +32,48 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
  * Abstract base class containing useful utilities and assertions.
  */
 public abstract class AbstractYangTest {
-    public static @NonNull EffectiveModelContext assertEffectiveModel(final String... yangResourceName)
-            throws Exception {
-        final var ret = TestUtils.parseYangSource(yangResourceName);
+    public static @NonNull EffectiveModelContext assertEffectiveModel(final String... yangResourceName) {
+        return assertEffectiveModel(List.of(yangResourceName), null);
+    }
+
+    @SuppressWarnings("checkstyle:illegalCatch")
+    public static @NonNull EffectiveModelContext assertEffectiveModel(final List<String> yangResourceName,
+        final @Nullable Set<QName> supportedFeatures) {
+        final EffectiveModelContext ret;
+        try {
+            ret = TestUtils.parseYangSource(yangResourceName, supportedFeatures);
+        } catch (Exception e) {
+            Throwables.throwIfUnchecked(e);
+            throw new AssertionError("Failed to assemble effective model", e);
+        }
         assertNotNull(ret);
         return ret;
     }
 
-    public static @NonNull EffectiveModelContext assertEffectiveModelDir(final String resourceDirName)
-            throws Exception {
-        final var ret =  TestUtils.loadModules(resourceDirName);
+    public static @NonNull EffectiveModelContext assertEffectiveModelDir(final String resourceDirName) {
+        return assertEffectiveModelDir(resourceDirName, null);
+    }
+
+    @SuppressWarnings("checkstyle:illegalCatch")
+    public static @NonNull EffectiveModelContext assertEffectiveModelDir(final String resourceDirName,
+            final @Nullable Set<QName> supportedFeatures) {
+        final EffectiveModelContext ret;
+        try {
+            ret = TestUtils.loadModules(resourceDirName, supportedFeatures);
+        } catch (Exception e) {
+            Throwables.throwIfUnchecked(e);
+            throw new AssertionError("Failed to assemble effective model of " + resourceDirName, e);
+        }
         assertNotNull(ret);
         return ret;
     }
 
-    public static <E extends SourceException> @NonNull E assertException(final Class<E> cause,
+    public static <E extends RuntimeException> @NonNull E assertException(final Class<E> cause,
             final String... yangResourceName) {
         final var ex = assertThrows(SomeModifiersUnresolvedException.class,
             () -> TestUtils.parseYangSource(yangResourceName));
         final var actual = ex.getCause();
-        assertThat(actual, instanceOf(cause));
-        return cause.cast(actual);
+        return assertInstanceOf(cause, actual);
     }
 
     public static <E extends SourceException> @NonNull E assertException(final Class<E> cause,
@@ -55,13 +83,19 @@ public abstract class AbstractYangTest {
         return ret;
     }
 
+    public static <E extends IllegalArgumentException> @NonNull E assertArgumentException(final Class<E> cause,
+            final Matcher<String> matcher, final String... yangResourceName) {
+        final var ret = assertException(cause, yangResourceName);
+        assertThat(ret.getMessage(), matcher);
+        return ret;
+    }
+
     public static <E extends SourceException> @NonNull E assertExceptionDir(final String yangResourceName,
             final Class<E> cause) {
         final var ex = assertThrows(SomeModifiersUnresolvedException.class,
             () -> TestUtils.loadModules(yangResourceName));
         final var actual = ex.getCause();
-        assertThat(actual, instanceOf(cause));
-        return cause.cast(actual);
+        return assertInstanceOf(cause, actual);
     }
 
     public static <E extends SourceException> @NonNull E assertExceptionDir(final String yangResourceName,
@@ -91,6 +125,16 @@ public abstract class AbstractYangTest {
         return assertExceptionDir(yangResourceName, InvalidSubstatementException.class, matcher);
     }
 
+    public static @NonNull InvalidEnumDefinitionException assertInvalidEnumDefinitionException(
+            final Matcher<String> matcher, final String... yangResourceName) {
+        return assertArgumentException(InvalidEnumDefinitionException.class, matcher, yangResourceName);
+    }
+
+    public static @NonNull InvalidBitDefinitionException assertInvalidBitDefinitionException(
+            final Matcher<String> matcher, final String... yangResourceName) {
+        return assertArgumentException(InvalidBitDefinitionException.class, matcher, yangResourceName);
+    }
+
     public static @NonNull SourceException assertSourceException(final Matcher<String> matcher,
             final String... yangResourceName) {
         final var ret = assertException(SourceException.class, matcher, yangResourceName);