Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / value / list_of_string_values.py
index eaecbe1..4f3604a 100644 (file)
@@ -3,19 +3,22 @@
 # found in the LICENSE file.
 
 from telemetry import value as value_module
+from telemetry.value import none_values
 
 
 class ListOfStringValues(value_module.Value):
   def __init__(self, page, name, units, values,
-               important=True, description=None,
+               important=True, description=None, none_value_reason=None,
                same_page_merge_policy=value_module.CONCATENATE):
     super(ListOfStringValues, self).__init__(page, name, units, important,
                                              description)
-    assert len(values) > 0
-    assert isinstance(values, list)
-    for v in values:
-      assert isinstance(v, basestring)
+    if values is not None:
+      assert isinstance(values, list)
+      assert len(values) > 0
+      assert all(isinstance(v, basestring) for v in values)
+    none_values.ValidateNoneValueReason(values, none_value_reason)
     self.values = values
+    self.none_value_reason = none_value_reason
     self.same_page_merge_policy = same_page_merge_policy
 
   def __repr__(self):
@@ -62,6 +65,10 @@ class ListOfStringValues(value_module.Value):
   def AsDict(self):
     d = super(ListOfStringValues, self).AsDict()
     d['values'] = self.values
+
+    if self.none_value_reason is not None:
+      d['none_value_reason'] = self.none_value_reason
+
     return d
 
   @staticmethod
@@ -69,6 +76,9 @@ class ListOfStringValues(value_module.Value):
     kwargs = value_module.Value.GetConstructorKwArgs(value_dict, page_dict)
     kwargs['values'] = value_dict['values']
 
+    if 'none_value_reason' in value_dict:
+      kwargs['none_value_reason'] = value_dict['none_value_reason']
+
     return ListOfStringValues(**kwargs)
 
   @classmethod
@@ -81,32 +91,34 @@ class ListOfStringValues(value_module.Value):
           v0.page, v0.name, v0.units,
           values[0].values,
           important=v0.important,
-          same_page_merge_policy=v0.same_page_merge_policy)
+          same_page_merge_policy=v0.same_page_merge_policy,
+          none_value_reason=v0.none_value_reason)
 
     assert v0.same_page_merge_policy == value_module.CONCATENATE
-    all_values = []
-    for v in values:
-      all_values.extend(v.values)
-    return ListOfStringValues(
-        v0.page, v0.name, v0.units,
-        all_values,
-        important=v0.important,
-        same_page_merge_policy=v0.same_page_merge_policy)
+    return cls._MergeLikeValues(values, v0.page, v0.name)
 
   @classmethod
   def MergeLikeValuesFromDifferentPages(cls, values,
                                         group_by_name_suffix=False):
     assert len(values) > 0
     v0 = values[0]
-    all_values = []
+    name = v0.name_suffix if group_by_name_suffix else v0.name
+    return cls._MergeLikeValues(values, None, name)
+
+  @classmethod
+  def _MergeLikeValues(cls, values, page, name):
+    v0 = values[0]
+    merged_values = []
+    none_value_reason = None
     for v in values:
-      all_values.extend(v.values)
-    if not group_by_name_suffix:
-      name = v0.name
-    else:
-      name = v0.name_suffix
+      if v.values is None:
+        merged_values = None
+        none_value_reason = none_values.MERGE_FAILURE_REASON
+        break
+      merged_values.extend(v.values)
     return ListOfStringValues(
-        None, name, v0.units,
-        all_values,
+        page, name, v0.units,
+        merged_values,
         important=v0.important,
-        same_page_merge_policy=v0.same_page_merge_policy)
+        same_page_merge_policy=v0.same_page_merge_policy,
+        none_value_reason=none_value_reason)