aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Albert <danalbert@google.com>2015-01-09 02:03:14 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-01-09 02:03:14 +0000
commitcf038141057c6f85b282691c89c21d627654bc8e (patch)
tree1546fd470713070fd2593e521ae029ab481534ed
parentf1eebbe3aa15d420d4a8e1c0288a14c38127a256 (diff)
parent9cf8d9ca5aef24403867b7154f369cc831739178 (diff)
downloadexternal_llvm-cf038141057c6f85b282691c89c21d627654bc8e.zip
external_llvm-cf038141057c6f85b282691c89c21d627654bc8e.tar.gz
external_llvm-cf038141057c6f85b282691c89c21d627654bc8e.tar.bz2
am 9cf8d9ca: am f41cd32a: Merge "[LIT] Add JSONMetricValue type to wrap types supported by the json encoder."
* commit '9cf8d9ca5aef24403867b7154f369cc831739178': [LIT] Add JSONMetricValue type to wrap types supported by the json encoder.
-rw-r--r--utils/lit/lit/Test.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/utils/lit/lit/Test.py b/utils/lit/lit/Test.py
index 63d31b9..b810230 100644
--- a/utils/lit/lit/Test.py
+++ b/utils/lit/lit/Test.py
@@ -1,5 +1,6 @@
import os
from xml.sax.saxutils import escape
+from json import JSONEncoder
# Test result codes.
@@ -73,6 +74,41 @@ class RealMetricValue(MetricValue):
def todata(self):
return self.value
+class JSONMetricValue(MetricValue):
+ """
+ JSONMetricValue is used for types that are representable in the output
+ but that are otherwise uninterpreted.
+ """
+ def __init__(self, value):
+ # Ensure the value is a serializable by trying to encode it.
+ # WARNING: The value may change before it is encoded again, and may
+ # not be encodable after the change.
+ try:
+ e = JSONEncoder()
+ e.encode(value)
+ except TypeError:
+ raise
+ self.value = value
+
+ def format(self):
+ return str(self.value)
+
+ def todata(self):
+ return self.value
+
+def toMetricValue(value):
+ if isinstance(value, MetricValue):
+ return value
+ elif isinstance(value, int) or isinstance(value, long):
+ return IntMetricValue(value)
+ elif isinstance(value, float):
+ return RealMetricValue(value)
+ else:
+ # Try to create a JSONMetricValue and let the constructor throw
+ # if value is not a valid type.
+ return JSONMetricValue(value)
+
+
# Test results.
class Result(object):