This repository has been archived by the owner on Jul 4, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
scanner_test.go
73 lines (68 loc) · 1.66 KB
/
scanner_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//-----------------------------------------------------------------------------
// Copyright (c) 2022 Detlef Stern
//
// This file is part of sxpf.
//
// sxpf is licensed under the latest version of the EUPL // (European Union
// Public License). Please see file LICENSE.txt for your rights and obligations
// under this license.
//-----------------------------------------------------------------------------
package sxpf_test
import (
"bytes"
"strings"
"testing"
"github.com/t73fde/sxpf"
)
func TestValidScans(t *testing.T) {
t.Parallel()
s := sxpf.NewScanner(strings.NewReader(" "))
tok := s.Next()
if tok.Typ != sxpf.TokEOF {
t.Error(tok)
}
}
func TestScanner(t *testing.T) {
t.Parallel()
testcases := []struct {
src string
exp string
}{
{"", ""},
{"a", "a"},
{"a ; comment", "a"},
{"(", "("},
{"(.)[{}]", "(.)[{}]"},
{"a.", "a."},
{`""`, ``},
{`"a"`, `a`},
{`"\""`, `"`},
{`"\\"`, "\\"},
{`"\t"`, "\t"},
{`"\r"`, "\r"},
{`"\n"`, "\n"},
{`"\x"`, `x`}, {`"\x4"`, `x4`}, {`"\x41"`, `A`}, {`"\x4g"`, `x4g`},
{`"\u"`, `u`}, {`"\u0"`, `u0`}, {`"\u00"`, `u00`}, {`"\u004"`, `u004`}, {`"\u0042"`, `B`},
{`"\U"`, `U`}, {`"\U0"`, `U0`}, {`"\U00"`, `U00`}, {`"\U000"`, `U000`}, {`"\U0000"`, `U0000`},
{`"\U00004"`, `U00004`}, {`"\U000043"`, `C`},
}
for i, tc := range testcases {
var buf bytes.Buffer
s := sxpf.NewScanner(strings.NewReader(tc.src))
for {
tok := s.Next()
if tok.Typ == sxpf.TokEOF {
break
}
if tok.Typ == sxpf.TokErr {
buf.WriteByte('E')
break
}
buf.WriteString(tok.Val)
}
got := buf.String()
if got != tc.exp {
t.Errorf("%d: %q -> %q, but got %q", i, tc.src, tc.exp, got)
}
}
}