about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2018-07-25 11:35:49 -0700
committerKartik Agaram <vc@akkartik.com>2018-07-25 11:35:49 -0700
commit55f7befe351cb180ceed52a550cf462a82064dee (patch)
treeec909a07d89a66589aa204b76ed1546f15804abe
parent0a10402b7c2c8daacc88d8f402fdfe1962f6ffec (diff)
downloadmu-55f7befe351cb180ceed52a550cf462a82064dee.tar.gz
4401 - make unit tests for tangle a little more readable
Thanks Max Bernstein for surfacing this idea to my memory.
-rw-r--r--tangle/003tangle.test.cc241
1 files changed, 200 insertions, 41 deletions
diff --git a/tangle/003tangle.test.cc b/tangle/003tangle.test.cc
index 6d6b88a7..69c6624a 100644
--- a/tangle/003tangle.test.cc
+++ b/tangle/003tangle.test.cc
@@ -1,12 +1,20 @@
 void test_tangle() {
-  istringstream in("a\nb\nc\n:(before b)\nd\n");
+  istringstream in("a\n"
+                   "b\n"
+                   "c\n"
+                   ":(before b)\n"
+                   "d\n");
   list<Line> dummy;
   tangle(in, dummy);
   CHECK_TRACE_CONTENTS("tangle", "adbc");
 }
 
 void test_tangle_with_linenumber() {
-  istringstream in("a\nb\nc\n:(before b)\nd\n");
+  istringstream in("a\n"
+                   "b\n"
+                   "c\n"
+                   ":(before b)\n"
+                   "d\n");
   list<Line> dummy;
   tangle(in, dummy);
   CHECK_TRACE_CONTENTS("tangle", "#line 1a#line 5d#line 2bc");
@@ -16,44 +24,64 @@ void test_tangle_with_linenumber() {
 }
 
 void test_tangle_linenumbers_with_filename() {
-  istringstream in("a\nb\nc\n:(before b)\nd\n");
+  istringstream in("a\n"
+                   "b\n"
+                   "c\n"
+                   ":(before b)\n"
+                   "d\n");
   list<Line> dummy;
   tangle(in, "foo", dummy);
   CHECK_TRACE_CONTENTS("tangle", "a#line 5 \"foo\"dbc");
 }
 
-void test_tangle_linenumbers_with_multiple_filenames() {
-  istringstream in1("a\nb\nc");
+void test_tangle_line_numbers_with_multiple_filenames() {
+  istringstream in1("a\n"
+                    "b\n"
+                    "c");
   list<Line> dummy;
   tangle(in1, "foo", dummy);
   CLEAR_TRACE;
-  istringstream in2(":(before b)\nd\n");
+  istringstream in2(":(before b)\n"
+                    "d\n");
   tangle(in2, "bar", dummy);
   CHECK_TRACE_CONTENTS("tangle", "a#line 2 \"bar\"d#line 2 \"foo\"bc");
 }
 
 void test_tangle_linenumbers_with_multiple_directives() {
-  istringstream in1("a\nb\nc");
+  istringstream in1("a\n"
+                    "b\n"
+                    "c");
   list<Line> dummy;
   tangle(in1, "foo", dummy);
   CLEAR_TRACE;
-  istringstream in2(":(before b)\nd\n:(before c)\ne");
+  istringstream in2(":(before b)\n"
+                    "d\n"
+                    ":(before c)\n"
+                    "e");
   tangle(in2, "bar", dummy);
   CHECK_TRACE_CONTENTS("tangle", "a#line 2 \"bar\"d#line 2 \"foo\"b#line 4 \"bar\"e#line 3 \"foo\"c");
 }
 
 void test_tangle_with_multiple_filenames_after() {
-  istringstream in1("a\nb\nc");
+  istringstream in1("a\n"
+                    "b\n"
+                    "c");
   list<Line> dummy;
   tangle(in1, "foo", dummy);
   CLEAR_TRACE;
-  istringstream in2(":(after b)\nd\n");
+  istringstream in2(":(after b)\n"
+                    "d\n");
   tangle(in2, "bar", dummy);
   CHECK_TRACE_CONTENTS("tangle", "ab#line 2 \"bar\"d#line 3 \"foo\"c");
 }
 
 void test_tangle_skip_tanglecomments() {
-  istringstream in("a\nb\nc\n//: 1\n//: 2\nd\n");
+  istringstream in("a\n"
+                   "b\n"
+                   "c\n"
+                   "//: 1\n"
+                   "//: 2\n"
+                   "d\n");
   list<Line> dummy;
   tangle(in, dummy);
   CHECK_TRACE_CONTENTS("tangle", "abcd");
@@ -61,7 +89,14 @@ void test_tangle_skip_tanglecomments() {
 }
 
 void test_tangle_with_tanglecomments_and_directive() {
-  istringstream in("a\n//: 1\nb\nc\n:(before b)\nd\n:(code)\ne\n");
+  istringstream in("a\n"
+                   "//: 1\n"
+                   "b\n"
+                   "c\n"
+                   ":(before b)\n"
+                   "d\n"
+                   ":(code)\n"
+                   "e\n");
   list<Line> dummy;
   tangle(in, dummy);
   CHECK_TRACE_CONTENTS("tangle", "a#line 6d#line 3bc#line 8e");
@@ -69,7 +104,15 @@ void test_tangle_with_tanglecomments_and_directive() {
 }
 
 void test_tangle_with_tanglecomments_inside_directive() {
-  istringstream in("a\n//: 1\nb\nc\n:(before b)\n//: abc\nd\n:(code)\ne\n");
+  istringstream in("a\n"
+                   "//: 1\n"
+                   "b\n"
+                   "c\n"
+                   ":(before b)\n"
+                   "//: abc\n"
+                   "d\n"
+                   ":(code)\n"
+                   "e\n");
   list<Line> dummy;
   tangle(in, dummy);
   CHECK_TRACE_CONTENTS("tangle", "a#line 7d#line 3bc#line 9e");
@@ -77,35 +120,53 @@ void test_tangle_with_tanglecomments_inside_directive() {
 }
 
 void test_tangle_with_multiword_directives() {
-  istringstream in("a b\nc\n:(after \"a b\")\nd\n");
+  istringstream in("a b\n"
+                   "c\n"
+                   ":(after \"a b\")\n"
+                   "d\n");
   list<Line> dummy;
   tangle(in, dummy);
   CHECK_TRACE_CONTENTS("tangle", "a bdc");
 }
 
 void test_tangle_with_quoted_multiword_directives() {
-  istringstream in("a \"b\"\nc\n:(after \"a \\\"b\\\"\")\nd\n");
+  istringstream in("a \"b\"\n"
+                   "c\n"
+                   ":(after \"a \\\"b\\\"\")\n"
+                   "d\n");
   list<Line> dummy;
   tangle(in, dummy);
   CHECK_TRACE_CONTENTS("tangle", "a \"b\"dc");
 }
 
 void test_tangle2() {
-  istringstream in("a\nb\nc\n:(after b)\nd\n");
+  istringstream in("a\n"
+                   "b\n"
+                   "c\n"
+                   ":(after b)\n"
+                   "d\n");
   list<Line> dummy;
   tangle(in, dummy);
   CHECK_TRACE_CONTENTS("tangle", "abdc");
 }
 
 void test_tangle_at_end() {
-  istringstream in("a\nb\nc\n:(after c)\nd\n");
+  istringstream in("a\n"
+                   "b\n"
+                   "c\n"
+                   ":(after c)\n"
+                   "d\n");
   list<Line> dummy;
   tangle(in, dummy);
   CHECK_TRACE_CONTENTS("tangle", "abcd");
 }
 
 void test_tangle_indents_hunks_correctly() {
-  istringstream in("a\n  b\nc\n:(after b)\nd\n");
+  istringstream in("a\n"
+                   "  b\n"
+                   "c\n"
+                   ":(after b)\n"
+                   "d\n");
   list<Line> dummy;
   tangle(in, dummy);
   CHECK_TRACE_CONTENTS("tangle", "a  b  dc");
@@ -113,7 +174,8 @@ void test_tangle_indents_hunks_correctly() {
 
 void test_tangle_warns_on_missing_target() {
   Hide_warnings = true;
-  istringstream in(":(before)\nabc def\n");
+  istringstream in(":(before)\n"
+                   "abc def\n");
   list<Line> lines;
   tangle(in, lines);
   CHECK_TRACE_WARNS();
@@ -121,14 +183,19 @@ void test_tangle_warns_on_missing_target() {
 
 void test_tangle_warns_on_unknown_target() {
   Hide_warnings = true;
-  istringstream in(":(before \"foo\")\nabc def\n");
+  istringstream in(":(before \"foo\")\n"
+                   "abc def\n");
   list<Line> lines;
   tangle(in, lines);
   CHECK_TRACE_WARNS();
 }
 
 void test_tangle_delete_range_of_lines() {
-  istringstream in("a\nb {\nc\n}\n:(delete{} \"b\")\n");
+  istringstream in("a\n"
+                   "b {\n"
+                   "c\n"
+                   "}\n"
+                   ":(delete{} \"b\")\n");
   list<Line> dummy;
   tangle(in, dummy);
   CHECK_TRACE_CONTENTS("tangle", "a");
@@ -137,7 +204,11 @@ void test_tangle_delete_range_of_lines() {
 }
 
 void test_tangle_replace() {
-  istringstream in("a\nb\nc\n:(replace b)\nd\n");
+  istringstream in("a\n"
+                   "b\n"
+                   "c\n"
+                   ":(replace b)\n"
+                   "d\n");
   list<Line> dummy;
   tangle(in, dummy);
   CHECK_TRACE_CONTENTS("tangle", "adc");
@@ -145,7 +216,13 @@ void test_tangle_replace() {
 }
 
 void test_tangle_replace_range_of_lines() {
-  istringstream in("a\nb {\nc\n}\n:(replace{} \"b\")\nd\ne\n");
+  istringstream in("a\n"
+                   "b {\n"
+                   "c\n"
+                   "}\n"
+                   ":(replace{} \"b\")\n"
+                   "d\n"
+                   "e\n");
   list<Line> dummy;
   tangle(in, dummy);
   CHECK_TRACE_CONTENTS("tangle", "ade");
@@ -154,7 +231,14 @@ void test_tangle_replace_range_of_lines() {
 }
 
 void test_tangle_replace_tracks_old_lines() {
-  istringstream in("a\nb {\nc\n}\n:(replace{} \"b\")\nd\n:OLD_CONTENTS\ne\n");
+  istringstream in("a\n"
+                   "b {\n"
+                   "c\n"
+                   "}\n"
+                   ":(replace{} \"b\")\n"
+                   "d\n"
+                   ":OLD_CONTENTS\n"
+                   "e\n");
   list<Line> dummy;
   tangle(in, dummy);
   CHECK_TRACE_CONTENTS("tangle", "adce");
@@ -162,14 +246,26 @@ void test_tangle_replace_tracks_old_lines() {
 }
 
 void test_tangle_nested_patterns() {
-  istringstream in("a\nc\nb\nc\nd\n:(after \"b\" then \"c\")\ne");
+  istringstream in("a\n"
+                   "c\n"
+                   "b\n"
+                   "c\n"
+                   "d\n"
+                   ":(after \"b\" then \"c\")\n"
+                   "e");
   list<Line> dummy;
   tangle(in, dummy);
   CHECK_TRACE_CONTENTS("tangle", "acbced");
 }
 
 void test_tangle_nested_patterns2() {
-  istringstream in("a\nc\nb\nc\nd\n:(after \"c\" following \"b\")\ne");
+  istringstream in("a\n"
+                   "c\n"
+                   "b\n"
+                   "c\n"
+                   "d\n"
+                   ":(after \"c\" following \"b\")\n"
+                   "e");
   list<Line> dummy;
   tangle(in, dummy);
   CHECK_TRACE_CONTENTS("tangle", "acbced");
@@ -180,7 +276,10 @@ void test_tangle_nested_patterns2() {
 //// scenarios
 
 void test_tangle_supports_scenarios() {
-  istringstream in(":(scenario does_bar)\nabc def\n+layer1: pqr\n+layer2: xyz");
+  istringstream in(":(scenario does_bar)\n"
+                   "abc def\n"
+                   "+layer1: pqr\n"
+                   "+layer2: xyz");
   list<Line> lines;
   tangle(in, lines);
   CHECK_EQ(lines.front().contents, "void test_does_bar() {");  lines.pop_front();
@@ -191,7 +290,11 @@ void test_tangle_supports_scenarios() {
 }
 
 void test_tangle_ignores_empty_lines_in_scenarios() {
-  istringstream in(":(scenario does_bar)\nabc def\n+layer1: pqr\n  \n+layer2: xyz");
+  istringstream in(":(scenario does_bar)\n"
+                   "abc def\n"
+                   "+layer1: pqr\n"
+                   "  \n"
+                   "+layer2: xyz");
   list<Line> lines;
   tangle(in, lines);
   CHECK_EQ(lines.front().contents, "void test_does_bar() {");  lines.pop_front();
@@ -202,14 +305,21 @@ void test_tangle_ignores_empty_lines_in_scenarios() {
 }
 
 void test_tangle_handles_empty_lines_in_scenarios() {
-  istringstream in(":(scenario does_bar)\nabc def\n\n+layer1: pqr\n+layer2: xyz");
+  istringstream in(":(scenario does_bar)\n"
+                   "abc def\n"
+                   "\n"
+                   "+layer1: pqr\n"
+                   "+layer2: xyz");
   list<Line> lines;
   tangle(in, lines);
   // no infinite loop
 }
 
 void test_tangle_supports_configurable_toplevel() {
-  istringstream in(":(scenarios foo)\n:(scenario does_bar)\nabc def\n+layer1: pqr");
+  istringstream in(":(scenarios foo)\n"
+                   ":(scenario does_bar)\n"
+                   "abc def\n"
+                   "+layer1: pqr");
   list<Line> lines;
   tangle(in, lines);
   CHECK_EQ(lines.front().contents, "void test_does_bar() {");  lines.pop_front();
@@ -223,7 +333,11 @@ void test_tangle_supports_configurable_toplevel() {
 }
 
 void test_tangle_can_hide_warnings_in_scenarios() {
-  istringstream in(":(scenario does_bar)\n% Hide_warnings = true;\nabc def\n+layer1: pqr\n+layer2: xyz");
+  istringstream in(":(scenario does_bar)\n"
+                   "% Hide_warnings = true;\n"
+                   "abc def\n"
+                   "+layer1: pqr\n"
+                   "+layer2: xyz");
   list<Line> lines;
   tangle(in, lines);
   CHECK_EQ(lines.front().contents, "void test_does_bar() {");  lines.pop_front();
@@ -235,7 +349,11 @@ void test_tangle_can_hide_warnings_in_scenarios() {
 }
 
 void test_tangle_can_include_c_code_at_end_of_scenario() {
-  istringstream in(":(scenario does_bar)\nabc def\n+layer1: pqr\n+layer2: xyz\n% int x = 1;");
+  istringstream in(":(scenario does_bar)\n"
+                   "abc def\n"
+                   "+layer1: pqr\n"
+                   "+layer2: xyz\n"
+                   "% int x = 1;");
   list<Line> lines;
   tangle(in, lines);
   CHECK_EQ(lines.front().contents, "void test_does_bar() {");  lines.pop_front();
@@ -247,7 +365,9 @@ void test_tangle_can_include_c_code_at_end_of_scenario() {
 }
 
 void test_tangle_can_include_c_code_at_end_of_scenario_without_trace_expectations() {
-  istringstream in(":(scenario does_bar)\nabc def\n% int x = 1;");
+  istringstream in(":(scenario does_bar)\n"
+                   "abc def\n"
+                   "% int x = 1;");
   list<Line> lines;
   tangle(in, lines);
   CHECK_EQ(lines.front().contents, "void test_does_bar() {");  lines.pop_front();
@@ -258,7 +378,10 @@ void test_tangle_can_include_c_code_at_end_of_scenario_without_trace_expectation
 }
 
 void test_tangle_supports_strings_in_scenarios() {
-  istringstream in(":(scenario does_bar)\nabc \"def\"\n+layer1: pqr\n+layer2: \"xyz\"");
+  istringstream in(":(scenario does_bar)\n"
+                   "abc \"def\"\n"
+                   "+layer1: pqr\n"
+                   "+layer2: \"xyz\"");
   list<Line> lines;
   tangle(in, lines);
   CHECK_EQ(lines.front().contents, "void test_does_bar() {");  lines.pop_front();
@@ -269,7 +392,10 @@ void test_tangle_supports_strings_in_scenarios() {
 }
 
 void test_tangle_supports_strings_in_scenarios2() {
-  istringstream in(":(scenario does_bar)\nabc \"\"\n+layer1: pqr\n+layer2: \"\"");
+  istringstream in(":(scenario does_bar)\n"
+                   "abc \"\"\n"
+                   "+layer1: pqr\n"
+                   "+layer2: \"\"");
   list<Line> lines;
   tangle(in, lines);
   CHECK_EQ(lines.front().contents, "void test_does_bar() {");  lines.pop_front();
@@ -280,7 +406,11 @@ void test_tangle_supports_strings_in_scenarios2() {
 }
 
 void test_tangle_supports_multiline_input_in_scenarios() {
-  istringstream in(":(scenario does_bar)\nabc def\n  efg\n+layer1: pqr\n+layer2: \"\"");
+  istringstream in(":(scenario does_bar)\n"
+                   "abc def\n"
+                   "  efg\n"
+                   "+layer1: pqr\n"
+                   "+layer2: \"\"");
   list<Line> lines;
   tangle(in, lines);
   CHECK_EQ(lines.front().contents, "void test_does_bar() {");  lines.pop_front();
@@ -291,7 +421,12 @@ void test_tangle_supports_multiline_input_in_scenarios() {
 }
 
 void test_tangle_supports_reset_in_scenarios() {
-  istringstream in(":(scenario does_bar)\nabc def\n===\nefg\n+layer1: pqr\n+layer2: \"\"");
+  istringstream in(":(scenario does_bar)\n"
+                   "abc def\n"
+                   "===\n"
+                   "efg\n"
+                   "+layer1: pqr\n"
+                   "+layer2: \"\"");
   list<Line> lines;
   tangle(in, lines);
   CHECK_EQ(lines.front().contents, "void test_does_bar() {");  lines.pop_front();
@@ -304,7 +439,11 @@ void test_tangle_supports_reset_in_scenarios() {
 }
 
 void test_tangle_can_check_for_absence_at_end_of_scenarios() {
-  istringstream in(":(scenario does_bar)\nabc def\n  efg\n+layer1: pqr\n-layer1: xyz");
+  istringstream in(":(scenario does_bar)\n"
+                   "abc def\n"
+                   "  efg\n"
+                   "+layer1: pqr\n"
+                   "-layer1: xyz");
   list<Line> lines;
   tangle(in, lines);
   CHECK_EQ(lines.front().contents, "void test_does_bar() {");  lines.pop_front();
@@ -316,7 +455,11 @@ void test_tangle_can_check_for_absence_at_end_of_scenarios() {
 }
 
 void test_tangle_can_check_for_absence_at_end_of_scenarios2() {
-  istringstream in(":(scenario does_bar)\nabc def\n  efg\n-layer1: pqr\n-layer1: xyz");
+  istringstream in(":(scenario does_bar)\n"
+                   "abc def\n"
+                   "  efg\n"
+                   "-layer1: pqr\n"
+                   "-layer1: xyz");
   list<Line> lines;
   tangle(in, lines);
   CHECK_EQ(lines.front().contents, "void test_does_bar() {");  lines.pop_front();
@@ -328,7 +471,10 @@ void test_tangle_can_check_for_absence_at_end_of_scenarios2() {
 }
 
 void test_tangle_can_check_for_count_in_scenario() {
-  istringstream in(":(scenario does_bar)\nabc def\n  efg\n$layer1: 2");
+  istringstream in(":(scenario does_bar)\n"
+                   "abc def\n"
+                   "  efg\n"
+                   "$layer1: 2");
   list<Line> lines;
   tangle(in, lines);
   CHECK_EQ(lines.front().contents, "void test_does_bar() {");  lines.pop_front();
@@ -339,7 +485,20 @@ void test_tangle_can_check_for_count_in_scenario() {
 }
 
 void test_tangle_can_handle_mu_comments_in_scenario() {
-  istringstream in(":(scenario does_bar)\nabc def\n# comment1\n  efg\n  # indented comment 2\n+layer1: pqr\n# comment inside expected_trace\n+layer1: xyz\n# comment after expected trace\n-layer1: z\n# comment before trace count\n$layer1: 2\n# comment at end\n\n");
+  istringstream in(":(scenario does_bar)\n"
+                   "abc def\n"
+                   "# comment1\n"
+                   "  efg\n"
+                   "  # indented comment 2\n"
+                   "+layer1: pqr\n"
+                   "# comment inside expected_trace\n"
+                   "+layer1: xyz\n"
+                   "# comment after expected trace\n"
+                   "-layer1: z\n"
+                   "# comment before trace count\n"
+                   "$layer1: 2\n"
+                   "# comment at end\n"
+                   "\n");
   list<Line> lines;
   tangle(in, lines);
   CHECK_EQ(lines.front().contents, "void test_does_bar() {");  lines.pop_front();