* Bug #8781 fixed - There was no error message when error was called with a complex... 75/14575/2
Charlotte HECQUET [Tue, 27 May 2014 14:42:23 +0000 (16:42 +0200)]
Change-Id: I84df3c7acfbe194481da07dc81e4fd39998f5605

scilab/CHANGES_5.5.X
scilab/modules/core/sci_gateway/c/sci_error.c
scilab/modules/core/tests/nonreg_tests/bug_8781.dia.ref [new file with mode: 0644]
scilab/modules/core/tests/nonreg_tests/bug_8781.tst [new file with mode: 0644]

index 5390baf..7a9dfc3 100644 (file)
@@ -23,6 +23,8 @@ Scilab Bug Fixes
 * Bug #8646 fixed - The datatips contextual menu opened a selection list which
                     was not ergonomic.
 
+* Bug #8781 fixed - There was no error message when error was called with a complex value.
+
 * Bug #8898 fixed - Help page of getdate improved.
 
 * Bug #9052 fixed - Some demonstrations in graphics were automatically closed at
index e400bdc..0f59527 100644 (file)
@@ -73,6 +73,8 @@ static int error_one_rhs(const char *fname)
 {
     SciErr sciErr;
     int *piAddressVarOne = NULL;
+    int iComplex = 0;
+
     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddressVarOne);
     if (sciErr.iErr)
     {
@@ -83,7 +85,15 @@ static int error_one_rhs(const char *fname)
     {
         if (isDoubleType(pvApiCtx, piAddressVarOne))
         {
-            return error_one_rhs_number(pvApiCtx, piAddressVarOne,  fname);
+            iComplex = isVarComplex(pvApiCtx, piAddressVarOne);
+            if (iComplex)
+            {
+                Scierror(999, _("%s: Wrong type for input argument #%d.\n"), fname, 1);
+            }
+            else
+            {
+                return error_one_rhs_number(pvApiCtx, piAddressVarOne,  fname);
+            }
         }
         else if (isStringType(pvApiCtx, piAddressVarOne))
         {
@@ -103,6 +113,8 @@ static int error_two_rhs(const char *fname)
     SciErr sciErr;
     int *piAddressVarOne = NULL;
     int *piAddressVarTwo = NULL;
+    int iComplexVarOne = 0;
+    int iComplexVarTwo = 0;
 
     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddressVarOne);
     if (sciErr.iErr)
@@ -122,15 +134,44 @@ static int error_two_rhs(const char *fname)
 
     if (isDoubleType(pvApiCtx, piAddressVarOne) && isStringType(pvApiCtx, piAddressVarTwo))
     {
-        return error_two_rhs_number_string(pvApiCtx, piAddressVarTwo, 2, piAddressVarOne, 1, fname);
+        iComplexVarOne = isVarComplex(pvApiCtx, piAddressVarOne);
+        if (iComplexVarOne)
+        {
+            Scierror(999, _("%s: Wrong type for input argument #%d.\n"), fname, 1);
+        }
+        else
+        {
+            return error_two_rhs_number_string(pvApiCtx, piAddressVarTwo, 2, piAddressVarOne, 1, fname);
+        }
     }
     else if (isDoubleType(pvApiCtx, piAddressVarTwo) && isStringType(pvApiCtx, piAddressVarOne))
     {
-        return error_two_rhs_number_string(pvApiCtx, piAddressVarOne, 1, piAddressVarTwo, 2, fname);
+        iComplexVarTwo = isVarComplex(pvApiCtx, piAddressVarTwo);
+        if (iComplexVarTwo)
+        {
+            Scierror(999, _("%s: Wrong type for input argument #%d.\n"), fname, 2);
+        }
+        else
+        {
+            return error_two_rhs_number_string(pvApiCtx, piAddressVarOne, 1, piAddressVarTwo, 2, fname);
+        }
     }
     else if (isDoubleType(pvApiCtx, piAddressVarTwo) && isDoubleType(pvApiCtx, piAddressVarOne))
     {
-        return error_two_rhs_number_number(pvApiCtx, piAddressVarOne, piAddressVarTwo, fname);
+        iComplexVarOne = isVarComplex(pvApiCtx, piAddressVarOne);
+        iComplexVarTwo = isVarComplex(pvApiCtx, piAddressVarTwo);
+        if (iComplexVarOne)
+        {
+            Scierror(999, _("%s: Wrong type for input argument #%d.\n"), fname, 1);
+        }
+        else if (iComplexVarTwo)
+        {
+            Scierror(999, _("%s: Wrong type for input argument #%d.\n"), fname, 2);
+        }
+        else
+        {
+            return error_two_rhs_number_number(pvApiCtx, piAddressVarOne, piAddressVarTwo, fname);
+        }
     }
     else
     {
diff --git a/scilab/modules/core/tests/nonreg_tests/bug_8781.dia.ref b/scilab/modules/core/tests/nonreg_tests/bug_8781.dia.ref
new file mode 100644 (file)
index 0000000..945b6ff
--- /dev/null
@@ -0,0 +1,22 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Charlotte HECQUET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- Non-regression test for bug 8781 -->
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/8781
+//
+// <-- Short Description -->
+// Calling error with complex value is ok for Scilab
+msg1 = msprintf(gettext("%s: Wrong type for input argument #%d.\n"), "error", 1);
+msg2 = msprintf(gettext("%s: Wrong type for input argument #%d.\n"), "error", 2);
+assert_checkerror("error(1+%i)", msg1);
+assert_checkerror("error(%i, 1)", msg1);
+assert_checkerror("error(45+%i, [''A''; ''multi'';''line'';''error'';''message''])", msg1);
+assert_checkerror("error(52, %i)", msg2);
diff --git a/scilab/modules/core/tests/nonreg_tests/bug_8781.tst b/scilab/modules/core/tests/nonreg_tests/bug_8781.tst
new file mode 100644 (file)
index 0000000..c4c2869
--- /dev/null
@@ -0,0 +1,23 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Charlotte HECQUET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- Non-regression test for bug 8781 -->
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/8781
+//
+// <-- Short Description -->
+// Calling error with complex value is ok for Scilab
+
+msg1 = msprintf(gettext("%s: Wrong type for input argument #%d.\n"), "error", 1);
+msg2 = msprintf(gettext("%s: Wrong type for input argument #%d.\n"), "error", 2);
+assert_checkerror("error(1+%i)", msg1);
+assert_checkerror("error(%i, 1)", msg1);
+assert_checkerror("error(45+%i, [''A''; ''multi'';''line'';''error'';''message''])", msg1);
+assert_checkerror("error(52, %i)", msg2);