Newer
Older
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
74
75
76
77
78
79
80
81
82
83
84
85
package test
import (
"bufio"
"fmt"
"os"
"path/filepath"
"strconv"
"strings"
"tuxpa.in/a/zlog/log"
)
type Tester struct {
config Config
}
func NewTester(config Config) *Tester {
return &Tester{
config: config,
}
}
func (T *Tester) Run() error {
dirEntries, err := os.ReadDir(T.config.TestsPath)
if err != nil {
return err
}
for _, dirEntry := range dirEntries {
if dirEntry.IsDir() {
continue
}
path := filepath.Join(T.config.TestsPath, dirEntry.Name())
log.Printf(`Running test "%s"`, path)
file, err := os.Open(path)
if err != nil {
return err
}
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := scanner.Text()
fields := strings.Fields(line)
if len(fields) == 0 {
continue
}
instruction := fields[0]
arguments := make([]any, 0, len(fields)-1)
for _, argString := range fields[1:] {
var arg any
switch {
case argString == "true":
arg = true
case argString == "false":
arg = false
case strings.HasPrefix(argString, `"`), strings.HasPrefix(argString, "`"):
log.Printf("unquote %s", argString)
arg, err = strconv.Unquote(argString)
if err != nil {
return err
}
default:
return fmt.Errorf(`unknown argument "%s"`, argString)
}
arguments = append(arguments, arg)
}
log.Print(instruction, " ", arguments)
}
if err = scanner.Err(); err != nil {
return err
}
if err = file.Close(); err != nil {
return err
}
log.Print("OK")
}
return nil
}