aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/test/script/testscript28
-rw-r--r--unit-tests/test/script/lexer/buildfile2
-rw-r--r--unit-tests/test/script/lexer/comment.test113
3 files changed, 130 insertions, 13 deletions
diff --git a/tests/test/script/testscript b/tests/test/script/testscript
index 9b43467..9055062 100644
--- a/tests/test/script/testscript
+++ b/tests/test/script/testscript
@@ -46,8 +46,10 @@ EOE
# @@ TMP Need does not compare test.
#
$* -i 1 <:"foo" >:"foo" # no-newline-str
-#$* -i 1 <:"foo" >!"foo" # no-newline-str-fail1
-#$* -i 1 <"foo" >:!"foo" # no-newline-str-fail2
+#\
+$* -i 1 <:"foo" >!"foo" # no-newline-str-fail1
+$* -i 1 <"foo" >:!"foo" # no-newline-str-fail2
+#\
$* -i 1 <<:EOI >>:EOO # no-newline-doc
foo
@@ -55,14 +57,16 @@ EOI
foo
EOO
-#$* -i 1 <<:EOI >>!EOO # no-newline-doc-fail1
-#foo
-#EOI
-#foo
-#EOO
+#\
+$* -i 1 <<:EOI >>!EOO # no-newline-doc-fail1
+foo
+EOI
+foo
+EOO
-#$* -i 1 <<EOI >>:!EOO # no-newline-doc-fail2
-#foo
-#EOI
-#foo
-#EOO
+$* -i 1 <<EOI >>:!EOO # no-newline-doc-fail2
+foo
+EOI
+foo
+EOO
+#\
diff --git a/unit-tests/test/script/lexer/buildfile b/unit-tests/test/script/lexer/buildfile
index 70be793..856d35d 100644
--- a/unit-tests/test/script/lexer/buildfile
+++ b/unit-tests/test/script/lexer/buildfile
@@ -8,6 +8,6 @@ import libs = libbutl%lib{butl}
src = token lexer diagnostics utility variable name test/script/{token lexer}
exe{driver}: cxx{driver} ../../../../build2/cxx{$src} $libs \
-test{script-line assign-line variable-line variable}
+test{script-line assign-line variable-line variable comment}
include ../../../../build2/
diff --git a/unit-tests/test/script/lexer/comment.test b/unit-tests/test/script/lexer/comment.test
new file mode 100644
index 0000000..0092ed9
--- /dev/null
+++ b/unit-tests/test/script/lexer/comment.test
@@ -0,0 +1,113 @@
+# @@ This one should be moved to build2/lexer since we use base lexer
+# functionality as is.
+#
+test.arguments += script-line
+
+# Single-line comments.
+
+$* <<EOI >>:EOO # single-only
+# comment
+EOI
+EOO
+
+$* <<EOI >>EOO # single-first
+# comment
+foo
+EOI
+'foo'
+<newline>
+EOO
+
+$* <<EOI >>EOO # single-last
+foo
+# comment
+EOI
+'foo'
+<newline>
+EOO
+
+$* <<EOI >>EOO # single-few
+foo
+# comment
+# comment
+EOI
+'foo'
+<newline>
+EOO
+
+$* <<EOI >>EOO # single-cont
+foo
+# comment\\
+bar
+EOI
+'foo'
+<newline>
+'bar'
+<newline>
+EOO
+
+$* <<EOI >>EOO # single-same
+foo # comment
+bar # comment
+EOI
+'foo'
+<newline>
+'bar'
+<newline>
+EOO
+
+# Multi-line comments.
+#
+
+$* <<EOI >>:EOO # multi-only
+#\\
+comment
+comment
+#\\
+EOI
+EOO
+
+$* <<EOI >>:EOO # multi-empty
+#\\
+#\\
+EOI
+EOO
+
+$* <<EOI >>EOO # multi-start-same
+foo #\\
+comment
+comment
+#\\
+EOI
+'foo'
+<newline>
+EOO
+
+$* <<EOI >>EOO # multi-end-same
+#\\
+comment
+comment
+foo #\\
+bar
+EOI
+'bar'
+<newline>
+EOO
+
+$* <<EOI >>EOO # multi-end-not
+#\\
+comment
+#\\ not an end
+foo #\\
+bar
+EOI
+'bar'
+<newline>
+EOO
+
+$* <<EOI 2>>EOE != 0 # multi-unterm
+#\\
+comment
+EOI
+stdin:3:1: error: unterminated multi-line comment
+EOE