parser_test.go

 1package waypoint
 2
 3import (
 4	"encoding/json"
 5	"os"
 6	"path/filepath"
 7	"reflect"
 8	"testing"
 9
10	"git.kilimanjaro.io/ygo"
11)
12
13func TestExtractWaypoints(t *testing.T) {
14	// Load test data from ysweet file
15	testDataPath := filepath.Join("testdata", "test-waypoints", "data.ysweet")
16	doc, err := ygo.NewDocFromYSweetFile(testDataPath)
17	if err != nil {
18		t.Fatalf("failed to load ysweet file: %v", err)
19	}
20	defer doc.Destroy()
21
22	// Extract waypoints
23	waypoints, err := ExtractWaypoints(doc)
24	if err != nil {
25		t.Fatalf("failed to extract waypoints: %v", err)
26	}
27
28	// Load expected output
29	expectedPath := filepath.Join("testdata", "test-waypoints", "expects.json")
30	expectedData, err := os.ReadFile(expectedPath)
31	if err != nil {
32		t.Fatalf("failed to read expected output: %v", err)
33	}
34
35	var expected []Waypoint
36	if err := json.Unmarshal(expectedData, &expected); err != nil {
37		t.Fatalf("failed to unmarshal expected output: %v", err)
38	}
39
40	// Compare results
41	if len(waypoints) != len(expected) {
42		t.Errorf("expected %d waypoints, got %d", len(expected), len(waypoints))
43	}
44
45	// Compare each waypoint
46	for i, exp := range expected {
47		if i >= len(waypoints) {
48			break
49		}
50		got := waypoints[i]
51
52		if !reflect.DeepEqual(got, exp) {
53			t.Errorf("waypoint %d mismatch:\nexpected: %+v\ngot:      %+v", i, exp, got)
54		}
55	}
56}
57
58func TestExtractWaypointsEmpty(t *testing.T) {
59	// Create empty document
60	doc, err := ygo.NewDoc()
61	if err != nil {
62		t.Fatalf("failed to create doc: %v", err)
63	}
64	defer doc.Destroy()
65
66	// Extract waypoints from empty document
67	waypoints, err := ExtractWaypoints(doc)
68	if err != nil {
69		t.Errorf("unexpected error for empty document: %v", err)
70	}
71
72	if len(waypoints) != 0 {
73		t.Errorf("expected 0 waypoints for empty document, got %d", len(waypoints))
74	}
75}