| 73 | } |
| 74 | |
| 75 | func TestConfig_Defaults(t *testing.T) { |
| 76 | // defaulting with nil: should not change anything |
| 77 | conf := testClone(refConfig) |
| 78 | conf.Defaults(nil) |
| 79 | assert.Equal(t, refConfig, conf) |
| 80 | |
| 81 | // test envs (other attributes test covered by def* tests) |
| 82 | conf1 := &Config{} |
| 83 | conf2 := &Config{Env: map[string]string{ |
| 84 | "key1": "value1", |
| 85 | "key2": "value2", |
| 86 | }} |
| 87 | conf3 := &Config{Env: map[string]string{ |
| 88 | "key2": "value2-2", |
| 89 | "key3": "value3", |
| 90 | }} |
| 91 | conf1.Defaults(conf2) |
| 92 | assert.Len(t, conf1.Env, 2) |
| 93 | assert.Equal(t, "value1", conf1.Env["key1"]) |
| 94 | assert.Equal(t, "value2", conf1.Env["key2"]) |
| 95 | conf2.Defaults(conf3) |
| 96 | assert.Len(t, conf2.Env, 3) |
| 97 | assert.Equal(t, "value1", conf2.Env["key1"]) |
| 98 | assert.Equal(t, "value2-2", conf2.Env["key2"]) |
| 99 | assert.Equal(t, "value3", conf2.Env["key3"]) |
| 100 | |
| 101 | // test defS() |
| 102 | obj1 := &testObject{} |
| 103 | obj2 := &testObject{String: conv.SP("foo")} |
| 104 | obj3 := &testObject{String: conv.SP("bar")} |
| 105 | defS(&obj1.String, obj2.String) |
| 106 | assert.Equal(t, "foo", conv.S(obj1.String)) |
| 107 | assert.Equal(t, "foo", conv.S(obj2.String)) |
| 108 | defS(&obj1.String, obj2.String) |
| 109 | assert.Equal(t, "foo", conv.S(obj2.String)) |
| 110 | assert.Equal(t, "bar", conv.S(obj3.String)) |
| 111 | obj1 = &testObject{} |
| 112 | obj2 = &testObject{} |
| 113 | defS(&obj1.String, obj2.String) |
| 114 | assert.Nil(t, obj1.String) |
| 115 | assert.Nil(t, obj2.String) |
| 116 | obj1 = &testObject{String: conv.SP("foo")} |
| 117 | obj2 = &testObject{} |
| 118 | defS(&obj1.String, obj2.String) |
| 119 | assert.Equal(t, "foo", conv.S(obj1.String)) |
| 120 | assert.Nil(t, obj2.String) |
| 121 | |
| 122 | // test defB() |
| 123 | obj1 = &testObject{} |
| 124 | obj2 = &testObject{Bool: conv.BP(true)} |
| 125 | obj3 = &testObject{Bool: conv.BP(false)} |
| 126 | defB(&obj1.Bool, obj2.Bool) |
| 127 | assert.Equal(t, true, conv.B(obj1.Bool)) |
| 128 | assert.Equal(t, true, conv.B(obj2.Bool)) |
| 129 | defB(&obj1.Bool, obj2.Bool) |
| 130 | assert.Equal(t, true, conv.B(obj2.Bool)) |
| 131 | assert.Equal(t, false, conv.B(obj3.Bool)) |
| 132 | obj1 = &testObject{} |