...
1 package dbus
2
3 import (
4 "bytes"
5 "reflect"
6 "testing"
7 )
8
9 type TestStruct struct {
10 TestInt int
11 TestStr string
12 }
13
14 func Test_VariantOfStruct(t *testing.T) {
15 tester := TestStruct{TestInt: 123, TestStr: "foobar"}
16 testerDecoded := []interface{}{123, "foobar"}
17 variant := MakeVariant(testerDecoded)
18 input := []interface{}{variant}
19 var output TestStruct
20 if err := Store(input, &output); err != nil {
21 t.Fatal(err)
22 }
23 if tester != output {
24 t.Fatalf("%v != %v\n", tester, output)
25 }
26 }
27
28 func Test_VariantOfSlicePtr(t *testing.T) {
29 value := []TestStruct{{1, "1"}}
30 dest := []*TestStruct{}
31
32 param := &Message{
33 Type: TypeMethodCall,
34 Flags: FlagNoAutoStart,
35 Headers: map[HeaderField]Variant{
36 FieldPath: MakeVariant(ObjectPath("/example")),
37 FieldDestination: MakeVariant(""),
38 FieldMember: MakeVariant("call"),
39 },
40 Body: []interface{}{value},
41 }
42 param.Headers[FieldSignature] = MakeVariant(SignatureOf(param.Body...))
43 buf := new(bytes.Buffer)
44 err := param.EncodeTo(buf, nativeEndian)
45 if err != nil {
46 t.Fatal(err)
47 }
48
49 msg, err := DecodeMessage(buf)
50 if err != nil {
51 t.Fatal(err)
52 }
53 if err := Store(msg.Body, &dest); err != nil || reflect.DeepEqual(value, dest) {
54 t.Log(err)
55 t.FailNow()
56 }
57 }
58
View as plain text