diff options
author | Robert Griesemer <gri@golang.org> | 2009-06-01 19:12:10 -0700 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2009-06-01 19:12:10 -0700 |
commit | e6cda92d15701ccca5734644b51eedec9e6d2f33 (patch) | |
tree | c4a3fbed19d3eb6a17b18d5924c0ebaa205d8fdd /src/lib/go/scanner/scanner_test.go | |
parent | ad3bd653fed89b3d9ea879254243d7fdc764d342 (diff) | |
download | golang-e6cda92d15701ccca5734644b51eedec9e6d2f33.tar.gz |
- enable scanner to handle illegal chars w/o returning an error
so that it can be used for non-Go chars
- adjust parser accordingly
R=rsc
DELTA=58 (42 added, 2 deleted, 14 changed)
OCL=29688
CL=29703
Diffstat (limited to 'src/lib/go/scanner/scanner_test.go')
-rw-r--r-- | src/lib/go/scanner/scanner_test.go | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/src/lib/go/scanner/scanner_test.go b/src/lib/go/scanner/scanner_test.go index 19fe9864f..0defece8b 100644 --- a/src/lib/go/scanner/scanner_test.go +++ b/src/lib/go/scanner/scanner_test.go @@ -188,7 +188,7 @@ func TestScan(t *testing.T) { // verify scan index := 0; eloc := token.Position{0, 1, 1}; - nerrors := scanner.Tokenize(io.StringBytes(src), &TestErrorHandler{t}, true, + nerrors := scanner.Tokenize(io.StringBytes(src), &TestErrorHandler{t}, scanner.ScanComments, func (pos token.Position, tok token.Token, litb []byte) bool { e := elt{token.EOF, "", special}; if index < len(tokens) { @@ -234,7 +234,7 @@ func TestInit(t *testing.T) { var s scanner.Scanner; // 1st init - s.Init(io.StringBytes("if true { }"), nil, false); + s.Init(io.StringBytes("if true { }"), nil, 0); s.Scan(); // if s.Scan(); // true pos, tok, lit := s.Scan(); // { @@ -243,7 +243,7 @@ func TestInit(t *testing.T) { } // 2nd init - s.Init(io.StringBytes("go true { ]"), nil, false); + s.Init(io.StringBytes("go true { ]"), nil, 0); pos, tok, lit = s.Scan(); // go if tok != token.GO { t.Errorf("bad token: got %s, expected %s", tok.String(), token.GO); @@ -253,3 +253,24 @@ func TestInit(t *testing.T) { t.Errorf("found %d errors", s.ErrorCount); } } + + +func TestIllegalChars(t *testing.T) { + var s scanner.Scanner; + + const src = "*?*$*@*"; + s.Init(io.StringBytes(src), &TestErrorHandler{t}, scanner.AllowIllegalChars); + for offs, ch := range src { + pos, tok, lit := s.Scan(); + if pos.Offset != offs { + t.Errorf("bad position for %s: got %d, expected %d", string(lit), pos.Offset, offs); + } + if tok == token.ILLEGAL && string(lit) != string(ch) { + t.Errorf("bad token: got %s, expected %s", string(lit), string(ch)); + } + } + + if s.ErrorCount != 0 { + t.Errorf("found %d errors", s.ErrorCount); + } +} |