+bool TestManager::clearTestCase(std::string &result, unsigned int id) {
+ result = "";
+
+ if (!tests()) {
+ result = "There are not programmed test cases to be removed";
+ return false;
+ }
+
+ test_pool_it it = ((id != -1) ? a_testPool.find(id) : a_currentTestIt);
+ if (it == a_testPool.end()) {
+ result = "Test case id provided not found";
+ return false;
+ }
+
+ if (!it->second->safeToClear()) {
+ result = "Test case id provided has running-thread steps. Check for stuck external procedures or try later.";
+ return false;
+ }
+
+ a_testPool.erase(it);
+
+ result = "Provided test case has been dropped";
+ bool something_removed = false;
+
+ auto key1_it = a_key1TestCaseMap.find(it->second->getKey1());
+ if (key1_it != a_key1TestCaseMap.end()) {
+ a_key1TestCaseMap.erase(key1_it);
+ result += " | Removed key1 = ";
+ result += it->second->getKey1();
+ something_removed = true;
+ }
+ auto key2_it = a_key2TestCaseMap.find(it->second->getKey2());
+ if (key2_it != a_key2TestCaseMap.end()) {
+ a_key2TestCaseMap.erase(key2_it);
+ result += " | Removed key2 = ";
+ result += it->second->getKey2();
+ something_removed = true;
+ }
+
+ if (something_removed) return true;
+
+ result = "Provided test case has been dropped, but key1 = '";
+ result += it->second->getKey1();
+ result += "' was not found, and also key2 = '";
+ result += it->second->getKey2();
+ result += "' was not found";
+
+ return false;
+}
+
+bool TestManager::clearPool(std::string &result) {
+
+ result = "";
+
+ if (!tests()) {
+ result = "There are not programmed test cases to be removed";
+ return false;
+ }
+
+ int total = a_testPool.size();
+ int unsafe = 0;
+
+ test_pool_it it;
+ for (it = a_testPool.begin(); it != a_testPool.end(); it++) {
+ if (!it->second->safeToClear()) { // Check that non pending threads are running (command steps):
+ unsafe++;
+ }
+ }
+
+ if (unsafe > 0) {
+ result = "Some test cases cannot be removed (";
+ result += anna::functions::asString(unsafe);
+ result += "/";
+ result += anna::functions::asString(total);
+ result += "), mainly those having running-thread steps. Check for stuck external procedures or try later.";
+ return false;
+ }
+
+ // Here is safe to clear:
+ for (it = a_testPool.begin(); it != a_testPool.end(); it++) {
+ delete it->second;
+ }