diff options
-rw-r--r-- | tangle/003tangle.test.cc | 241 |
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(); |