From fb3bfe7a21dfdcc036272fd9b2fe1dc377d1af7e Mon Sep 17 00:00:00 2001 From: a <a@tuxpa.in> Date: Wed, 7 Jun 2023 23:08:22 -0500 Subject: [PATCH] tests --- pkg/jrpctest/testdata.go | 94 +++++++++++++++++++++++++++++++++++ pkg/jrpctest/testdata_test.go | 22 ++++++++ 2 files changed, 116 insertions(+) create mode 100644 pkg/jrpctest/testdata.go create mode 100644 pkg/jrpctest/testdata_test.go diff --git a/pkg/jrpctest/testdata.go b/pkg/jrpctest/testdata.go new file mode 100644 index 0000000..eab23a5 --- /dev/null +++ b/pkg/jrpctest/testdata.go @@ -0,0 +1,94 @@ +package jrpctest + +import ( + "bufio" + "bytes" + "embed" + "encoding/json" + "io" + "io/fs" +) + +//go:embed testdata +var originalTestDataFS embed.FS + +var OriginalTestData = &TestData{} + +func init() { + err := fs.WalkDir(originalTestDataFS, "testdata", func(path string, d fs.DirEntry, err error) error { + if err != nil { + return err + } + if d.IsDir() { + return nil + } + file, err := originalTestDataFS.Open(path) + if err != nil { + return err + } + OriginalTestData.AddTestData(d.Name(), file) + return nil + }) + if err != nil { + panic(err) + } +} + +func (td *TestData) AddTestData(name string, rd io.Reader) *TestData { + s := bufio.NewScanner(rd) + t := &TestFile{ + Name: name, + } + td.Files = append(td.Files, t) + currentPair := &TestPair{ + Request: nil, + } + var ( + arrowRight = []byte("-->") + arrowLeft = []byte("<--") + comment = []byte("//") + ) + for s.Scan() { + txt := bytes.TrimSpace(s.Bytes()) + if string(txt) == "" { + continue + } + // ignore comments + if bytes.HasPrefix(txt, comment) { + continue + } + if bytes.HasPrefix(txt, arrowRight) { + if currentPair.Request != nil { + t.Pairs = append(t.Pairs, currentPair) + } + currentPair = &TestPair{ + Request: nil, + } + currentPair.Request = bytes.TrimSpace(bytes.TrimPrefix(txt, arrowRight)) + continue + } + if bytes.HasPrefix(txt, arrowLeft) { + xs := bytes.TrimSpace(bytes.TrimPrefix(txt, arrowLeft)) + currentPair.Responses = append(currentPair.Responses, xs) + continue + } + } + if currentPair.Request != nil { + t.Pairs = append(t.Pairs, currentPair) + } + return nil +} + +type TestData struct { + Files []*TestFile +} + +type TestFile struct { + Name string + Pairs []*TestPair +} + +type TestPair struct { + Request json.RawMessage + Responses []json.RawMessage +} diff --git a/pkg/jrpctest/testdata_test.go b/pkg/jrpctest/testdata_test.go new file mode 100644 index 0000000..ac0ff19 --- /dev/null +++ b/pkg/jrpctest/testdata_test.go @@ -0,0 +1,22 @@ +package jrpctest_test + +import ( + "fmt" + "log" + "testing" + + "gfx.cafe/open/jrpc/pkg/jrpctest" +) + +func TestLoadTestData(t *testing.T) { + log.Println(jrpctest.OriginalTestData) + for _, file := range jrpctest.OriginalTestData.Files { + fmt.Printf("file %s:\n", file.Name) + for idx, pair := range file.Pairs { + fmt.Printf(" %d --> %s\n", idx, string(pair.Request)) + for _, v := range pair.Responses { + fmt.Printf(" <-- %s\n", string(v)) + } + } + } +} -- GitLab