Fixes for genlib function: 63/16763/3
Vincent COUVERT [Thu, 2 Jul 2015 13:31:51 +0000 (15:31 +0200)]
 - Display errors messages in case of error
 - Manage default value for path (2nd input argument)
 - Display parser error
 - Stop compilation on error
Tests:
test_run functions bug_12593
test_run functions bug_9059
test_run functions bug_7779

Change-Id: Ifc645cab87cc94925268694fac89dc251d016bf7

scilab/modules/functions/tests/nonreg_tests/bug_12593.dia.ref
scilab/modules/functions/tests/nonreg_tests/bug_12593.tst
scilab/modules/functions/tests/nonreg_tests/bug_9059.dia.ref
scilab/modules/functions/tests/nonreg_tests/bug_9059.tst
scilab/modules/io/sci_gateway/cpp/sci_genlib.cpp
scilab/modules/io/sci_gateway/cpp/sci_lib.cpp

index 8d88161..b6d6b0f 100644 (file)
@@ -19,5 +19,5 @@ my_dir      = pathconvert(TMPDIR+"/bug12593_dir");
 my_file     = my_dir+"test.sci";
 mkdir(my_dir);
 mputl(my_function,my_file);
-errmsg=msprintf(gettext("%s: Error in file %s : %s.\n"), "genlib", my_file, msprintf(gettext("Invalid factor.\n")));
-assert_checkerror("genlib(""bug_12593_dir"", my_dir,%T)",errmsg);
+errmsg=msprintf(gettext("%s: Error in file %s.\n"), "genlib", my_file);
+assert_checkerror("genlib(""bug_12593_dir"", TMPDIR+""/bug12593_dir"",%T)",errmsg);
index b3d0c5e..f460dee 100644 (file)
@@ -22,6 +22,6 @@ my_file     = my_dir+"test.sci";
 mkdir(my_dir);
 mputl(my_function,my_file);
 
-errmsg=msprintf(gettext("%s: Error in file %s : %s.\n"), "genlib", my_file, msprintf(gettext("Invalid factor.\n")));
-assert_checkerror("genlib(""bug_12593_dir"", my_dir,%T)",errmsg);
+errmsg=msprintf(gettext("%s: Error in file %s.\n"), "genlib", my_file);
+assert_checkerror("genlib(""bug_12593_dir"", TMPDIR+""/bug12593_dir"",%T)",errmsg);
 
index 8c7d18c..48ab6d1 100644 (file)
@@ -7,8 +7,6 @@
 //
 // <-- CLI SHELL MODE -->
 //
-// <-- ENGLISH IMPOSED -->
-//
 // <-- Non-regression test for bug 9059 -->
 //
 // <-- Bugzilla URL -->
 // <-- Short Description -->
 // tbx_build_macros and genlib do not stop on error
 cd TMPDIR;
-mkdir('bug_9059');
-f = ['function [t] = macrobug(z)'; 't=z/'; 'endfunction'];
-mputl(f,TMPDIR+'/bug_9059/macrobug.sci');
-cd('bug_9059');
+mkdir("bug_9059");
+f = ["function [t] = macrobug(z)"; "t=z/"; "endfunction"];
+mputl(f,TMPDIR+"/bug_9059/macrobug.sci");
+cd("bug_9059");
 exec("macrobug.sci","errcatch");
-str=lasterror();
-msgerr="%s: Error in file %s : %s.\n";
-assert_checkerror("genlib(''bug_9059lib'',''TMPDIR/bug_9059'',%f,%t)",msgerr,[],"genlib",pathconvert("TMPDIR" +"/bug_9059/macrobug.sci", %f),str);
+errmsg=msprintf(gettext("%s: Error in file %s.\n"), "genlib", pathconvert("TMPDIR" +"/bug_9059/macrobug.sci", %f));
+assert_checkerror("genlib(""bug_9059lib"",""TMPDIR/bug_9059"",%f,%t)",errmsg);
 -- Creation of [bug_9059lib] (Macros) --
 genlib: Processing file: macrobug.sci
index 5da03b6..2c36585 100644 (file)
@@ -7,8 +7,6 @@
 //
 // <-- CLI SHELL MODE -->
 //
-// <-- ENGLISH IMPOSED -->
-//
 // <-- Non-regression test for bug 9059 -->
 //
 // <-- Bugzilla URL -->
 // tbx_build_macros and genlib do not stop on error
 
 cd TMPDIR;
-mkdir('bug_9059');
-f = ['function [t] = macrobug(z)'; 't=z/'; 'endfunction'];
-mputl(f,TMPDIR+'/bug_9059/macrobug.sci');
-cd('bug_9059');
+mkdir("bug_9059");
+
+f = ["function [t] = macrobug(z)"; "t=z/"; "endfunction"];
+mputl(f,TMPDIR+"/bug_9059/macrobug.sci");
+
+cd("bug_9059");
 exec("macrobug.sci","errcatch");
-str=lasterror();
-msgerr="%s: Error in file %s : %s.\n";
-assert_checkerror("genlib(''bug_9059lib'',''TMPDIR/bug_9059'',%f,%t)",msgerr,[],"genlib",pathconvert("TMPDIR" +"/bug_9059/macrobug.sci", %f),str);
+
+errmsg=msprintf(gettext("%s: Error in file %s.\n"), "genlib", pathconvert("TMPDIR" +"/bug_9059/macrobug.sci", %f));
+assert_checkerror("genlib(""bug_9059lib"",""TMPDIR/bug_9059"",%f,%t)",errmsg);
index 6ca73eb..639611c 100644 (file)
 
 #define DEFAULT_ENCODING "UTF-8"
 
+#ifdef _MSC_VER
+#define FILE_SEPARATOR L"\\"
+#else
 #define FILE_SEPARATOR L"/"
+#endif
 
 //XML API
 #include <libxml/xpath.h>
@@ -49,6 +53,8 @@ extern "C"
 #include "sciprint.h"
 #include "freeArrayOfString.h"
 #include "Scierror.h"
+#include "scicurdir.h"
+
 }
 
 
@@ -70,8 +76,9 @@ Function::ReturnValue sci_genlib(types::typed_list &in, int _iRetCount, types::t
     wchar_t* pstLibName                = NULL;
     bool bVerbose           = false;
 
-    if (in.size() < 2 && in.size() > 4)
+    if (in.size() < 1 || in.size() > 4)
     {
+        Scierror(78, _("%s: Wrong number of input argument(s): %d to %d expected.\n"), "genlib", 1, 4);
         return Function::Error;
     }
 
@@ -79,26 +86,38 @@ Function::ReturnValue sci_genlib(types::typed_list &in, int _iRetCount, types::t
     InternalType* pIT = in[0];
     if (pIT->isString() == false)
     {
+        Scierror(999, _("%s: Wrong type for input argument #%d: A string expected.\n"), "genlib", 1);
         return Function::Error;
     }
 
     String *pS = pIT->getAs<types::String>();
     if (pS->getSize() != 1)
     {
+        Scierror(999, _("%s: Wrong size for input argument #%d: A string expected.\n"), "genlib", 1);
         return Function::Error;
     }
     pstLibName = pS->get(0);
 
     //param 2, library path
-    pIT = in[1];
-    if (pIT->isString() == false)
+    if (in.size() > 1)
     {
-        return Function::Error;
+        pIT = in[1];
+        if (pIT->isString() == false)
+        {
+            Scierror(999, _("%s: Wrong type for input argument #%d: A string expected.\n"), "genlib", 2);
+            return Function::Error;
+        }
+    }
+    else
+    {
+        int ierr = 0;
+        pIT = new types::String(scigetcwd(&ierr));
     }
 
     pS = pIT->getAs<types::String>();
     if (pS->isScalar() == false)
     {
+        Scierror(999, _("%s: Wrong size for input argument #%d: A string expected.\n"), "genlib", 2);
         return Function::Error;
     }
 
@@ -109,7 +128,7 @@ Function::ReturnValue sci_genlib(types::typed_list &in, int _iRetCount, types::t
 
     if (in.size() > 3)
     {
-        //versbose flag
+        //verbose flag
         pIT = in[3];
         if (pIT->isBool() == false)
         {
@@ -170,16 +189,18 @@ Function::ReturnValue sci_genlib(types::typed_list &in, int _iRetCount, types::t
             wstring pstPathBin(pstPath[k]);
             pstPathBin.replace(pstPathBin.end() - 3, pstPathBin.end(), L"bin");
 
-            //sciprint(_("%ls: Processing file: %ls\n"), L"genlib", pstPath[k]);
+            if (bVerbose)
+            {
+                sciprint(_("%ls: Processing file: %ls\n"), L"genlib", pstPath[k]);
+            }
 
             Parser parser;
             parser.parseFile(stFullPath, ConfigVariable::getSCIPath());
             if (parser.getExitStatus() !=  Parser::Succeded)
             {
-                os_swprintf(pstVerbose, 65535, _W("%ls: Warning: Error in file %ls : %ls. File ignored\n").c_str(), L"genlib", pstPath[k], parser.getErrorMessage());
-                scilabWriteW(pstVerbose);
-                delete parser.getTree();
-                continue;
+                scilabWriteW(parser.getErrorMessage());
+                Scierror(999, _("%ls: Error in file %ls.\n"), L"genlib", stFullPath.data());
+                return Function::Error;
             }
 
             //serialize ast
index ed1e28b..88629e3 100644 (file)
@@ -40,7 +40,7 @@ Function::ReturnValue sci_lib(types::typed_list &in, int _iRetCount, types::type
 
     if (pIT->isString() == false)
     {
-        Scierror(999, _("%s: Wrong type for intput argument #%d: A string expected.\n"), "lib", 1);
+        Scierror(999, _("%s: Wrong type for input argument #%d: A string expected.\n"), "lib", 1);
         return Function::Error;
     }
 
@@ -48,7 +48,7 @@ Function::ReturnValue sci_lib(types::typed_list &in, int _iRetCount, types::type
 
     if (pS->isScalar() == false)
     {
-        Scierror(999, _("%s: Wrong size for intput argument #%d: A string expected.\n"), "lib", 1);
+        Scierror(999, _("%s: Wrong size for input argument #%d: A string expected.\n"), "lib", 1);
         return Function::Error;
     }