120 lines
2.4 KiB
Go
120 lines
2.4 KiB
Go
package tree_test
|
|
|
|
import (
|
|
"bytes"
|
|
"embed"
|
|
"fmt"
|
|
"log"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"source.toby3d.me/toby3d/tree"
|
|
)
|
|
|
|
//go:embed testdata/*
|
|
var testData embed.FS
|
|
|
|
func Example() {
|
|
file, err := testData.Open(filepath.Join(".", "testdata", "html.tree"))
|
|
if err != nil {
|
|
log.Fatalf("cannot open file: %v", err)
|
|
}
|
|
defer file.Close()
|
|
|
|
tree := tree.Parse(file)
|
|
fmt.Printf("%#v", tree)
|
|
// Output:
|
|
// html
|
|
// body
|
|
// div おはようございます
|
|
}
|
|
|
|
func TestParse(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
//nolint: paralleltest // testName used as range value
|
|
for testName, filePath := range map[string]string{
|
|
"html": filepath.Join(".", "testdata", "html.tree"),
|
|
"math": filepath.Join(".", "testdata", "math.tree"),
|
|
"nursinos": filepath.Join(".", "testdata", "nursinos.tree"),
|
|
"package": filepath.Join(".", "testdata", "package.tree"),
|
|
"print": filepath.Join(".", "testdata", "print.tree"),
|
|
} {
|
|
testName, filePath := testName, filePath
|
|
|
|
t.Run(testName, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
src, err := testData.ReadFile(filePath)
|
|
if err != nil {
|
|
t.Fatalf("cannot open testing file: %v", err)
|
|
}
|
|
|
|
result := tree.Parse(bytes.NewReader(src))
|
|
if string(src) == fmt.Sprintf("%#v", result) {
|
|
return
|
|
}
|
|
|
|
t.Fatalf(`'%#v' is not equal '%s'`, result, string(src))
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestNode_String(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
node := &tree.Node{
|
|
Parent: nil,
|
|
Value: "print Hello world",
|
|
Children: nil,
|
|
}
|
|
|
|
const expResult string = "print Hello world"
|
|
if node.String() == expResult {
|
|
return
|
|
}
|
|
|
|
t.Fatalf(`'%s' is not equal '%s'`, node.String(), expResult)
|
|
}
|
|
|
|
func TestNode_GoString(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
root := &tree.Node{
|
|
Parent: nil,
|
|
Children: make([]*tree.Node, 0),
|
|
Value: "multiply",
|
|
}
|
|
root.Children = append(root.Children, []*tree.Node{{
|
|
Parent: root,
|
|
Children: nil,
|
|
Value: " add 1 1",
|
|
}, {
|
|
Parent: root,
|
|
Children: nil,
|
|
Value: " add 2 2",
|
|
}}...)
|
|
|
|
const expResult string = "multiply\n add 1 1\n add 2 2"
|
|
if root.GoString() == expResult {
|
|
return
|
|
}
|
|
|
|
t.Fatalf(`'%s' is not equal '%s'`, root.GoString(), expResult)
|
|
}
|
|
|
|
func BenchmarkParse(b *testing.B) {
|
|
input := strings.NewReader("title Nursinos Services Offerered\n" +
|
|
"paragraph Here is a list of home nursing services we offer\n" +
|
|
"table\n" +
|
|
" Service Price\n" +
|
|
" BloodPressureCheck $10\n" +
|
|
" TemperatureCheck $5")
|
|
|
|
b.ResetTimer()
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
_ = tree.Parse(input)
|
|
}
|
|
}
|