[bug_14225] Scilab binary return 1 when an error occured in scilab before exit. Retur... 36/17436/8 6.0.0-alpha-2
Cedric Delamarre [Fri, 6 Nov 2015 16:03:29 +0000 (17:03 +0100)]
./bin/scilab-cli -e "1+1;" -quit;echo $?
./bin/scilab-cli -e "1+1; exit(12)" -quit;echo $?
./bin/scilab-cli -e "error(\"blabla\");" -quit;echo $?
./bin/scilab-cli -e "error(\"blabla\");exit(12)" -quit;echo $?
./bin/scilab-cli -e "try, error(\"blabla\"); catch, disp(lasterror()),end" -quit;echo $?
./bin/scilab-cli -e "try, error(\"blabla\"); catch,disp(lasterror());exit(12), end" -quit;echo $?

test_run core bug_14225

Change-Id: I3af6be334934d42a1c0677db2a8e62e8d63d8eae

scilab/CHANGES_6.0.X
scilab/modules/core/includes/runner.hxx
scilab/modules/core/src/cpp/InitScilab.cpp
scilab/modules/core/src/cpp/runner.cpp
scilab/modules/core/tests/nonreg_tests/bug_14225.dia.ref [new file with mode: 0644]
scilab/modules/core/tests/nonreg_tests/bug_14225.tst [new file with mode: 0644]

index 0337452..e254087 100644 (file)
@@ -185,6 +185,8 @@ Bug Fixes
 
 * Bug #14223 fixed - det returned an error when it is used with a singular matrix.
 
+* Bug #14225 fixed - command-line option "-quit" should set the processs Exit status
+
 * Bug #14232 fixed - Typos in Xcos.
 
 
index a2ee706..587a9f8 100644 (file)
@@ -71,7 +71,7 @@ private :
 class StaticRunner
 {
 public:
-    static void launch(void);
+    static int launch(void);
     static void setRunner(Runner* _RunMe);
     static Runner* getRunner(void);
     static bool isRunnerAvailable(void);
index 75d81e2..8fb71f0 100644 (file)
@@ -829,6 +829,7 @@ static int interactiveMain(ScilabEngineInfo* _pSEI)
     ThreadManagement::SetThreadKey( __GetCurrentThreadKey(), threadKeyCommand, threadKeyConsole);
 #endif // DEBUG_THREAD
 
+    int iRet = 0;
     do
     {
         // wait for available runner
@@ -836,21 +837,24 @@ static int interactiveMain(ScilabEngineInfo* _pSEI)
 
         try
         {
-            StaticRunner::launch();
+            iRet = StaticRunner::launch();
         }
         catch (const ast::InternalAbort& /*ia*/)
         {
             // go out when exit/quit is called
+            iRet = ConfigVariable::getExitStatus();
         }
-        catch (const ast::RecursionException& /*ia*/)
+        catch (const ast::RecursionException& /*re*/)
         {
             // go out when exit/quit is called
+            iRet = 1;
         }
+
         ThreadManagement::SendAwakeRunnerSignal();
     }
     while (ConfigVariable::getForceQuit() == false);
 
-    return ConfigVariable::getExitStatus();
+    return iRet;
 }
 
 /*
@@ -904,67 +908,12 @@ static int batchMain(ScilabEngineInfo* _pSEI)
 
 /*
 ** -*- stateView
-** Used to show parser state.
-** Find if we are stuck within some control structure.
 */
 static void stateShow(Parser::ControlStatus status)
 {
-    switch (status)
+    if (status != Parser::AllControlClosed)
     {
-        //case Parser::WithinFor:
-        //    SetTemporaryPrompt("-for       ->");
-        //    break;
-        //case Parser::WithinWhile:
-        //    SetTemporaryPrompt("-while     ->");
-        //    break;
-        //case Parser::WithinIf:
-        //    SetTemporaryPrompt("-if        ->");
-        //    break;
-        //case Parser::WithinElse:
-        //    SetTemporaryPrompt("-else      ->");
-        //    break;
-        //case Parser::WithinElseIf:
-        //    SetTemporaryPrompt("-elseif    ->");
-        //    break;
-        //case Parser::WithinTry:
-        //    SetTemporaryPrompt("-try       ->");
-        //    break;
-        //case Parser::WithinCatch:
-        //    SetTemporaryPrompt("-catch     ->");
-        //    break;
-        //case Parser::WithinFunction:
-        //    SetTemporaryPrompt("-function  ->");
-        //    break;
-        //case Parser::WithinSelect:
-        //    SetTemporaryPrompt("-select    ->");
-        //    break;
-        //case Parser::WithinCase:
-        //    SetTemporaryPrompt("-case      ->");
-        //    break;
-        //case Parser::WithinSwitch:
-        //    SetTemporaryPrompt("-switch    ->");
-        //    break;
-        //case Parser::WithinOtherwise:
-        //    SetTemporaryPrompt("-otherwise ->");
-        //    break;
-        //case Parser::WithinMatrix:
-        //    SetTemporaryPrompt("- [        ->");
-        //    break;
-        //case Parser::WithinCell:
-        //    SetTemporaryPrompt("- {        ->");
-        //    break;
-        //case Parser::WithinBlockComment:
-        //    SetTemporaryPrompt("- /*       ->");
-        //    break;
-        //case Parser::WithinDots:
-        //    SetTemporaryPrompt("- ...      ->");
-        //    break;
-        default :
-            SetTemporaryPrompt("  > ");
-            break;
-        case Parser::AllControlClosed:
-            //ClearTemporaryPrompt();
-            break;
+        SetTemporaryPrompt("  > ");
     }
 }
 
index c37fe4b..d2abf1e 100644 (file)
@@ -43,8 +43,9 @@ static void sendExecDoneSignal(Runner* _pRunner)
     }
 }
 
-void StaticRunner::launch()
+int StaticRunner::launch()
 {
+    int iRet = 0;
     // get the runner to execute
     std::unique_ptr<Runner> runMe(getRunner());
     // set if the current comment is interruptible
@@ -116,6 +117,7 @@ void StaticRunner::launch()
         ConfigVariable::whereErrorToString(ostr);
         scilabErrorW(ostr.str().c_str());
         ConfigVariable::resetWhereError();
+        iRet = 1;
     }
     catch (const ast::InternalAbort& ia)
     {
@@ -173,6 +175,7 @@ void StaticRunner::launch()
 
     //clean debugger step flag if debugger is not interrupted ( end of debug )
     manager->resetStep();
+    return iRet;
 }
 
 void StaticRunner::setRunner(Runner* _RunMe)
diff --git a/scilab/modules/core/tests/nonreg_tests/bug_14225.dia.ref b/scilab/modules/core/tests/nonreg_tests/bug_14225.dia.ref
new file mode 100644 (file)
index 0000000..7de84ee
--- /dev/null
@@ -0,0 +1,43 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Cedric Delamarre
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 14225 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14225
+//
+// <-- Short Description -->
+// command-line option "-quit" should set the processs Exit status
+if getos() == "Windows" then
+    scilabBin = SCI + "/bin/scilex ";
+else
+    scilabBin = SCI + "/bin/scilab-cli ";
+end
+//With -quit argument
+err = unix(scilabBin + "-e ""exit()"" -quit");
+assert_checkequal(err, 0);
+err = unix(scilabBin + "-e ""1+1;"" -quit");
+assert_checkequal(err, 0);
+err = unix(scilabBin + "-e ""1+1; exit(12)"" -quit");
+assert_checkequal(err, 12);
+err = unix(scilabBin + "-e ""error(\""error_test\"");"" -quit");
+assert_checkequal(err, 1);
+err = unix(scilabBin + "-e ""error(\""error_test\"");exit(12)"" -quit");
+assert_checkequal(err, 1);
+err = unix(scilabBin + "-e ""try, error(\""error_test\""); catch, disp(lasterror()),end"" -quit");
+assert_checkequal(err, 0);
+err = unix(scilabBin + "-e ""try, error(\""error_test\""); catch,disp(lasterror());exit(12), end"" -quit");
+assert_checkequal(err, 12);
+//Without -quit argument
+err = unix(scilabBin + "-e ""exit()""");
+assert_checkequal(err, 0);
+err = unix(scilabBin + "-e ""1+1; exit(12)""");
+assert_checkequal(err, 12);
+err = unix(scilabBin + "-e ""try, error(\""error_test\""); catch,disp(lasterror());exit(12), end""");
+assert_checkequal(err, 12);
diff --git a/scilab/modules/core/tests/nonreg_tests/bug_14225.tst b/scilab/modules/core/tests/nonreg_tests/bug_14225.tst
new file mode 100644 (file)
index 0000000..797077f
--- /dev/null
@@ -0,0 +1,47 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Cedric Delamarre
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 14225 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14225
+//
+// <-- Short Description -->
+// command-line option "-quit" should set the processs Exit status
+
+if getos() == "Windows" then
+    scilabBin = SCI + "/bin/scilex ";
+else
+    scilabBin = SCI + "/bin/scilab-cli ";
+end
+
+//With -quit argument
+err = unix(scilabBin + "-e ""exit()"" -quit");
+assert_checkequal(err, 0);
+err = unix(scilabBin + "-e ""1+1;"" -quit");
+assert_checkequal(err, 0);
+err = unix(scilabBin + "-e ""1+1; exit(12)"" -quit");
+assert_checkequal(err, 12);
+err = unix(scilabBin + "-e ""error(\""error_test\"");"" -quit");
+assert_checkequal(err, 1);
+err = unix(scilabBin + "-e ""error(\""error_test\"");exit(12)"" -quit");
+assert_checkequal(err, 1);
+err = unix(scilabBin + "-e ""try, error(\""error_test\""); catch, disp(lasterror()),end"" -quit");
+assert_checkequal(err, 0);
+err = unix(scilabBin + "-e ""try, error(\""error_test\""); catch,disp(lasterror());exit(12), end"" -quit");
+assert_checkequal(err, 12);
+
+//Without -quit argument
+err = unix(scilabBin + "-e ""exit()""");
+assert_checkequal(err, 0);
+err = unix(scilabBin + "-e ""1+1; exit(12)""");
+assert_checkequal(err, 12);
+err = unix(scilabBin + "-e ""try, error(\""error_test\""); catch,disp(lasterror());exit(12), end""");
+assert_checkequal(err, 12);
+