test(client-go): strengthen WriteArrayElements assertions and add README example

This commit is contained in:
Joseph Doherty
2026-06-18 03:12:57 -04:00
parent 437d29f19e
commit 474b7bd0ff
2 changed files with 39 additions and 2 deletions
+14
View File
@@ -153,6 +153,20 @@ integer `0`, float `0.0`, string `""`, time = Unix epoch). This is a **RESET**
of unmentioned indices, not a preserve of existing values. Use the full-array of unmentioned indices, not a preserve of existing values. Use the full-array
form (read-modify-write) when existing element values must be preserved. form (read-modify-write) when existing element values must be preserved.
```go
// Set element [3] of a 10-element float array; all other indices reset to 0.0.
err = session.WriteArrayElements(
ctx,
serverHandle, itemHandle,
mxgateway.DataTypeFloat,
10, // totalLength
map[uint32]*mxgateway.MxValue{
3: mxgateway.FloatValue(1.5),
},
userID,
)
```
`AddItem` (and `AddItem2`) now auto-normalize a bare attribute name to the `[]` `AddItem` (and `AddItem2`) now auto-normalize a bare attribute name to the `[]`
array address form expected by MXAccess, so callers do not need to append `[]` array address form expected by MXAccess, so callers do not need to append `[]`
themselves. Both forms are accepted; duplicates are deduplicated by the gateway. themselves. Both forms are accepted; duplicates are deduplicated by the gateway.
+25 -2
View File
@@ -742,7 +742,7 @@ func TestWriteArrayElementsSendsWriteCommandWithSparseOneof(t *testing.T) {
DataTypeFloat, DataTypeFloat,
10, 10,
map[uint32]*MxValue{3: FloatValue(1.5)}, map[uint32]*MxValue{3: FloatValue(1.5)},
0, 42,
) )
if err != nil { if err != nil {
t.Fatalf("WriteArrayElements() error = %v", err) t.Fatalf("WriteArrayElements() error = %v", err)
@@ -752,7 +752,20 @@ func TestWriteArrayElementsSendsWriteCommandWithSparseOneof(t *testing.T) {
if cmd.GetKind() != pb.MxCommandKind_MX_COMMAND_KIND_WRITE { if cmd.GetKind() != pb.MxCommandKind_MX_COMMAND_KIND_WRITE {
t.Fatalf("command kind = %s, want WRITE", cmd.GetKind()) t.Fatalf("command kind = %s, want WRITE", cmd.GetKind())
} }
val := cmd.GetWrite().GetValue() w := cmd.GetWrite()
if w.GetServerHandle() != 1 {
t.Fatalf("server handle = %d, want 1", w.GetServerHandle())
}
if w.GetItemHandle() != 2 {
t.Fatalf("item handle = %d, want 2", w.GetItemHandle())
}
if w.GetUserId() == 0 {
t.Fatal("user id = 0, want non-zero")
}
if w.GetUserId() != 42 {
t.Fatalf("user id = %d, want 42", w.GetUserId())
}
val := w.GetValue()
sa, ok := val.Kind.(*pb.MxValue_SparseArrayValue) sa, ok := val.Kind.(*pb.MxValue_SparseArrayValue)
if !ok { if !ok {
t.Fatalf("value kind is %T, want *pb.MxValue_SparseArrayValue", val.Kind) t.Fatalf("value kind is %T, want *pb.MxValue_SparseArrayValue", val.Kind)
@@ -763,4 +776,14 @@ func TestWriteArrayElementsSendsWriteCommandWithSparseOneof(t *testing.T) {
if sa.SparseArrayValue.GetElementDataType() != DataTypeFloat { if sa.SparseArrayValue.GetElementDataType() != DataTypeFloat {
t.Errorf("ElementDataType = %v, want DataTypeFloat", sa.SparseArrayValue.GetElementDataType()) t.Errorf("ElementDataType = %v, want DataTypeFloat", sa.SparseArrayValue.GetElementDataType())
} }
if len(sa.SparseArrayValue.GetElements()) != 1 {
t.Fatalf("len(Elements) = %d, want 1", len(sa.SparseArrayValue.GetElements()))
}
elem := sa.SparseArrayValue.GetElements()[0]
if elem.GetIndex() != 3 {
t.Errorf("element index = %d, want 3", elem.GetIndex())
}
if elem.GetValue().GetFloatValue() != 1.5 {
t.Errorf("element float value = %v, want 1.5", elem.GetValue().GetFloatValue())
}
} }