Ticket #8687: regtest.go

File regtest.go, 1.0 KB (added by dommage, 12 years ago)

GO tool for running regexp tests.

Line 
1package main
2
3import (
4 "encoding/json"
5 "io/ioutil"
6 "log"
7 "os"
8 "regexp"
9)
10
11type test struct {
12 Key string
13 Regexp string
14 Match []string
15 Reject []string
16}
17
18type testSet struct {
19 Tests []test
20}
21
22func main() {
23 log.SetFlags(log.Ltime)
24 var filename string
25 if len(os.Args) > 1 {
26 filename = os.Args[1]
27 } else {
28 log.Printf("Usage: regtest <filename>")
29 return
30 }
31
32 file, err := os.Open(filename)
33 bytes, err := ioutil.ReadAll(file)
34 if err != nil {
35 log.Println(err)
36 return
37 }
38 var tests testSet
39 if err := json.Unmarshal(bytes, &tests); err != nil {
40 log.Print(err)
41 return
42 }
43
44 for _, t := range tests.Tests {
45 _ = runTest(t)
46 }
47}
48
49func runTest(t test) (result bool) {
50 r := regexp.MustCompile(t.Regexp)
51 result = true
52 log.Printf("key=%s; regexp=%s", t.Key, r.String())
53 for _, m := range t.Match {
54 if r.MatchString(m) == false {
55 log.Printf("Match failed: '%s'", m)
56 result = false
57 }
58 }
59 for _, m := range t.Reject {
60 if r.MatchString(m) == true {
61 log.Printf("Reject failed: '%s'", m)
62 result = false
63 }
64 }
65 return
66}