| 1 | package main
|
|---|
| 2 |
|
|---|
| 3 | import (
|
|---|
| 4 | "encoding/json"
|
|---|
| 5 | "io/ioutil"
|
|---|
| 6 | "log"
|
|---|
| 7 | "os"
|
|---|
| 8 | "regexp"
|
|---|
| 9 | )
|
|---|
| 10 |
|
|---|
| 11 | type test struct {
|
|---|
| 12 | Key string
|
|---|
| 13 | Regexp string
|
|---|
| 14 | Match []string
|
|---|
| 15 | Reject []string
|
|---|
| 16 | }
|
|---|
| 17 |
|
|---|
| 18 | type testSet struct {
|
|---|
| 19 | Tests []test
|
|---|
| 20 | }
|
|---|
| 21 |
|
|---|
| 22 | func 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 |
|
|---|
| 49 | func 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 | }
|
|---|