aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Albert <danalbert@google.com>2015-01-08 23:38:55 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-01-08 23:38:56 +0000
commitf41cd32af0994358ae9f3acca23c0354de5b3f0d (patch)
tree1546fd470713070fd2593e521ae029ab481534ed
parentd74cfd3c1f507ab51b576e0d2ce80dc8906c2e8e (diff)
parentd813311a35b10e8bf8917e503267de6246446991 (diff)
downloadexternal_llvm-f41cd32af0994358ae9f3acca23c0354de5b3f0d.zip
external_llvm-f41cd32af0994358ae9f3acca23c0354de5b3f0d.tar.gz
external_llvm-f41cd32af0994358ae9f3acca23c0354de5b3f0d.tar.bz2
Merge "[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):