COMPMID-415: Add --stop-on-error

Change-Id: I557934e8f065d8877344c945980b33139c2a5c97
Reviewed-on: http://mpd-gerrit.cambridge.arm.com/81831
Tested-by: Kaizen <jeremy.johnson+kaizengerrit@arm.com>
Reviewed-by: Anthony Barbier <anthony.barbier@arm.com>
diff --git a/framework/Framework.cpp b/framework/Framework.cpp
index 056ee59..ac7248c 100644
--- a/framework/Framework.cpp
+++ b/framework/Framework.cpp
@@ -198,6 +198,16 @@
     return _throw_errors;
 }
 
+void Framework::set_stop_on_error(bool stop_on_error)
+{
+    _stop_on_error = stop_on_error;
+}
+
+bool Framework::stop_on_error() const
+{
+    return _stop_on_error;
+}
+
 bool Framework::is_selected(const TestInfo &info) const
 {
     if((info.mode & _dataset_mode) == DatasetMode::DISABLED)
@@ -345,9 +355,16 @@
 
     _current_test_result = nullptr;
 
-    if(test_factory.status() == TestCaseFactory::Status::EXPECTED_FAILURE && result.status == TestResult::Status::FAILED)
+    if(result.status == TestResult::Status::FAILED)
     {
-        result.status = TestResult::Status::EXPECTED_FAILURE;
+        if(info.status == TestCaseFactory::Status::EXPECTED_FAILURE)
+        {
+            result.status = TestResult::Status::EXPECTED_FAILURE;
+        }
+        else if(_stop_on_error)
+        {
+            throw std::runtime_error("Abort on first error.");
+        }
     }
 
     result.measurements = profiler.measurements();