Merge branch 'cynara' into tizen
[platform/core/test/security-tests.git] / src / framework / src / test_runner.cpp
index b98533d..f4a625f 100644 (file)
@@ -454,10 +454,11 @@ void TestRunner::Usage()
     fprintf(stderr,
             "    test-binary --output=text --output=xml --file=output.xml\n\n");
     fprintf(stderr, "Other parameters:\n");
+    fprintf(stderr, "  --test=<test name> Run only one test\n");
     fprintf(stderr,
             "  --regexp='regexp'\t Only selected tests"
             " which names match regexp run\n\n");
-    fprintf(stderr, "  --start=<test id>\tStart from concrete test id");
+    fprintf(stderr, "  --start=<test id>\tStart from concrete test id\n");
     fprintf(stderr, "  --group=<group name>\t Run tests only from one group\n");
     fprintf(stderr, "  --runignored\t Run also ignored tests\n");
     fprintf(stderr, "  --list\t Show a list of Test IDs\n");
@@ -514,6 +515,7 @@ int TestRunner::ExecTestRunner(ArgsList args)
     // Parse each argument
     for(std::string &arg : args)
     {
+        const std::string test = "--test=";
         const std::string regexp = "--regexp=";
         const std::string output = "--output=";
         const std::string groupId = "--group=";
@@ -630,6 +632,36 @@ int TestRunner::ExecTestRunner(ArgsList args)
                 }
                 group.second = newList;
             }
+        } else if (arg.find(test) == 0) {
+            arg.erase(0, test.length());
+            if (arg.length() == 0) {
+                InvalidArgs();
+                Usage();
+                return -1;
+            }
+
+            if (arg[0] == '\'' && arg[arg.length() - 1] == '\'') {
+                arg.erase(0);
+                arg.erase(arg.length() - 1);
+            }
+
+            if (arg.length() == 0) {
+                InvalidArgs();
+                Usage();
+                return -1;
+            }
+
+            pcrecpp::RE re(arg.c_str());
+            for (auto &group : m_testGroups) {
+                TestCaseList newList;
+                for (auto &tc : group.second)
+                {
+                    if (re.FullMatch(tc->GetName())) {
+                        newList.push_back(tc);
+                    }
+                }
+                group.second = newList;
+            }
         } else if(arg.find(onlyFromXML) == 0) {
             arg.erase(0, onlyFromXML.length());
             if (arg.length() == 0) {