@Test public void testInvokeWithUnexpectedReturnType() throws Exception { final String code = "module Cantaloupe\n" + "def self.func\n" + "[]\n" + "end\n" + "end"; instance.load(code); String function = "Cantaloupe::func"; try { Map result = (Map) instance.invoke(function); fail("Shouldn't be able to cast an array to a map"); } catch (ClassCastException e) { // pass } }
@Test public void testMethodExists() throws Exception { final String code = "module Cantaloupe\n" + "def self.func(arg)\n" + "end\n" + "def self.func2\n" + "end\n" + "end"; instance.load(code); assertTrue(instance.methodExists("func")); assertFalse(instance.methodExists("bogus")); }
@Test public void testInvoke() throws Exception { final String code = "module Cantaloupe\n" + "SOMETHING = 1\n" + "def self.func(arg)\n" + "arg\n" + "end\n" + "end"; instance.load(code); final String function = "func"; for (int i = 0; i < 3; i++) { String[] args = {String.valueOf(i)}; String result = (String) instance.invoke(function, args); assertEquals(String.valueOf(i), result); } }
@Test public void testSerializeAsRuby() throws Exception { final List<Object> collection1 = new ArrayList<>(); collection1.add(123); final List<Object> collection2 = new ArrayList<>(); collection2.add(645); collection2.add(collection1); collection2.add("dog's"); // LinkedHashMap preserves order for testability final Map<Object, Object> map1 = new LinkedHashMap<>(); map1.put("key1", 123); final Map<Object, Object> map2 = new LinkedHashMap<>(); map2.put("key1", 645); map2.put(152, map1); map2.put("cat's", "dog's"); map2.put(new File("/dev/null"), "bla"); // object as key final List<Object> args = new ArrayList<>(); args.add(null); // null args.add("it's"); // string args.add(5362); // int args.add(53.62f); // float args.add(true); // boolean args.add(false); // boolean args.add(new ArrayList<>()); // empty collection args.add(collection2); // collection args.add(new HashMap<>()); // empty map args.add(map2); // map args.add(new File("/dev/null")); // Object assertEquals( "[nil, 'it\\'s', 5362, 53.62, true, false, " + "[], [645, [123], 'dog\\'s'], " + "{}, {'key1' => 645, '152' => {'key1' => 123}, 'cat\\'s' => 'dog\\'s', '/dev/null' => 'bla'}, " + "'/dev/null']", instance.serializeAsRuby(args)); }