| package dbus |
| |
| import ( |
| "bytes" |
| "reflect" |
| "testing" |
| ) |
| |
| type TestStruct struct { |
| TestInt int |
| TestStr string |
| } |
| |
| func Test_VariantOfStruct(t *testing.T) { |
| tester := TestStruct{TestInt: 123, TestStr: "foobar"} |
| testerDecoded := []interface{}{123, "foobar"} |
| variant := MakeVariant(testerDecoded) |
| input := []interface{}{variant} |
| var output TestStruct |
| if err := Store(input, &output); err != nil { |
| t.Fatal(err) |
| } |
| if tester != output { |
| t.Fatalf("%v != %v\n", tester, output) |
| } |
| } |
| |
| func Test_VariantOfSlicePtr(t *testing.T) { |
| value := []TestStruct{{1, "1"}} |
| dest := []*TestStruct{} |
| |
| param := &Message{ |
| Type: TypeMethodCall, |
| Flags: FlagNoAutoStart, |
| Headers: map[HeaderField]Variant{ |
| FieldPath: MakeVariant(ObjectPath("/example")), |
| FieldDestination: MakeVariant(""), |
| FieldMember: MakeVariant("call"), |
| }, |
| Body: []interface{}{value}, |
| } |
| param.Headers[FieldSignature] = MakeVariant(SignatureOf(param.Body...)) |
| buf := new(bytes.Buffer) |
| err := param.EncodeTo(buf, nativeEndian) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| msg, err := DecodeMessage(buf) |
| if err != nil { |
| t.Fatal(err) |
| } |
| if err := Store(msg.Body, &dest); err != nil || reflect.DeepEqual(value, dest) { |
| t.Log(err) |
| t.FailNow() |
| } |
| } |