From bde0a1c55e7751fb953ece66785ab6de9b1e2bf2 Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Wed, 18 May 2016 23:49:54 -0400 Subject: [PATCH] nitunit: filter the XML content (and trunc it if needed) Signed-off-by: Jean Privat --- src/testing/testing_base.nit | 36 ++++++++++++++++++++++++++++++++++++ src/testing/testing_doc.nit | 22 ++++++++++++---------- src/testing/testing_suite.nit | 8 ++++---- 3 files changed, 52 insertions(+), 14 deletions(-) diff --git a/src/testing/testing_base.nit b/src/testing/testing_base.nit index 5e9b83b..414de9a 100644 --- a/src/testing/testing_base.nit +++ b/src/testing/testing_base.nit @@ -93,3 +93,39 @@ ulimit -t {{{ulimit_usertime}}} 2> /dev/null # Default: 10 CPU minute var ulimit_usertime = 600 is writable end + +redef class String + # If needed, truncate `self` at `max_length` characters and append an informative `message`. + # + # ~~~ + # assert "hello".trunc(10) == "hello" + # assert "hello".trunc(2) == "he[truncated. Full size is 5]" + # assert "hello".trunc(2, "...") == "he..." + # ~~~ + fun trunc(max_length: Int, message: nullable String): String + do + if length <= max_length then return self + if message == null then message = "[truncated. Full size is {length}]" + return substring(0, max_length) + message + end + + # Use a special notation for whitespace characters that are not `'\n'` (LFD) or `' '` (space). + # + # ~~~ + # assert "hello".filter_nonprintable == "hello" + # assert "\r\n\t".filter_nonprintable == "^13\n^9" + # ~~~ + fun filter_nonprintable: String + do + var buf = new Buffer + for c in self do + var cp = c.code_point + if cp < 32 and c != '\n' then + buf.append "^{cp}" + else + buf.add c + end + end + return buf.to_s + end +end diff --git a/src/testing/testing_doc.nit b/src/testing/testing_doc.nit index f040253..05c1f67 100644 --- a/src/testing/testing_doc.nit +++ b/src/testing/testing_doc.nit @@ -159,12 +159,13 @@ class NitUnitExecutor toolcontext.info("Execute doc-unit {du.testcase.attrs["name"]} in {file} {i}", 1) var res2 = toolcontext.safe_exec("{file.to_program_name}.bin {i} >'{file}.out1' 2>&1 '{file}.out1' 2>&1