clear : test and function fixed 61/15561/2
Cedric Delamarre [Wed, 19 Nov 2014 15:03:32 +0000 (16:03 +0100)]
Change-Id: Id23b2dac88f2f6caff5982f36a8e0c6118043464

scilab/modules/ast/includes/symbol/variables.hxx
scilab/modules/core/sci_gateway/cpp/sci_clear.cpp
scilab/modules/core/tests/unit_tests/clear.dia.ref
scilab/modules/core/tests/unit_tests/clear.tst

index d9e776b..dba06bb 100644 (file)
@@ -276,10 +276,11 @@ struct Variables
                 pIT->killMe();
                 _var->pop();
                 delete pSave;
+                return true;
             }
         }
 
-        return true;
+        return false;
     }
 
     bool remove(const Symbol& _key, int _iLevel)
index f7c38cc..e815b25 100644 (file)
@@ -1,6 +1,7 @@
 /*
  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  *  Copyright (C) 2010-2010 - DIGITEO - Bruno JOFRET
+ *  Copyright (C) 2014 - Scilab Enterprises - Cedric Delamarre
  *
  *  This file must be used under the terms of the CeCILL.
  *  This source file is licensed as described in the file COPYING, which
@@ -40,22 +41,18 @@ Function::ReturnValue sci_clear(types::typed_list &in, int _iRetCount, types::ty
     // First check if all arguments are Single Strings.
     for (inIterator = in.begin() ; inIterator != in.end() ; iWrongType++, inIterator++)
     {
-        if (!(*inIterator)->isString())
+        if ((*inIterator)->isString() == false)
         {
-            Scierror(999, _("%s: Wrong type for input argument #%d: Single string expected.\n"), "clear", iWrongType);
+            Scierror(207, _("%s: Wrong type for input argument #%d: Matrix of strings expected.\n"), "clear", iWrongType);
             return Function::Error;
         }
-        if ((*inIterator)->getAs<types::String>()->getSize() != 1)
+
+        types::String* pStr = (*inIterator)->getAs<types::String>();
+        for (int i = 0; i < pStr->getSize(); i++)
         {
-            Scierror(999, _("%s: Wrong size for input argument #%d: Single string expected.\n"), "clear", iWrongType);
-            return Function::Error;
+            symbol::Context::getInstance()->remove(symbol::Symbol(pStr->get(i)));
         }
     }
 
-    for (inIterator = in.begin() ; inIterator != in.end() ; inIterator++)
-    {
-        symbol::Context::getInstance()->remove(symbol::Symbol((*inIterator)->getAs<types::String>()->get(0, 0)));
-    }
-
     return Function::OK;
 }
index c1efb59..765b34d 100644 (file)
@@ -62,11 +62,13 @@ test_clear();
 A = 3;
 assert_checkequal(isdef("A"), %t);
 assert_checkequal(A, 3);
-ierr = execstr("clear SCI", "errcatch");
-msg_err = lasterror();
-assert_checkequal(ierr, 13);
-msg_ref = msprintf(gettext("Redefining permanent variable.\n"));
-assert_checkequal (msg_err, msg_ref);
+clear("SCI");
+assert_checktrue(isdef("SCI"));
+oldSCI = SCI;
+SCI = 14;
+clear("SCI");
+assert_checktrue(isdef("SCI"));
+assert_checkequal(oldSCI, SCI);
 ierr = execstr("clear(1)", "errcatch");
 assert_checkequal(ierr, 207);
 msg_ref = msprintf(gettext("%s: Wrong type for input argument #%d: Matrix of strings expected.\n"), "clear", 1);
index 02bb13f..bf37c14 100644 (file)
@@ -64,20 +64,23 @@ assert_checkequal(isdef("D"), %f);
 
 
 function test_clear()
-  A = 6;
-  clear("A")
-  assert_checkequal(isdef("A"), %f);
+    A = 6;
+    clear("A")
+    assert_checkequal(isdef("A"), %f);
 endfunction
 test_clear();
 A = 3;
 assert_checkequal(isdef("A"), %t);
 assert_checkequal(A, 3);
 
-ierr = execstr("clear SCI", "errcatch");
-msg_err = lasterror();
-assert_checkequal(ierr, 13);
-msg_ref = msprintf(gettext("Redefining permanent variable.\n"));
-assert_checkequal (msg_err, msg_ref);
+clear("SCI");
+assert_checktrue(isdef("SCI"));
+
+oldSCI = SCI;
+SCI = 14;
+clear("SCI");
+assert_checktrue(isdef("SCI"));
+assert_checkequal(oldSCI, SCI);
 
 ierr = execstr("clear(1)", "errcatch");
 assert_checkequal(ierr, 207);