example_test.go

 1package ygo_test
 2
 3import (
 4	"fmt"
 5	"git.kilimanjaro.io/ygo"
 6	"os"
 7	"testing"
 8)
 9
10func TestExampleDocumentLoading(t *testing.T) {
11	filePath := "/tmp/test_document.yjs"
12
13	// Clean up if exists
14	os.Remove(filePath)
15
16	// Create sample document
17	t.Log("Creating sample document...")
18	doc, err := ygo.NewDoc()
19	if err != nil {
20		t.Fatalf("failed to create doc: %v", err)
21	}
22	defer doc.Destroy()
23
24	// NOTE: GetText works without an explicit transaction
25	t.Log("Getting text field (no transaction)...")
26	txt, err := doc.GetText("content")
27	if err != nil {
28		t.Fatalf("failed to get text: %v", err)
29	}
30	defer txt.Destroy()
31
32	t.Log("Inserting text...")
33	err = doc.WithWriteTransaction(func(txn *ygo.Transaction) error {
34		txt.Insert(txn, 0, "Hello from Yjs!")
35		return nil
36	})
37	if err != nil {
38		t.Fatalf("transaction failed: %v", err)
39	}
40
41	t.Log("Marshaling document...")
42	data, err := doc.MarshalBinary()
43	if err != nil {
44		t.Fatalf("failed to marshal: %v", err)
45	}
46
47	t.Logf("Writing %d bytes to file...", len(data))
48	if err := os.WriteFile(filePath, data, 0644); err != nil {
49		t.Fatalf("failed to write file: %v", err)
50	}
51
52	// Now load it back
53	t.Log("Loading document from file...")
54	fileData, err := os.ReadFile(filePath)
55	if err != nil {
56		t.Fatalf("failed to read file: %v", err)
57	}
58
59	doc2, err := ygo.NewDoc()
60	if err != nil {
61		t.Fatalf("failed to create doc2: %v", err)
62	}
63	defer doc2.Destroy()
64
65	t.Log("Unmarshaling document...")
66	if err := doc2.UnmarshalBinary(fileData); err != nil {
67		t.Fatalf("failed to unmarshal: %v", err)
68	}
69
70	t.Log("Getting text field from loaded document...")
71	txt2, err := doc2.GetText("content")
72	if err != nil {
73		t.Fatalf("failed to get text2: %v", err)
74	}
75	defer txt2.Destroy()
76
77	// Verify content - use a fresh read transaction
78	t.Log("Verifying loaded content...")
79	var content string
80	err = doc2.WithReadTransaction(func(txn *ygo.Transaction) error {
81		var err error
82		content, err = txt2.String(txn)
83		return err
84	})
85	if err != nil {
86		t.Fatalf("failed to get string: %v", err)
87	}
88	if content != "Hello from Yjs!" {
89		t.Errorf("expected 'Hello from Yjs!', got '%s'", content)
90	}
91
92	fmt.Printf("✓ Successfully created and loaded document!\n")
93	fmt.Printf("  Original content: Hello from Yjs!\n")
94	fmt.Printf("  Loaded content: %s\n", content)
95
96	// Cleanup
97	os.Remove(filePath)
98}