changeset 479: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");
+    }
 }