fix bug on non existing path in path search (Fails to compile under Linux) 02/14002/2
Vincent COUVERT [Wed, 12 Mar 2014 18:46:56 +0000 (19:46 +0100)]
This reverts commit 24677a63e81ca8fa02dfd2f5c7520060070f5428.

Change-Id: I3c73f6e9b7bd74c523054f4a6ebeba9660fcbf9f

scilab/modules/graphic_objects/src/cpp/ScilabView.cpp
scilab/modules/graphic_objects/tests/unit_tests/path.dia.ref [new file with mode: 0644]
scilab/modules/graphic_objects/tests/unit_tests/path.tst [new file with mode: 0644]

index 23ddc0e..79b8d2d 100644 (file)
@@ -10,6 +10,7 @@
  *
  */
 
+#include <algorithm>
 #include <iostream>
 #include <map>
 #include <list>
@@ -494,27 +495,13 @@ PathItem* ScilabView::getItem(std::string _pstTag)
 
 PathItem* ScilabView::getItem(std::string _pstTag, std::list<int>& _ignoredList)
 {
-    /*
-    */
     __pathList_iterator it = m_pathList.begin();
     for (; it != m_pathList.end(); it++)
     {
         PathItem * item = it->second;
         if (item->tag == _pstTag)
         {
-            bool ignored = false;
-            //check if this handle is not in ignoredList
-            std::list<int>::iterator itIgnored = _ignoredList.begin();
-            for (; itIgnored != _ignoredList.end(); itIgnored++)
-            {
-                if ((*itIgnored) == item->uid)
-                {
-                    ignored = true;
-                    break;
-                }
-            }
-
-            if (ignored == false)
+            if (std::find(_ignoredList.begin(), _ignoredList.end(), item->uid) == _ignoredList.end())
             {
                 return item;
             }
@@ -565,13 +552,19 @@ int ScilabView::search_path(char* _pstPath)
                         break;
                     }
                 }
+
+                //if figure is in ignore list, reeturn not found
+                if (std::find(ignoredList.begin(), ignoredList.end(), path->uid) != ignoredList.end())
+                {
+                    return 0;
+                }
             }
             else
             {
                 PathItem* newPath = search_children(path, pstSubPath, bDeep, ignoredList);
                 if (newPath == NULL)
                 {
-                    //flag handle to ingnore and restart parsing
+                    //flag handle to ignore and restart parsing
                     ignoredList.push_back(path->uid);
                     pstPath = strdup(_pstPath);
                     pstSubPath = strtok(pstPath, "/");
@@ -613,17 +606,7 @@ PathItem* ScilabView::search_children(PathItem* _path, std::string _subPath, boo
         {
             bool ignored = false;
             //check if this handle is not in ignoredList
-            std::list<int>::iterator itIgnored = _ignoredList.begin();
-            for (; itIgnored != _ignoredList.end(); itIgnored++)
-            {
-                if ((*itIgnored) == child->uid)
-                {
-                    ignored = true;
-                    break;
-                }
-            }
-
-            if (ignored == false)
+            if (std::find(_ignoredList.begin(), _ignoredList.end(), child->uid) == _ignoredList.end())
             {
                 return child;
             }
diff --git a/scilab/modules/graphic_objects/tests/unit_tests/path.dia.ref b/scilab/modules/graphic_objects/tests/unit_tests/path.dia.ref
new file mode 100644 (file)
index 0000000..631ba18
--- /dev/null
@@ -0,0 +1,59 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Bruno JOFRET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+f = figure("tag", "mainFigure", "visible", "off");
+    f1 = uicontrol(f, "style", "frame", "tag", "f1");
+        f11 = uicontrol(f1, "style", "frame", "tag", "f11");
+        f12 = uicontrol(f1, "style", "frame", "tag", "f12");
+        f13 = uicontrol(f1, "style", "frame", "tag", "f13");
+        f14 = uicontrol(f1, "style", "frame", "tag", "leaf");
+            f141 = uicontrol(f14, "style", "frame", "tag", "leaf1");
+            f142 = uicontrol(f14, "style", "frame", "tag", "leaf2");
+            f143 = uicontrol(f14, "style", "frame", "tag", "f143");
+    f2 = uicontrol(f, "style", "frame", "tag", "f2");
+        f21 = uicontrol(f2, "style", "frame", "tag", "f21");
+        f22 = uicontrol(f2, "style", "frame", "tag", "f22");
+        f23 = uicontrol(f2, "style", "frame", "tag", "f23");
+        f24 = uicontrol(f2, "style", "frame", "tag", "leaf");
+            f241 = uicontrol(f24, "style", "frame", "tag", "leaf1");
+            f242 = uicontrol(f24, "style", "frame", "tag", "leaf2");
+            f243 = uicontrol(f24, "style", "frame", "tag", "f243");
+res = get("mainFigure");
+assert_checkequal(f.UID, res.UID);
+res = get("mainFigure/f1");
+assert_checkequal(f1.UID, res.UID);
+res = get("mainFigure/f2");
+assert_checkequal(f2.UID, res.UID);
+res = get("mainFigure/f1/f12");
+assert_checkequal(f12.UID, res.UID);
+res = get("mainFigure/f2/f22");
+assert_checkequal(f22.UID, res.UID);
+res = get("f1");
+assert_checkequal(f1.UID, res.UID);
+res = get("f13");
+assert_checkequal(f13.UID, res.UID);
+res = get("f5");
+assert_checkequal([], res);
+res = get("*/f2");
+assert_checkequal(f2.UID, res.UID);
+res = get("*/*/leaf");
+assert_checktrue(or(res.UID == [f14.UID, f24.UID]));
+res = get("*/leaf");
+assert_checktrue(or(res.UID == [f14.UID, f24.UID]));
+res = get("*/*/toto");
+assert_checkequal([], res);
+res = get("*/toto");
+assert_checkequal([], res);
+res = get("mainFigure/*/f23");
+assert_checkequal(f23.UID, res.UID);
+res = get("mainFigure/*/toto");
+assert_checkequal([], res);
+res = get("mainFigure/*/leaf/f143");
+assert_checkequal(f143.UID, res.UID);
+res = get("mainFigure/*/leaf/leaf1");
+assert_checktrue(or(res.UID == [f141.UID, f241.UID]));
+res = get("mainFigure/*/leaf/leaf2");
+assert_checktrue(or(res.UID == [f142.UID, f242.UID]));
diff --git a/scilab/modules/graphic_objects/tests/unit_tests/path.tst b/scilab/modules/graphic_objects/tests/unit_tests/path.tst
new file mode 100644 (file)
index 0000000..e46f09b
--- /dev/null
@@ -0,0 +1,77 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Bruno JOFRET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+f = figure("tag", "mainFigure", "visible", "off");
+    f1 = uicontrol(f, "style", "frame", "tag", "f1");
+        f11 = uicontrol(f1, "style", "frame", "tag", "f11");
+        f12 = uicontrol(f1, "style", "frame", "tag", "f12");
+        f13 = uicontrol(f1, "style", "frame", "tag", "f13");
+        f14 = uicontrol(f1, "style", "frame", "tag", "leaf");
+            f141 = uicontrol(f14, "style", "frame", "tag", "leaf1");
+            f142 = uicontrol(f14, "style", "frame", "tag", "leaf2");
+            f143 = uicontrol(f14, "style", "frame", "tag", "f143");
+    f2 = uicontrol(f, "style", "frame", "tag", "f2");
+        f21 = uicontrol(f2, "style", "frame", "tag", "f21");
+        f22 = uicontrol(f2, "style", "frame", "tag", "f22");
+        f23 = uicontrol(f2, "style", "frame", "tag", "f23");
+        f24 = uicontrol(f2, "style", "frame", "tag", "leaf");
+            f241 = uicontrol(f24, "style", "frame", "tag", "leaf1");
+            f242 = uicontrol(f24, "style", "frame", "tag", "leaf2");
+            f243 = uicontrol(f24, "style", "frame", "tag", "f243");
+
+res = get("mainFigure");
+assert_checkequal(f.UID, res.UID);
+
+res = get("mainFigure/f1");
+assert_checkequal(f1.UID, res.UID);
+
+res = get("mainFigure/f2");
+assert_checkequal(f2.UID, res.UID);
+
+res = get("mainFigure/f1/f12");
+assert_checkequal(f12.UID, res.UID);
+
+res = get("mainFigure/f2/f22");
+assert_checkequal(f22.UID, res.UID);
+
+res = get("f1");
+assert_checkequal(f1.UID, res.UID);
+res = get("f13");
+assert_checkequal(f13.UID, res.UID);
+
+res = get("f5");
+assert_checkequal([], res);
+
+res = get("*/f2");
+assert_checkequal(f2.UID, res.UID);
+
+res = get("*/*/leaf");
+assert_checktrue(or(res.UID == [f14.UID, f24.UID]));
+
+res = get("*/leaf");
+assert_checktrue(or(res.UID == [f14.UID, f24.UID]));
+
+res = get("*/*/toto");
+assert_checkequal([], res);
+
+res = get("*/toto");
+assert_checkequal([], res);
+
+res = get("mainFigure/*/f23");
+assert_checkequal(f23.UID, res.UID);
+
+res = get("mainFigure/*/toto");
+assert_checkequal([], res);
+
+res = get("mainFigure/*/leaf/f143");
+assert_checkequal(f143.UID, res.UID);
+
+res = get("mainFigure/*/leaf/leaf1");
+assert_checktrue(or(res.UID == [f141.UID, f241.UID]));
+
+res = get("mainFigure/*/leaf/leaf2");
+assert_checktrue(or(res.UID == [f142.UID, f242.UID]));