Bug 13003 fixed: EOJ: add a converter to handle string to enum 69/12969/3
Calixte DENIZET [Mon, 21 Oct 2013 10:34:15 +0000 (12:34 +0200)]
Change-Id: I7a5a753f75e85753977a60fa97f2358f0e3b8804

scilab/CHANGES_5.5.X
scilab/modules/external_objects_java/src/java/org/scilab/modules/external_objects_java/FunctionArguments.java
scilab/modules/external_objects_java/tests/unit_tests/enum.dia.ref [new file with mode: 0644]
scilab/modules/external_objects_java/tests/unit_tests/enum.tst [new file with mode: 0644]

index ac38871..c751cc6 100644 (file)
@@ -38,6 +38,8 @@ Scilab Bug Fixes
 
 * Bug #12979 fixed - exportUI did not work with vectorial export.
 
+* Bug #13003 fixed - EOJ: add a converter to handle string to enum.
+
 * Bug #13004 fixed - Debug infos were printed on an error with eoj.
 
 
index f5511ad..12c303e 100644 (file)
@@ -87,6 +87,19 @@ public final class FunctionArguments {
                 return from.isArray() && to.isAssignableFrom(ArrayList.class);
             }
         });
+
+        // Converter to convert a String to a Enum
+        registerConverter(new Converter() {
+            @Override
+            public Object convert(Object original, Class<?> to) {
+                return Enum.valueOf((Class) to, (String) original);
+            }
+
+            @Override
+            public boolean canConvert(Class<?> from, Class<?> to) {
+                return String.class.isAssignableFrom(from) && to.isEnum();
+            }
+        });
     }
 
     /**
diff --git a/scilab/modules/external_objects_java/tests/unit_tests/enum.dia.ref b/scilab/modules/external_objects_java/tests/unit_tests/enum.dia.ref
new file mode 100644 (file)
index 0000000..e67475c
--- /dev/null
@@ -0,0 +1,12 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Calixte DENIZET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+c = jcompile("Test", ["public class Test {";
+"public enum foo { ONE, TWO, THREE; }";
+"public static double bar(foo x) { return (double) x.ordinal(); }}"]); 
+assert_checkequal(c.bar("ONE"), 0);
+assert_checkequal(c.bar("TWO"), 1);
+assert_checkequal(c.bar("THREE"), 2);
diff --git a/scilab/modules/external_objects_java/tests/unit_tests/enum.tst b/scilab/modules/external_objects_java/tests/unit_tests/enum.tst
new file mode 100644 (file)
index 0000000..4451c11
--- /dev/null
@@ -0,0 +1,14 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Calixte DENIZET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+c = jcompile("Test", ["public class Test {";
+"public enum foo { ONE, TWO, THREE; }";
+"public static double bar(foo x) { return (double) x.ordinal(); }}"]);
+
+assert_checkequal(c.bar("ONE"), 0);
+assert_checkequal(c.bar("TWO"), 1);
+assert_checkequal(c.bar("THREE"), 2);