COMPMID-556: When an EnumListOption contains some invalid values: still keep the valid ones

Change-Id: I4f5acc9af09587f0ec46482f6aea737fa42f35fc
Reviewed-on: http://mpd-gerrit.cambridge.arm.com/95186
Tested-by: Kaizen <jeremy.johnson+kaizengerrit@arm.com>
Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com>
diff --git a/tests/framework/command_line/EnumListOption.h b/tests/framework/command_line/EnumListOption.h
index d19bfbd..6155a5d 100644
--- a/tests/framework/command_line/EnumListOption.h
+++ b/tests/framework/command_line/EnumListOption.h
@@ -87,12 +87,12 @@
     _values.clear();
     _is_set = true;
 
-    try
-    {
-        std::stringstream stream{ value };
-        std::string       item;
+    std::stringstream stream{ value };
+    std::string       item;
 
-        while(!std::getline(stream, item, ',').fail())
+    while(!std::getline(stream, item, ',').fail())
+    {
+        try
         {
             std::stringstream item_stream(item);
             T                 typed_value{};
@@ -103,8 +103,8 @@
             {
                 if(_allowed_values.count(typed_value) == 0)
                 {
-                    _values.clear();
-                    return false;
+                    _is_set = false;
+                    continue;
                 }
 
                 _values.emplace_back(typed_value);
@@ -112,13 +112,13 @@
 
             _is_set = _is_set && !item_stream.fail();
         }
+        catch(const std::invalid_argument &)
+        {
+            _is_set = false;
+        }
+    }
 
-        return _is_set;
-    }
-    catch(const std::invalid_argument &)
-    {
-        return false;
-    }
+    return _is_set;
 }
 
 template <typename T>