(solved) javax.script.ScriptException: sun.org.mozilla.javascript.EvaluatorException: Cannot convert true to boolean

=== を使っていてちょっとはまった。

/*
 * jrunscript -q => Language ECMAScript 1.7 implemention "Rhino" Rhino 1.7 release 3 2012 05 18
 */
@Test
public void test_Rhino_boolean() throws Exception{
    System.out.println(System.getProperty("java.runtime.name"));
    //=> OpenJDK Runtime Environment
    System.out.println(System.getProperty("java.runtime.version"));
    //=> 1.7.0_25-b30

    ScriptEngineManager factory = new ScriptEngineManager();
    ScriptEngine engine = factory.getEngineByName("JavaScript");

    Object object = true;
    engine.put("object", object);

    Map<String, Object> map = new HashMap<>();
    map.put("object", true);
    engine.put("map", map);

    String code = lines(""
        , " importClass(Packages.foo.Bar); "
        , " println('----'); "
        , " println(object ==  true); "  //=> true
        , " println(object === true); "  //=> true
        , " println(object ==  false); " //=> false
        , " println(object === false); " //=> false
        , " println('----'); "
        , " println('object='+object); " //=> object=true
        , " println(typeof object); "    //=> boolean
        , " println(object.class);"      //=> undefined

        , " println('----'); "
        , " println(map.get('object') ==  true); "  //=> true
        , " println(map.get('object') === true); "  //=> false ... !
        , " println(map.get('object') ==  false); " //=> false
        , " println(map.get('object') === false); " //=> false
        , " println('----'); "
        , " println(map); "                         //=> {object=true}
        , " println(typeof map.get('object')); "    //=> object
        , " println(map.get('object').class);"      //=> class java.lang.Boolean

        , " foo = new Bar(); "
        , " foo.value = object; "
        //=> success
        , " foo.value = map.get('object'); "
        //=> fail: javax.script.ScriptException: sun.org.mozilla.javascript.EvaluatorException: Cannot convert true to boolean (<Unknown source>#23) in <Unknown source> at line number 23
    );

    engine.eval(code);
}

private String lines(String... strings) {
    String text = "";
    for (String it : strings) {
        text += it + "\n";
    }
    return text;
}