blob: 0c6dca27137e1bcd48b95d4748853d7e292e84f1 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package symbolize
import (
"bytes"
"fmt"
"testing"
)
func TestRegexTokenize(t *testing.T) {
var builder regexpTokenizerBuilder
var out bytes.Buffer
builder.addRule("{a+}", func(args ...string) {
fmt.Fprintf(&out, "a+ case: %v\n", args)
})
builder.addRule("{b+}", func(args ...string) {
fmt.Fprintf(&out, "b+ case: %v\n", args)
})
builder.addRule("{(x)(y)(z)}", func(args ...string) {
fmt.Fprintf(&out, "xyz case: %v\n", args)
})
tokenizer, err := builder.compile(func(str string) {
fmt.Fprintf(&out, "default case: %s\n", str)
})
if err != nil {
t.Fatal(err)
}
tokenizer.run("blarg{a}foo{bbbbb}{xyz}{aa}{aa}baz[test]rest")
expected := `default case: blarg
a+ case: [{a}]
default case: foo
b+ case: [{bbbbb}]
xyz case: [{xyz} x y z]
a+ case: [{aa}]
a+ case: [{aa}]
default case: baz[test]rest
`
actual := string(out.Bytes())
if expected != string(out.Bytes()) {
t.Error("expected\n", expected, "\ngot\n", actual)
}
}