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}