aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/syntax/parser_test.go
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2016-12-09 14:28:49 -0800
committerRobert Griesemer <gri@golang.org>2016-12-09 23:34:30 +0000
commita0c5405c18568900a9b7365297adc1cd846bbdac (patch)
tree2165478ac52c7e8ae03c73d533cc14db65fa3aac /src/cmd/compile/internal/syntax/parser_test.go
parentf3b56de4d2a9ad5a3ed538455158b8e003b2e25e (diff)
downloadgo-a0c5405c18568900a9b7365297adc1cd846bbdac.tar.xz
[dev.inline] cmd/compile/internal/syntax: add tests for //line directives
Change-Id: I77dc73bfe79e43bbadf85d7eb3c5f8990ec72023 Reviewed-on: https://go-review.googlesource.com/34248 Run-TryBot: Robert Griesemer <gri@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Diffstat (limited to 'src/cmd/compile/internal/syntax/parser_test.go')
-rw-r--r--src/cmd/compile/internal/syntax/parser_test.go44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/syntax/parser_test.go b/src/cmd/compile/internal/syntax/parser_test.go
index fb1a761531..23fed3b105 100644
--- a/src/cmd/compile/internal/syntax/parser_test.go
+++ b/src/cmd/compile/internal/syntax/parser_test.go
@@ -182,3 +182,47 @@ func TestParseFile(t *testing.T) {
t.Errorf("got %v; want first error %v", err, first)
}
}
+
+func TestLineDirectives(t *testing.T) {
+ for _, test := range []struct {
+ src, msg string
+ filename string
+ line, col uint
+ }{
+ // test validity of //line directive
+ {`//line :`, "invalid line number: ", "", 1, 8},
+ {`//line :x`, "invalid line number: x", "", 1, 8},
+ {`//line foo :`, "invalid line number: ", "", 1, 12},
+ {`//line foo:123abc`, "invalid line number: 123abc", "", 1, 11},
+ {`/**///line foo:x`, "invalid line number: x", "", 1, 15},
+ {`//line foo:0`, "invalid line number: 0", "", 1, 11},
+ {fmt.Sprintf(`//line foo:%d`, lineMax+1), fmt.Sprintf("invalid line number: %d", lineMax+1), "", 1, 11},
+
+ // test effect of //line directive on (relative) position information
+ {"//line foo:123\n foo", "syntax error: package statement must be first", "foo", 123, 3},
+ {"//line foo:123\n//line bar:345\nfoo", "syntax error: package statement must be first", "bar", 345, 0},
+ } {
+ _, err := ParseBytes("", []byte(test.src), nil, nil, 0)
+ if err == nil {
+ t.Errorf("%s: no error reported", test.src)
+ continue
+ }
+ perr, ok := err.(Error)
+ if !ok {
+ t.Errorf("%s: got %v; want parser error", test.src, err)
+ continue
+ }
+ if msg := perr.Msg; msg != test.msg {
+ t.Errorf("%s: got msg = %q; want %q", test.src, msg, test.msg)
+ }
+ if filename := perr.Pos.RelFilename(); filename != test.filename {
+ t.Errorf("%s: got filename = %q; want %q", test.src, filename, test.filename)
+ }
+ if line := perr.Pos.RelLine(); line != test.line {
+ t.Errorf("%s: got line = %d; want %d", test.src, line, test.line)
+ }
+ if col := perr.Pos.Col(); col != test.col {
+ t.Errorf("%s: got col = %d; want %d", test.src, col, test.col)
+ }
+ }
+}