Fix REPL for named functions
authorRyan Dahl <ry@tinyclouds.org>
Mon, 3 Jan 2011 02:08:08 +0000 (18:08 -0800)
committerRyan Dahl <ry@tinyclouds.org>
Mon, 3 Jan 2011 02:27:14 +0000 (18:27 -0800)
add some tests.

lib/repl.js
test/simple/test-repl.js

index aef0e9e..c425603 100644 (file)
@@ -115,12 +115,17 @@ function REPLServer(prompt, stream) {
           // and statements e.g.
           //  'for (var i = 0; i < 10; i++) console.log(i);'
 
-          var ret;
+          var ret, success = false;
           try {
             // First we attempt to eval as expression with parens.
             // This catches '{a : 1}' properly.
             ret = vm.runInContext('(' + self.bufferedCommand + ')', context, 'repl');
+            if (typeof ret !== 'function') success = true;
           } catch (e)  {
+            success = false;
+          }
+
+          if (!success) {
             // Now as statement without parens.
             ret = vm.runInContext(self.bufferedCommand, context, 'repl');
           }
index 22b41ad..de839f5 100644 (file)
@@ -97,7 +97,26 @@ function error_test() {
     // invalid input to JSON.parse error is special case of syntax error,
     // should throw
     { client: client_unix, send: 'JSON.parse(\'{invalid: \\\'json\\\'}\');',
-      expect: /^SyntaxError: Unexpected token ILLEGAL/ }
+      expect: /^SyntaxError: Unexpected token ILLEGAL/ },
+    // Named functions can be used:
+    { client: client_unix, send: 'function blah() { return 1; }',
+      expect: prompt_unix },
+    { client: client_unix, send: 'blah()',
+      expect: "1\n" + prompt_unix },
+    // Multiline object
+    { client: client_unix, send: '{ a: ',
+      expect: prompt_multiline },
+    { client: client_unix, send: '1 }',
+      expect: "{ a: 1 }" },
+    // Multiline anonymous function with comment
+    { client: client_unix, send: '(function () {',
+      expect: prompt_multiline },
+    { client: client_unix, send: '// blah',
+      expect: prompt_multiline },
+    { client: client_unix, send: 'return 1;',
+      expect: prompt_multiline },
+    { client: client_unix, send: '})()',
+      expect: "1" },
   ]);
 }