13 import xml.sax.saxutils
as XSS
28 bad_chars = re.compile(
"[\x00-\x08\x0b\x0c\x0e-\x1f\ud800-\udfff\ufffe\uffff]")
32 return "".join(
"[NON-XML-CHAR-0x%2X]" % ord(c)
for c
in match.group())
34 return bad_chars.sub(quote, data)
39 session.results = {
"pass": set(),
"fail": set(),
"skip": set()}
41 print(
"CTEST_FULL_OUTPUT")
45 if any(item.iter_markers(name=
"skip")):
47 if any(mark.args[0]
for mark
in item.iter_markers(name=
"skipif")):
54 f
"{item.cls.__name__}.{item.name}"
55 if hasattr(item,
"cls")
and item.cls
is not None
60 if call.when ==
"setup":
63 elif call.when ==
"call":
64 if call.excinfo
is not None:
65 if call.excinfo.typename ==
"Skipped":
69 item.user_properties.append((
"exception_info", str(call.excinfo.value)))
73 if result
is not None:
74 item.session.results[result].
add(name)
78 if not hasattr(session,
"items"):
81 if os.environ.get(
"DISABLE_CTEST_MEASUREMENTS") ==
"1":
85 results = list((name, sorted(value))
for name, value
in session.results.items())
88 for item
in session.items:
90 f
"{item.cls.__name__}.{item.name}"
91 if hasattr(item,
"cls")
and item.cls
is not None
94 for name, value
in item.user_properties:
95 results.append((f
"{prefix}.{name}", value))
97 if hasattr(session,
"sources"):
99 (f
"{name}.source_code", value)
for name, value
in session.sources.items()
102 if hasattr(session,
"docstrings"):
104 (f
"{name}.doc", value)
for name, value
in session.docstrings.items()
107 ignore_keys = {
"test_fixture_setup.completed_process"}
109 '<DartMeasurement type="text/string" name="{name}">{value}</DartMeasurement>'
114 for key, value
in results
115 if not any(key.endswith(ignore_key)
for ignore_key
in ignore_keys)
and value
117 for key, value
in to_print:
120 key = key.replace(
"/",
"_")
121 print(template.format(name=key, value=sanitized_value), end=
"")