Mercurial > people > rkennke > jdk9-shenandoah-final > nashorn
changeset 477:0532397d0732
8012792: print function defined in engine.js does not handle multiple arguments
Reviewed-by: hannesw
author | sundar |
---|---|
date | Mon, 29 Jul 2013 18:07:20 +0530 |
parents | fbd21b00197b |
children | 7d5d24bdb671 0ad00ae4fec6 |
files | src/jdk/nashorn/api/scripting/resources/engine.js test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java |
diffstat | 2 files changed, 44 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/jdk/nashorn/api/scripting/resources/engine.js Fri Jul 26 20:10:47 2013 +0530 +++ b/src/jdk/nashorn/api/scripting/resources/engine.js Mon Jul 29 18:07:20 2013 +0530 @@ -39,12 +39,20 @@ } }); -function print(str) { +function print() { var writer = context.getWriter(); if (! (writer instanceof java.io.PrintWriter)) { writer = new java.io.PrintWriter(writer); } - writer.println(String(str)); + + var buf = new java.lang.StringBuilder(); + for (var i = 0; i < arguments.length; i++) { + if (i != 0) { + buf.append(' '); + } + buf.append(String(arguments[i])); + } + writer.println(buf.toString()); } /**
--- a/test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java Fri Jul 26 20:10:47 2013 +0530 +++ b/test/src/jdk/nashorn/api/scripting/ScriptEngineTest.java Mon Jul 29 18:07:20 2013 +0530 @@ -1220,4 +1220,38 @@ Assert.assertEquals(itf.test1(42, "a", "b"), "i == 42, strings instanceof java.lang.String[] == true, strings == [a, b]"); Assert.assertEquals(itf.test2(44, "c", "d", "e"), "arguments[0] == 44, arguments[1] instanceof java.lang.String[] == true, arguments[1] == [c, d, e]"); } + + @Test + // check that print function prints arg followed by newline char + public void printTest() { + final ScriptEngineManager m = new ScriptEngineManager(); + final ScriptEngine e = m.getEngineByName("nashorn"); + final StringWriter sw = new StringWriter(); + e.getContext().setWriter(sw); + try { + e.eval("print('hello')"); + } catch (final Throwable t) { + t.printStackTrace(); + fail(t.getMessage()); + } + + assertEquals(sw.toString(), "hello\n"); + } + + @Test + // check that print prints all arguments (more than one) + public void printManyTest() { + final ScriptEngineManager m = new ScriptEngineManager(); + final ScriptEngine e = m.getEngineByName("nashorn"); + final StringWriter sw = new StringWriter(); + e.getContext().setWriter(sw); + try { + e.eval("print(34, true, 'hello')"); + } catch (final Throwable t) { + t.printStackTrace(); + fail(t.getMessage()); + } + + assertEquals(sw.toString(), "34 true hello\n"); + } }