Something went wrong. Try again.
Go bindings to the Rust Yrs library that implements the Yjs CRDT
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115package ygo_test
import ( "testing"
"git.kilimanjaro.io/ygo")
func TestArrayBasic(t *testing.T) { doc, err := ygo.NewDoc() if err != nil { t.Fatalf("failed to create doc: %v", err) } defer doc.Destroy()
arr, err := doc.GetArray("test") if err != nil { t.Fatalf("failed to get array: %v", err) } defer arr.Destroy()
var length uint32
err = doc.WithWriteTransaction(func(txn *ygo.Transaction) error { // Create nested array input nested := []ygo.Input{ygo.Float(0.5), ygo.Bool(true)} nestedArray := ygo.YArray(nested)
// Insert items items := []ygo.Input{ nestedArray, ygo.String("hello"), ygo.Int(123), } arr.InsertRange(txn, 0, items)
length = arr.Len() return nil }) if err != nil { t.Fatalf("transaction failed: %v", err) }
if length != 3 { t.Errorf("expected length 3, got %d", length) }
// Remove middle element in new transaction err = doc.WithWriteTransaction(func(txn *ygo.Transaction) error { arr.RemoveRange(txn, 1, 1)
length = arr.Len() return nil }) if err != nil { t.Fatalf("transaction failed: %v", err) }
if length != 2 { t.Errorf("expected length 2, got %d", length) }
// Check first element is an array err = doc.WithWriteTransaction(func(txn *ygo.Transaction) error { out, err := arr.Get(txn, 0) if err != nil { return err } defer out.Destroy()
// For now, just verify we can read something back // Full type checking would need more implementation if out.IsUndefined() { t.Error("expected non-undefined output") } return nil }) if err != nil { t.Fatalf("transaction failed: %v", err) }}
func TestArrayPush(t *testing.T) { doc, err := ygo.NewDoc() if err != nil { t.Fatalf("failed to create doc: %v", err) } defer doc.Destroy()
arr, err := doc.GetArray("test") if err != nil { t.Fatalf("failed to get array: %v", err) } defer arr.Destroy()
var length uint32
err = doc.WithWriteTransaction(func(txn *ygo.Transaction) error { arr.Push(txn, ygo.Int(1)) arr.Push(txn, ygo.Int(2))
var err error length = arr.Len() return err }) if err != nil { t.Fatalf("transaction failed: %v", err) }
if length != 2 { t.Errorf("expected length 2, got %d", length) }}