From a14b5f57d5a17f88328d21e98ef47cde59f4fdfd Mon Sep 17 00:00:00 2001
From: Matthew Hague <matthew.hague@rhul.ac.uk>
Date: Wed, 11 Nov 2020 13:28:20 +0000
Subject: [PATCH] Support passing null parameters to code tester call

---
 .../uk/ac/rhul/cs/javatester/CodeTester.java   | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/src/main/java/uk/ac/rhul/cs/javatester/CodeTester.java b/src/main/java/uk/ac/rhul/cs/javatester/CodeTester.java
index 53f9b16..d6968a9 100644
--- a/src/main/java/uk/ac/rhul/cs/javatester/CodeTester.java
+++ b/src/main/java/uk/ac/rhul/cs/javatester/CodeTester.java
@@ -255,9 +255,11 @@ public class CodeTester {
                                String className,
                                Object... params) throws
                   BaseTester.FailedTestException {
-        Class<?>[] parameterTypes
-            = Stream.of(params).map(p -> p.getClass())
-                               .toArray(Class<?>[]::new);
+
+        Class<?>[] parameterTypes = Stream.of(params).map(
+            p -> p != null ? p.getClass() : NullType.class
+        ).toArray(Class<?>[]::new);
+
         try {
             Class<?> klass = loadClass(className);
             Constructor<?> constructor
@@ -637,7 +639,10 @@ public class CodeTester {
      * dependencies..
      */
     private boolean isAssignable(Class<?> k1, Class<?> k2) {
-        return boxClass(k1).isAssignableFrom(boxClass(k2));
+        if (k2 == NullType.class)
+            return true;
+        else
+            return boxClass(k1).isAssignableFrom(boxClass(k2));
     }
 
     /**
@@ -994,4 +999,9 @@ public class CodeTester {
         else
             return logIdealizer.apply(output);
     }
+
+    /**
+     * A class to represent a null argument which can be any object type
+     */
+    private class NullType { }
 }
-- 
GitLab