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