* test/lisp/progmodes/cperl-mode-tests.el: Adjust here-doc tests for perl-mode
(cperl-test-identify-heredoc, cperl-test-identify-no-heredoc): Tweak tests so they can also be used for perl-mode.
This commit is contained in:
parent
bc9516a6f1
commit
455bed3c72
1 changed files with 26 additions and 31 deletions
|
@ -158,66 +158,61 @@ point in the distant past, and is still broken in perl-mode. "
|
|||
"Test whether a construct containing \"<<\" followed by a
|
||||
bareword is properly identified for a here-document if
|
||||
appropriate."
|
||||
(skip-unless (eq cperl-test-mode #'cperl-mode))
|
||||
(let ((here-docs
|
||||
'("$text .= <<DELIM;" ; mutator concatenating a here-doc
|
||||
"func($arg) . <<DELIM;" ; concatenating a return value
|
||||
"func 1, <<DELIM;" ; a function taking two arguments
|
||||
"print {a} <<DELIM;" ; printing to a file handle
|
||||
))
|
||||
;; There forms are currently mishandled in `perl-mode' :-(
|
||||
(here-docs-cperl
|
||||
'("print {a} <<DELIM;" ; printing to a file handle
|
||||
"system $prog <<DELIM;" ; lie about the program's name
|
||||
)
|
||||
)
|
||||
(undecidable
|
||||
))
|
||||
(_undecidable
|
||||
'("foo <<bar") ; could be either "foo() <<bar"
|
||||
; or "foo(<<bar)"
|
||||
)
|
||||
)
|
||||
(dolist (code here-docs)
|
||||
))
|
||||
(dolist (code (append here-docs (if (eq cperl-test-mode #'cperl-mode)
|
||||
here-docs-cperl)))
|
||||
(with-temp-buffer
|
||||
(insert code)
|
||||
(insert code "\n\nDELIM\n")
|
||||
(funcall cperl-test-mode)
|
||||
(goto-char (point-min))
|
||||
(search-forward "<<DELIM")
|
||||
;; point is now after delimiter, as in `cperl-find-pods-heres'
|
||||
(should (cperl-is-here-doc-p (match-beginning 0)))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(forward-line 1)
|
||||
;; We should now be within a here-doc.
|
||||
(let ((ppss (syntax-ppss)))
|
||||
(should (and (nth 8 ppss) (nth 4 ppss))))
|
||||
))))
|
||||
|
||||
(ert-deftest cperl-test-identify-no-heredoc ()
|
||||
"Test whether a construct containing \"<<\" which is not a
|
||||
here-document is properly rejected."
|
||||
(skip-unless (eq cperl-test-mode #'cperl-mode))
|
||||
(let (
|
||||
(not-here-docs
|
||||
'("while (<<>>) { ...; }" ; double angle bracket operator
|
||||
'("while (<<>>) {" ; double angle bracket operator
|
||||
"expr <<func();" ; left shift by a return value
|
||||
"$var <<func;" ; left shift by a return value
|
||||
"($var+1) <<func;" ; same for an expression
|
||||
"$hash{key} <<func;" ; same for a hash element
|
||||
"or $var <<func;" ; same for an expression
|
||||
"sorted $by <<func" ; _not_ a call to sort
|
||||
)
|
||||
)
|
||||
(undecidable
|
||||
))
|
||||
(_undecidable
|
||||
'("foo <<bar" ; could be either "foo() <<bar"
|
||||
; or "foo(<<bar)"
|
||||
"$foo = <<;") ; empty delim forbidden since 5.28
|
||||
)
|
||||
)
|
||||
))
|
||||
(dolist (code not-here-docs)
|
||||
(with-temp-buffer
|
||||
(insert code)
|
||||
(insert code "\n\n")
|
||||
(message "inserting: %S" code)
|
||||
(funcall cperl-test-mode)
|
||||
(goto-char (point-min))
|
||||
(re-search-forward "<<\\(func\\)?")
|
||||
;; point is now after delimiter, as in `cperl-find-pods-heres'
|
||||
(should-not (cperl-is-here-doc-p (match-beginning 0)))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(forward-line 1)
|
||||
;; Point is not within a here-doc (nor string nor comment).
|
||||
(let ((ppss (syntax-ppss)))
|
||||
(should-not (nth 8 ppss)))
|
||||
))))
|
||||
|
||||
(ert-deftest cperl-test-here-doc-missing-end ()
|
||||
"Verify that a missing here-document terminator gives a message.
|
||||
|
|
Loading…
Add table
Reference in a new issue