Refactoring in the unit test utility framework:
* Moved unit test utilities to the onlab-junit package under utils/junit
- ImmutableClassChecker
- TestUtils and TestUtilsTest
* Added/ported unit test utilities from the older code
- UtilityClassChecker and UtilityClassCheckerTest
- ImmutableClassCheckerTest
* Updated/fixed some of the pom.xml files in the context of the
onlab-junit package:
- Added <scope>test</scope>
- Replaced hard-coded "1.0.0-SNAPSHOT" with "${project.version}"
Change-Id: Ie5f51ba401ca1748340f38848ab6bfc251964adc
diff --git a/core/api/src/test/java/org/onlab/onos/net/intent/ImmutableClassChecker.java b/core/api/src/test/java/org/onlab/onos/net/intent/ImmutableClassChecker.java
deleted file mode 100644
index 0e63af9..0000000
--- a/core/api/src/test/java/org/onlab/onos/net/intent/ImmutableClassChecker.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package org.onlab.onos.net.intent;
-//TODO is this the right package?
-
-import org.hamcrest.Description;
-import org.hamcrest.StringDescription;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-
-/**
- * Hamcrest style class for verifying that a class follows the
- * accepted rules for immutable classes.
- *
- * The rules that are enforced for immutable classes:
- * - the class must be declared final
- * - all data members of the class must be declared private and final
- * - the class must not define any setter methods
- */
-
-public class ImmutableClassChecker {
-
- private String failureReason = "";
-
- /**
- * Method to determine if a given class is a properly specified
- * immutable class.
- *
- * @param clazz the class to check
- * @return true if the given class is a properly specified immutable class.
- */
- private boolean isImmutableClass(Class<?> clazz) {
- // class must be declared final
- if (!Modifier.isFinal(clazz.getModifiers())) {
- failureReason = "a class that is not final";
- return false;
- }
-
- // class must have only final and private data members
- for (final Field field : clazz.getDeclaredFields()) {
- if (field.getName().startsWith("__cobertura")) {
- // cobertura sticks these fields into classes - ignore them
- continue;
- }
- if (!Modifier.isFinal(field.getModifiers())) {
- failureReason = "a field named '" + field.getName() +
- "' that is not final";
- return false;
- }
- if (!Modifier.isPrivate(field.getModifiers())) {
- //
- // NOTE: We relax the recommended rules for defining immutable
- // objects and allow "static final" fields that are not
- // private. The "final" check was already done above so we
- // don't repeat it here.
- //
- if (!Modifier.isStatic(field.getModifiers())) {
- failureReason = "a field named '" + field.getName() +
- "' that is not private and is not static";
- return false;
- }
- }
- }
-
- // class must not define any setters
- for (final Method method : clazz.getMethods()) {
- if (method.getDeclaringClass().equals(clazz)) {
- if (method.getName().startsWith("set")) {
- failureReason = "a class with a setter named '" + method.getName() + "'";
- return false;
- }
- }
- }
-
- return true;
- }
-
- /**
- * Describe why an error was reported. Uses Hamcrest style Description
- * interfaces.
- *
- * @param description the Description object to use for reporting the
- * mismatch
- */
- public void describeMismatch(Description description) {
- description.appendText(failureReason);
- }
-
- /**
- * Describe the source object that caused an error, using a Hamcrest
- * Matcher style interface. In this case, it always returns
- * that we are looking for a properly defined utility class.
- *
- * @param description the Description object to use to report the "to"
- * object
- */
- public void describeTo(Description description) {
- description.appendText("a properly defined immutable class");
- }
-
- /**
- * Assert that the given class adheres to the utility class rules.
- *
- * @param clazz the class to check
- *
- * @throws java.lang.AssertionError if the class is not a valid
- * utility class
- */
- public static void assertThatClassIsImmutable(Class<?> clazz) {
- final ImmutableClassChecker checker = new ImmutableClassChecker();
- if (!checker.isImmutableClass(clazz)) {
- final Description toDescription = new StringDescription();
- final Description mismatchDescription = new StringDescription();
-
- checker.describeTo(toDescription);
- checker.describeMismatch(mismatchDescription);
- final String reason =
- "\n" +
- "Expected: is \"" + toDescription.toString() + "\"\n" +
- " but : was \"" + mismatchDescription.toString() + "\"";
-
- throw new AssertionError(reason);
- }
- }
-}
diff --git a/core/api/src/test/java/org/onlab/onos/net/intent/IntentIdTest.java b/core/api/src/test/java/org/onlab/onos/net/intent/IntentIdTest.java
index 471e397..3e21187 100644
--- a/core/api/src/test/java/org/onlab/onos/net/intent/IntentIdTest.java
+++ b/core/api/src/test/java/org/onlab/onos/net/intent/IntentIdTest.java
@@ -6,6 +6,7 @@
import static org.hamcrest.Matchers.not;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
+import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
/**
* This class tests the immutability, equality, and non-equality of
@@ -17,7 +18,7 @@
*/
@Test
public void intentIdFollowsGuidelineForImmutableObject() {
- ImmutableClassChecker.assertThatClassIsImmutable(IntentId.class);
+ assertThatClassIsImmutable(IntentId.class);
}
/**
diff --git a/core/net/src/test/java/org/onlab/onos/net/intent/TestHostToHostIntent.java b/core/net/src/test/java/org/onlab/onos/net/intent/TestHostToHostIntent.java
index 4ebee73..2b56e88 100644
--- a/core/net/src/test/java/org/onlab/onos/net/intent/TestHostToHostIntent.java
+++ b/core/net/src/test/java/org/onlab/onos/net/intent/TestHostToHostIntent.java
@@ -11,6 +11,7 @@
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
+import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
import static org.onlab.onos.net.NetTestTools.hid;
/**
@@ -104,6 +105,6 @@
*/
@Test
public void checkImmutability() {
- ImmutableClassChecker.assertThatClassIsImmutable(HostToHostIntent.class);
+ assertThatClassIsImmutable(HostToHostIntent.class);
}
}
diff --git a/core/net/src/test/java/org/onlab/onos/net/intent/TestLinkCollectionIntent.java b/core/net/src/test/java/org/onlab/onos/net/intent/TestLinkCollectionIntent.java
index 65aa71f..42b5b28 100644
--- a/core/net/src/test/java/org/onlab/onos/net/intent/TestLinkCollectionIntent.java
+++ b/core/net/src/test/java/org/onlab/onos/net/intent/TestLinkCollectionIntent.java
@@ -4,6 +4,7 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
+import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
import static org.onlab.onos.net.NetTestTools.link;
import java.util.HashSet;
@@ -154,6 +155,6 @@
*/
@Test
public void checkImmutability() {
- ImmutableClassChecker.assertThatClassIsImmutable(LinkCollectionIntent.class);
+ assertThatClassIsImmutable(LinkCollectionIntent.class);
}
}
diff --git a/core/net/src/test/java/org/onlab/onos/net/intent/TestMultiPointToSinglePointIntent.java b/core/net/src/test/java/org/onlab/onos/net/intent/TestMultiPointToSinglePointIntent.java
index 09dfcb2..0e4f706 100644
--- a/core/net/src/test/java/org/onlab/onos/net/intent/TestMultiPointToSinglePointIntent.java
+++ b/core/net/src/test/java/org/onlab/onos/net/intent/TestMultiPointToSinglePointIntent.java
@@ -15,6 +15,7 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
+import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
import static org.onlab.onos.net.NetTestTools.connectPoint;
/**
@@ -135,7 +136,6 @@
*/
@Test
public void checkImmutability() {
- ImmutableClassChecker.
- assertThatClassIsImmutable(MultiPointToSinglePointIntent.class);
+ assertThatClassIsImmutable(MultiPointToSinglePointIntent.class);
}
}
diff --git a/core/pom.xml b/core/pom.xml
index c0f74cf..fc8216f 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -35,6 +35,7 @@
<dependency>
<groupId>org.onlab.onos</groupId>
<artifactId>onlab-junit</artifactId>
+ <scope>test</scope>
</dependency>
</dependencies>