1
21
22 package fosite_test
23
24 import (
25 "testing"
26
27 "github.com/oleiade/reflections"
28 "github.com/stretchr/testify/assert"
29 "github.com/stretchr/testify/require"
30 )
31
32 func TestAssertObjectsAreEqualByKeys(t *testing.T) {
33 type foo struct {
34 Name string
35 Body int
36 }
37 a := &foo{"foo", 1}
38 b := &foo{"bar", 1}
39 c := &foo{"baz", 3}
40
41 AssertObjectKeysEqual(t, a, a, "Name", "Body")
42 AssertObjectKeysNotEqual(t, a, b, "Name")
43 AssertObjectKeysNotEqual(t, a, c, "Name", "Body")
44 }
45
46 func AssertObjectKeysEqual(t *testing.T, a, b interface{}, keys ...string) {
47 assert.True(t, len(keys) > 0, "No keys provided.")
48 for _, k := range keys {
49 c, err := reflections.GetField(a, k)
50 assert.NoError(t, err)
51 d, err := reflections.GetField(b, k)
52 assert.NoError(t, err)
53 assert.Equal(t, c, d, "field: %s", k)
54 }
55 }
56
57 func AssertObjectKeysNotEqual(t *testing.T, a, b interface{}, keys ...string) {
58 assert.True(t, len(keys) > 0, "No keys provided.")
59 for _, k := range keys {
60 c, err := reflections.GetField(a, k)
61 assert.NoError(t, err)
62 d, err := reflections.GetField(b, k)
63 assert.NoError(t, err)
64 assert.NotEqual(t, c, d, "%s", k)
65 }
66 }
67
68 func RequireObjectKeysEqual(t *testing.T, a, b interface{}, keys ...string) {
69 assert.True(t, len(keys) > 0, "No keys provided.")
70 for _, k := range keys {
71 c, err := reflections.GetField(a, k)
72 assert.NoError(t, err)
73 d, err := reflections.GetField(b, k)
74 assert.NoError(t, err)
75 require.Equal(t, c, d, "%s", k)
76 }
77 }
78 func RequireObjectKeysNotEqual(t *testing.T, a, b interface{}, keys ...string) {
79 assert.True(t, len(keys) > 0, "No keys provided.")
80 for _, k := range keys {
81 c, err := reflections.GetField(a, k)
82 assert.NoError(t, err)
83 d, err := reflections.GetField(b, k)
84 assert.NoError(t, err)
85 require.NotEqual(t, c, d, "%s", k)
86 }
87 }
88
View as plain text