about summary refs log tree commit diff stats
path: root/tangle/003tangle.test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'tangle/003tangle.test.cc')
-rw-r--r--tangle/003tangle.test.cc530
1 files changed, 100 insertions, 430 deletions
diff --git a/tangle/003tangle.test.cc b/tangle/003tangle.test.cc
index 732c8f2e..c7cc96b4 100644
--- a/tangle/003tangle.test.cc
+++ b/tangle/003tangle.test.cc
@@ -6,10 +6,10 @@ void test_tangle() {
                    "d\n");
   list<Line> dummy;
   tangle(in, dummy);
-  CHECK_TRACE_CONTENTS("tangle", "a"
-                                 "d"
-                                 "b"
-                                 "c");
+  CHECK_TRACE_CONTENTS("tangle", "a\n"
+                                 "d\n"
+                                 "b\n"
+                                 "c\n");
 }
 
 void test_tangle_with_linenumber() {
@@ -20,13 +20,13 @@ void test_tangle_with_linenumber() {
                    "d\n");
   list<Line> dummy;
   tangle(in, dummy);
-  CHECK_TRACE_CONTENTS("tangle", "#line 1"
-                                 "a"
-                                 "#line 5"
-                                 "d"
-                                 "#line 2"
-                                 "b"
-                                 "c");
+  CHECK_TRACE_CONTENTS("tangle", "#line 1\n"
+                                 "a\n"
+                                 "#line 5\n"
+                                 "d\n"
+                                 "#line 2\n"
+                                 "b\n"
+                                 "c\n");
   // no other #line directives
   CHECK_TRACE_DOESNT_CONTAIN("tangle", "#line 3");
   CHECK_TRACE_DOESNT_CONTAIN("tangle", "#line 4");
@@ -40,11 +40,11 @@ void test_tangle_linenumbers_with_filename() {
                    "d\n");
   list<Line> dummy;
   tangle(in, "foo", dummy);
-  CHECK_TRACE_CONTENTS("tangle", "a"
-                                 "#line 5 \"foo\""
-                                 "d"
-                                 "b"
-                                 "c");
+  CHECK_TRACE_CONTENTS("tangle", "a\n"
+                                 "#line 5 \"foo\"\n"
+                                 "d\n"
+                                 "b\n"
+                                 "c\n");
 }
 
 void test_tangle_line_numbers_with_multiple_filenames() {
@@ -57,12 +57,12 @@ void test_tangle_line_numbers_with_multiple_filenames() {
   istringstream in2(":(before b)\n"
                     "d\n");
   tangle(in2, "bar", dummy);
-  CHECK_TRACE_CONTENTS("tangle", "a"
-                                 "#line 2 \"bar\""
-                                 "d"
-                                 "#line 2 \"foo\""
-                                 "b"
-                                 "c");
+  CHECK_TRACE_CONTENTS("tangle", "a\n"
+                                 "#line 2 \"bar\"\n"
+                                 "d\n"
+                                 "#line 2 \"foo\"\n"
+                                 "b\n"
+                                 "c\n");
 }
 
 void test_tangle_linenumbers_with_multiple_directives() {
@@ -77,15 +77,15 @@ void test_tangle_linenumbers_with_multiple_directives() {
                     ":(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");
+  CHECK_TRACE_CONTENTS("tangle", "a\n"
+                                 "#line 2 \"bar\"\n"
+                                 "d\n"
+                                 "#line 2 \"foo\"\n"
+                                 "b\n"
+                                 "#line 4 \"bar\"\n"
+                                 "e\n"
+                                 "#line 3 \"foo\"\n"
+                                 "c\n");
 }
 
 void test_tangle_with_multiple_filenames_after() {
@@ -98,12 +98,12 @@ void test_tangle_with_multiple_filenames_after() {
   istringstream in2(":(after b)\n"
                     "d\n");
   tangle(in2, "bar", dummy);
-  CHECK_TRACE_CONTENTS("tangle", "a"
-                                 "b"
-                                 "#line 2 \"bar\""
-                                 "d"
-                                 "#line 3 \"foo\""
-                                 "c");
+  CHECK_TRACE_CONTENTS("tangle", "a\n"
+                                 "b\n"
+                                 "#line 2 \"bar\"\n"
+                                 "d\n"
+                                 "#line 3 \"foo\"\n"
+                                 "c\n");
 }
 
 void test_tangle_skip_tanglecomments() {
@@ -115,12 +115,12 @@ void test_tangle_skip_tanglecomments() {
                    "d\n");
   list<Line> dummy;
   tangle(in, dummy);
-  CHECK_TRACE_CONTENTS("tangle", "a"
-                                 "b"
-                                 "c"
-                                 ""
-                                 ""
-                                 "d");
+  CHECK_TRACE_CONTENTS("tangle", "a\n"
+                                 "b\n"
+                                 "c\n"
+                                 "\n"
+                                 "\n"
+                                 "d\n");
   CHECK_TRACE_DOESNT_CONTAIN("tangle", "//: 1");
 }
 
@@ -135,14 +135,14 @@ void test_tangle_with_tanglecomments_and_directive() {
                    "e\n");
   list<Line> dummy;
   tangle(in, dummy);
-  CHECK_TRACE_CONTENTS("tangle", "a"
-                                 "#line 6"
-                                 "d"
-                                 "#line 3"
-                                 "b"
-                                 "c"
-                                 "#line 8"
-                                 "e");
+  CHECK_TRACE_CONTENTS("tangle", "a\n"
+                                 "#line 6\n"
+                                 "d\n"
+                                 "#line 3\n"
+                                 "b\n"
+                                 "c\n"
+                                 "#line 8\n"
+                                 "e\n");
   CHECK_TRACE_DOESNT_CONTAIN("tangle", "//: 1");
 }
 
@@ -158,14 +158,14 @@ void test_tangle_with_tanglecomments_inside_directive() {
                    "e\n");
   list<Line> dummy;
   tangle(in, dummy);
-  CHECK_TRACE_CONTENTS("tangle", "a"
-                                 "#line 7"
-                                 "d"
-                                 "#line 3"
-                                 "b"
-                                 "c"
-                                 "#line 9"
-                                 "e");
+  CHECK_TRACE_CONTENTS("tangle", "a\n"
+                                 "#line 7\n"
+                                 "d\n"
+                                 "#line 3\n"
+                                 "b\n"
+                                 "c\n"
+                                 "#line 9\n"
+                                 "e\n");
   CHECK_TRACE_DOESNT_CONTAIN("tangle", "//: 1");
 }
 
@@ -176,9 +176,9 @@ void test_tangle_with_multiword_directives() {
                    "d\n");
   list<Line> dummy;
   tangle(in, dummy);
-  CHECK_TRACE_CONTENTS("tangle", "a b"
-                                 "d"
-                                 "c");
+  CHECK_TRACE_CONTENTS("tangle", "a b\n"
+                                 "d\n"
+                                 "c\n");
 }
 
 void test_tangle_with_quoted_multiword_directives() {
@@ -188,9 +188,9 @@ void test_tangle_with_quoted_multiword_directives() {
                    "d\n");
   list<Line> dummy;
   tangle(in, dummy);
-  CHECK_TRACE_CONTENTS("tangle", "a \"b\""
-                                 "d"
-                                 "c");
+  CHECK_TRACE_CONTENTS("tangle", "a \"b\"\n"
+                                 "d\n"
+                                 "c\n");
 }
 
 void test_tangle2() {
@@ -201,10 +201,10 @@ void test_tangle2() {
                    "d\n");
   list<Line> dummy;
   tangle(in, dummy);
-  CHECK_TRACE_CONTENTS("tangle", "a"
-                                 "b"
-                                 "d"
-                                 "c");
+  CHECK_TRACE_CONTENTS("tangle", "a\n"
+                                 "b\n"
+                                 "d\n"
+                                 "c\n");
 }
 
 void test_tangle_at_end() {
@@ -215,10 +215,10 @@ void test_tangle_at_end() {
                    "d\n");
   list<Line> dummy;
   tangle(in, dummy);
-  CHECK_TRACE_CONTENTS("tangle", "a"
-                                 "b"
-                                 "c"
-                                 "d");
+  CHECK_TRACE_CONTENTS("tangle", "a\n"
+                                 "b\n"
+                                 "c\n"
+                                 "d\n");
 }
 
 void test_tangle_indents_hunks_correctly() {
@@ -229,10 +229,10 @@ void test_tangle_indents_hunks_correctly() {
                    "d\n");
   list<Line> dummy;
   tangle(in, dummy);
-  CHECK_TRACE_CONTENTS("tangle", "a"
-                                 "  b"
-                                 "  d"
-                                 "c");
+  CHECK_TRACE_CONTENTS("tangle", "a\n"
+                                 "  b\n"
+                                 "  d\n"
+                                 "c\n");
 }
 
 void test_tangle_warns_on_missing_target() {
@@ -261,7 +261,7 @@ void test_tangle_delete_range_of_lines() {
                    ":(delete{} \"b\")\n");
   list<Line> dummy;
   tangle(in, dummy);
-  CHECK_TRACE_CONTENTS("tangle", "a");
+  CHECK_TRACE_CONTENTS("tangle", "a\n");
   CHECK_TRACE_DOESNT_CONTAIN("tangle", "b");
   CHECK_TRACE_DOESNT_CONTAIN("tangle", "c");
 }
@@ -274,9 +274,9 @@ void test_tangle_replace() {
                    "d\n");
   list<Line> dummy;
   tangle(in, dummy);
-  CHECK_TRACE_CONTENTS("tangle", "a"
-                                 "d"
-                                 "c");
+  CHECK_TRACE_CONTENTS("tangle", "a\n"
+                                 "d\n"
+                                 "c\n");
   CHECK_TRACE_DOESNT_CONTAIN("tangle", "b");
 }
 
@@ -290,9 +290,9 @@ void test_tangle_replace_range_of_lines() {
                    "e\n");
   list<Line> dummy;
   tangle(in, dummy);
-  CHECK_TRACE_CONTENTS("tangle", "a"
-                                 "d"
-                                 "e");
+  CHECK_TRACE_CONTENTS("tangle", "a\n"
+                                 "d\n"
+                                 "e\n");
   CHECK_TRACE_DOESNT_CONTAIN("tangle", "b {");
   CHECK_TRACE_DOESNT_CONTAIN("tangle", "c");
 }
@@ -308,10 +308,10 @@ void test_tangle_replace_tracks_old_lines() {
                    "e\n");
   list<Line> dummy;
   tangle(in, dummy);
-  CHECK_TRACE_CONTENTS("tangle", "a"
-                                 "d"
-                                 "c"
-                                 "e");
+  CHECK_TRACE_CONTENTS("tangle", "a\n"
+                                 "d\n"
+                                 "c\n"
+                                 "e\n");
   CHECK_TRACE_DOESNT_CONTAIN("tangle", "b {");
 }
 
@@ -325,12 +325,12 @@ void test_tangle_nested_patterns() {
                    "e");
   list<Line> dummy;
   tangle(in, dummy);
-  CHECK_TRACE_CONTENTS("tangle", "a"
-                                 "c"
-                                 "b"
-                                 "c"
-                                 "e"
-                                 "d");
+  CHECK_TRACE_CONTENTS("tangle", "a\n"
+                                 "c\n"
+                                 "b\n"
+                                 "c\n"
+                                 "e\n"
+                                 "d\n");
 }
 
 void test_tangle_nested_patterns2() {
@@ -343,346 +343,16 @@ void test_tangle_nested_patterns2() {
                    "e");
   list<Line> dummy;
   tangle(in, dummy);
-  CHECK_TRACE_CONTENTS("tangle", "a"
-                                 "c"
-                                 "b"
-                                 "c"
-                                 "e"
-                                 "d");
+  CHECK_TRACE_CONTENTS("tangle", "a\n"
+                                 "c\n"
+                                 "b\n"
+                                 "c\n"
+                                 "e\n"
+                                 "d\n");
 }
 
 // todo: include line numbers in tangle errors
 
-//// scenarios
-
-void test_tangle_supports_scenarios() {
-  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();
-  CHECK_EQ(lines.front().contents, "  run(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"abc def\\n\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  CHECK_TRACE_CONTENTS(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"layer1: pqr\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"layer2: xyz\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "}");  lines.pop_front();
-  CHECK(lines.empty());
-}
-
-void test_tangle_ignores_empty_lines_in_scenarios() {
-  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();
-  CHECK_EQ(lines.front().contents, "  run(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"abc def\\n\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  CHECK_TRACE_CONTENTS(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"layer1: pqr\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"layer2: xyz\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "}");  lines.pop_front();
-  CHECK(lines.empty());
-}
-
-void test_tangle_handles_empty_lines_in_scenarios() {
-  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)\n"
-                   "abc def\n"
-                   "+layer1: pqr");
-  list<Line> lines;
-  tangle(in, lines);
-  CHECK_EQ(lines.front().contents, "void test_does_bar() {");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  foo(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"abc def\\n\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  CHECK_TRACE_CONTENTS(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"layer1: pqr\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "}");  lines.pop_front();
-  CHECK(lines.empty());
-
-  istringstream cleanup(":(scenarios run)\n");
-  tangle(cleanup, lines);
-}
-
-void test_tangle_can_hide_warnings_in_scenarios() {
-  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();
-  CHECK_EQ(lines.front().contents, "  Hide_warnings = true;");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  run(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"abc def\\n\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  CHECK_TRACE_CONTENTS(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"layer1: pqr\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"layer2: xyz\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "}");  lines.pop_front();
-  CHECK(lines.empty());
-}
-
-void test_tangle_can_include_c_code_at_end_of_scenario() {
-  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();
-  CHECK_EQ(lines.front().contents, "  run(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"abc def\\n\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  CHECK_TRACE_CONTENTS(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"layer1: pqr\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"layer2: xyz\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  int x = 1;");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "}");  lines.pop_front();
-  CHECK(lines.empty());
-}
-
-void test_tangle_can_include_c_code_at_end_of_scenario_without_trace_expectations() {
-  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();
-  CHECK_EQ(lines.front().contents, "  run(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"abc def\\n\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  int x = 1;");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "}");  lines.pop_front();
-  CHECK(lines.empty());
-}
-
-void test_tangle_supports_strings_in_scenarios() {
-  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();
-  CHECK_EQ(lines.front().contents, "  run(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"abc \\\"def\\\"\\n\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  CHECK_TRACE_CONTENTS(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"layer1: pqr\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"layer2: \\\"xyz\\\"\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "}");  lines.pop_front();
-  CHECK(lines.empty());
-}
-
-void test_tangle_supports_strings_in_scenarios2() {
-  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();
-  CHECK_EQ(lines.front().contents, "  run(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"abc \\\"\\\"\\n\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  CHECK_TRACE_CONTENTS(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"layer1: pqr\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"layer2: \\\"\\\"\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "}");  lines.pop_front();
-  CHECK(lines.empty());
-}
-
-void test_tangle_supports_multiline_input_in_scenarios() {
-  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();
-  CHECK_EQ(lines.front().contents, "  run(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"abc def\\n\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"  efg\\n\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  CHECK_TRACE_CONTENTS(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"layer1: pqr\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"layer2: \\\"\\\"\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "}");  lines.pop_front();
-  CHECK(lines.empty());
-}
-
-void test_tangle_supports_reset_in_scenarios() {
-  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();
-  CHECK_EQ(lines.front().contents, "  run(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"abc def\\n\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  CLEAR_TRACE;");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  run(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"efg\\n\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  CHECK_TRACE_CONTENTS(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"layer1: pqr\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"layer2: \\\"\\\"\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "}");  lines.pop_front();
-  CHECK(lines.empty());
-}
-
-void test_tangle_can_check_for_absence_at_end_of_scenarios() {
-  istringstream in(":(scenario does_bar)\n"
-                   "abc def\n"
-                   "  efg\n"
-                   "+layer1: pqr\n"
-                   "-layer1: xyz");
-  list<Line> lines;
-  tangle(in, lines);
-//?   for (list<Line>::iterator p = lines.begin();  p != lines.end();  ++p)
-//?     cerr << p->contents << '\n';
-  CHECK_EQ(lines.front().contents, "void test_does_bar() {");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  run(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"abc def\\n\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"  efg\\n\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  CHECK_TRACE_CONTENTS(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"layer1: pqr\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  CHECK_TRACE_DOESNT_CONTAIN(\"layer1: xyz\");");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "}");  lines.pop_front();
-  CHECK(lines.empty());
-}
-
-void test_tangle_can_check_for_absence_at_end_of_scenarios2() {
-  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();
-  CHECK_EQ(lines.front().contents, "  run(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"abc def\\n\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"  efg\\n\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  CHECK_TRACE_DOESNT_CONTAIN(\"layer1: pqr\");");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  CHECK_TRACE_DOESNT_CONTAIN(\"layer1: xyz\");");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "}");  lines.pop_front();
-  CHECK(lines.empty());
-}
-
-void test_tangle_can_check_for_count_in_scenario() {
-  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();
-  CHECK_EQ(lines.front().contents, "  run(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"abc def\\n\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"  efg\\n\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  CHECK_TRACE_COUNT(\"layer1\", 2);");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "}");  lines.pop_front();
-  CHECK(lines.empty());
-}
-
-void test_tangle_can_handle_mu_comments_in_scenario() {
-  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();
-  CHECK_EQ(lines.front().contents, "  run(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"abc def\\n\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"# comment1\\n\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"  efg\\n\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"  # indented comment 2\\n\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  CHECK_TRACE_CONTENTS(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"layer1: pqr\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"layer1: xyz\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  CHECK_TRACE_DOESNT_CONTAIN(\"layer1: z\");");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  CHECK_TRACE_COUNT(\"layer1\", 2);");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "}");  lines.pop_front();
-  CHECK(lines.empty());
-}
-
-void test_tangle_can_interleave_present_and_absent_lines_to_kludgily_avoid_specifying_order() {
-  istringstream in(":(scenario does_bar)\n"
-                   "abc def\n"
-                   "+layer1: pqr\n"
-                   "-absent\n"
-                   "+layer2: xyz");
-  list<Line> lines;
-  tangle(in, lines);
-  CHECK_EQ(lines.front().contents, "void test_does_bar() {");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  run(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"abc def\\n\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  CHECK_TRACE_CONTENTS(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"layer1: pqr\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  CHECK_TRACE_DOESNT_CONTAIN(\"absent\");");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  CHECK_TRACE_CONTENTS(");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "      \"layer2: xyz\"");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "  );");  lines.pop_front();
-  CHECK_EQ(lines.front().contents, "}");  lines.pop_front();
-  CHECK(lines.empty());
-}
-
 //// helpers
 
 void test_trim() {