* Bug #14978 fixed: input() badly managed entered 'x' & the returning prompt 15/19015/5
Samuel GOUGEON [Wed, 1 Feb 2017 00:01:20 +0000 (01:01 +0100)]
 * http://bugzilla.scilab.org/14978

Change-Id: Icc7a60ebe35cac9390932f030e70a0d605d20f09

scilab/CHANGES.md
scilab/modules/io/macros/input.sci
scilab/modules/io/tests/nonreg_tests/bug_14978.tst [new file with mode: 0644]

index abb87bd..d64e12b 100644 (file)
@@ -455,6 +455,7 @@ Bug Fixes
 * [#14956](http://bugzilla.scilab.org/show_bug.cgi?id=14956): `clf("reset")` forgot resetting the `immediate_drawing`, `resize`, `resizefcn`, `closerequestfcn`, `toolbar_visible`, `menubar_visible`, `infobar_visible`, `default_axes`, and `icon` figure properties.
 * [#14965](http://bugzilla.scilab.org/show_bug.cgi?id=14965): `getPreferencesValue` could not read a tag having multiple occurrences and did not accept the path to the preferences file.
 * [#14976](http://bugzilla.scilab.org/show_bug.cgi?id=14976): `asciimat(colNum)` concatenated rows when colNum has a single column of ascii codes. With UTF-8 chars, `asciimat(asciimat("àéïôù"))` yielded an error.
+* [#14978](http://bugzilla.scilab.org/show_bug.cgi?id=14978): `input(message)` interpreted an entered `x` as a literal string, and exited with the new prompt on the same line.
 
 ### Bugs fixed in 6.0.0 beta-2 and earlier 6.0.0 pre-releases:
 
index 4c1a271..da5c492 100644 (file)
 // For more information, see the COPYING file which you should have received
 // along with this program.
 
-
 function [x] = input(msg, flag)
 
     [lhs,rhs] = argn(0);
 
     if rhs <> 1 & rhs <> 2 then
-        error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n"), "input", 1, 2));
+        msg = _("%s: Wrong number of input arguments: %d to %d expected.\n")
+        error(msprintf(msg, "input", 1, 2));
     end
 
     if type(msg) <> 10 then
-        error(msprintf(gettext("%s: Wrong type for input argument #%d: String expected.\n"),"input",1));
+        msg = _("%s: Wrong type for input argument #%d: String expected.\n")
+        error(msprintf(msg, "input",1));
     end
 
     if size(msg, "*") <> 1 then
-        error(msprintf(gettext("%s: Wrong size for input argument #%d: string expected.\n"),"input",1));
+        msg = _("%s: Wrong size for input argument #%d: string expected.\n")
+        error(msprintf(msg, "input",1));
     end
 
     // a tricky way to get all ascii codes  sequences
@@ -35,15 +37,18 @@ function [x] = input(msg, flag)
 
     if argn(2) == 2 then
         if type(flag) <> 10 then
-            error(msprintf(gettext("%s: Wrong type for input argument #%d: String expected.\n"),"input",2));
+            msg = _("%s: Wrong type for input argument #%d: String expected.\n")
+            error(msprintf(msg, "input",2));
         end
 
         if size(flag, "*") <> 1 then
-            error(msprintf(gettext("%s: Wrong size for input argument #%d: string expected.\n"),"input",2));
+            msg = _("%s: Wrong size for input argument #%d: string expected.\n")
+            error(msprintf(msg, "input",2));
         end
 
         if (flag <> "s" & flag <> "string") then
-            error(msprintf(gettext("%s: Wrong value for input argument #%d: ''%s'' value expected.\n"),"input",2,"string"));
+            msg = _("%s: Wrong value for input argument #%d: ''%s'' value expected.\n")
+            error(msprintf(msg, "input", 2, "string"));
         end
 
         prompt("");
@@ -62,20 +67,20 @@ function [x] = input(msg, flag)
         while %t
             prompt("");
             mprintf(msg);
-            x = mscanf(fmt);
+            __#x#__ = mscanf(fmt);
 
             currentpromptAfter = prompt();
             // bug 5513
             // we had change prompt during exec of input
             // we recall input
             if (currentpromptAfter <> currentprompt) then
-                x = string(input(msg));
+                __#x#__ = string(input(msg));
             end
 
-            if (length(x) == 0) | (x == " ") then
-                x = "[]";
+            if (length(__#x#__) == 0) | (__#x#__ == " ") then
+                __#x#__ = "[]";
             end
-            ierr = execstr("x=" + x,"errcatch");
+            ierr = execstr("x=" + __#x#__,"errcatch");
             if ierr == 0 then
                 break;
             end
@@ -84,4 +89,5 @@ function [x] = input(msg, flag)
 
     end
     prompt(currentprompt);
+    mprintf("\n")
 endfunction
diff --git a/scilab/modules/io/tests/nonreg_tests/bug_14978.tst b/scilab/modules/io/tests/nonreg_tests/bug_14978.tst
new file mode 100644 (file)
index 0000000..a3f2e7c
--- /dev/null
@@ -0,0 +1,29 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2017 - Samuel GOUGEON
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// <-- INTERACTIVE TEST -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14978
+//
+// <-- Short Description -->
+// input(message) never interpreted 'x' as an existing variable.
+// input(message) displayed the returning prompt on the same line as the input
+
+x = 20;
+z = input("Message. Please enter ''x'':")
+// Then enter 'x' (with not quote) and press <enter>
+// It should display the following:
+
+--> z = input("Message. Please enter ''x'':")
+Message. Please enter 'x':
+x
+ z  = 
+
+   20.
+
+// Sometimes we are prompted several times: http://bugzilla.scilab.org/14376