87 lines
1.6 KiB
Go
87 lines
1.6 KiB
Go
|
package cascadia
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
var identifierTests = map[string]string{
|
||
|
"x": "x",
|
||
|
"96": "",
|
||
|
"-x": "-x",
|
||
|
`r\e9 sumé`: "résumé",
|
||
|
`a\"b`: `a"b`,
|
||
|
}
|
||
|
|
||
|
func TestParseIdentifier(t *testing.T) {
|
||
|
for source, want := range identifierTests {
|
||
|
p := &parser{s: source}
|
||
|
got, err := p.parseIdentifier()
|
||
|
|
||
|
if err != nil {
|
||
|
if want == "" {
|
||
|
// It was supposed to be an error.
|
||
|
continue
|
||
|
}
|
||
|
t.Errorf("parsing %q: got error (%s), want %q", source, err, want)
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
if want == "" {
|
||
|
if err == nil {
|
||
|
t.Errorf("parsing %q: got %q, want error", source, got)
|
||
|
}
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
if p.i < len(source) {
|
||
|
t.Errorf("parsing %q: %d bytes left over", source, len(source)-p.i)
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
if got != want {
|
||
|
t.Errorf("parsing %q: got %q, want %q", source, got, want)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var stringTests = map[string]string{
|
||
|
`"x"`: "x",
|
||
|
`'x'`: "x",
|
||
|
`'x`: "",
|
||
|
"'x\\\r\nx'": "xx",
|
||
|
`"r\e9 sumé"`: "résumé",
|
||
|
`"a\"b"`: `a"b`,
|
||
|
}
|
||
|
|
||
|
func TestParseString(t *testing.T) {
|
||
|
for source, want := range stringTests {
|
||
|
p := &parser{s: source}
|
||
|
got, err := p.parseString()
|
||
|
|
||
|
if err != nil {
|
||
|
if want == "" {
|
||
|
// It was supposed to be an error.
|
||
|
continue
|
||
|
}
|
||
|
t.Errorf("parsing %q: got error (%s), want %q", source, err, want)
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
if want == "" {
|
||
|
if err == nil {
|
||
|
t.Errorf("parsing %q: got %q, want error", source, got)
|
||
|
}
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
if p.i < len(source) {
|
||
|
t.Errorf("parsing %q: %d bytes left over", source, len(source)-p.i)
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
if got != want {
|
||
|
t.Errorf("parsing %q: got %q, want %q", source, got, want)
|
||
|
}
|
||
|
}
|
||
|
}
|