logging and unit test updates
[debian/openrocket] / test / net / sf / openrocket / file / rocksim / RocksimTestBase.java
diff --git a/test/net/sf/openrocket/file/rocksim/RocksimTestBase.java b/test/net/sf/openrocket/file/rocksim/RocksimTestBase.java
new file mode 100644 (file)
index 0000000..394d385
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+ * BaseRocksimTest.java
+ */
+package net.sf.openrocket.file.rocksim;
+
+import junit.framework.TestCase;
+
+import java.lang.reflect.Field;
+
+import net.sf.openrocket.rocketcomponent.RocketComponent;
+
+/**
+ * A base class for the Rocksim tests.  Includes code from the junitx.addons project.
+ */
+public abstract class RocksimTestBase extends TestCase {
+
+    /**
+     * Test constructor.
+     *
+     * @param name the name of the test to run.
+     */
+    public RocksimTestBase(String name) {
+        super(name);
+    }
+    
+    public void assertContains (RocketComponent child, RocketComponent[] components) {
+        for (int i = 0; i < components.length; i++) {
+            if (components[i].equals(child)) {
+                return;
+            }
+        }
+        fail("Component array did not contain child.");
+    }
+    
+    /**
+     * Returns the value of the field on the specified object.  The name
+     * parameter is a <code>String</code> specifying the simple name of the
+     * desired field.<p>
+     *
+     * The object is first searched for any matching field.  If no matching
+     * field is found, the superclasses are recursively searched.
+     *
+     * @exception NoSuchFieldException if a field with the specified name is
+     * not found.
+     */
+    public static Object getField(Object object,
+                                  String name)
+            throws NoSuchFieldException {
+        if (object == null) {
+            throw new IllegalArgumentException("Invalid null object argument");
+        }
+        for (Class cls = object.getClass();
+             cls != null;
+             cls = cls.getSuperclass()) {
+            try {
+                Field field = cls.getDeclaredField(name);
+                field.setAccessible(true);
+                return field.get(object);
+            } catch (Exception ex) {
+                /* in case of an exception, we will throw a new
+                 * NoSuchFieldException object */
+                ;
+            }
+        }
+        throw new NoSuchFieldException("Could get value for field " +
+                object.getClass().getName() + "." + name);
+    }
+
+    /**
+     * Returns the value of the field on the specified class.  The name
+     * parameter is a <code>String</code> specifying the simple name of the
+     * desired field.<p>
+     *
+     * The class is first searched for any matching field.  If no matching
+     * field is found, the superclasses are recursively searched.
+     *
+     * @exception NoSuchFieldException if a field with the specified name is
+     * not found.
+     */
+    public static Object getField(Class cls,
+                                  String name)
+            throws NoSuchFieldException {
+        if (cls == null) {
+            throw new IllegalArgumentException("Invalid null cls argument");
+        }
+        Class base = cls;
+        while (base != null) {
+            try {
+                Field field = base.getDeclaredField(name);
+                field.setAccessible(true);
+                return field.get(base);
+            } catch (Exception ex) {
+                /* in case of an exception, we will throw a new
+                 * NoSuchFieldException object */
+                ;
+            }
+            base = base.getSuperclass();
+        }
+        throw new NoSuchFieldException("Could get value for static field " +
+                cls.getName() + "." + name);
+    }
+
+
+}