Skip to content

Commit a47e281

Browse files
authored
Merge pull request #74 from gone-io/feature/loader
fix(core): correct default value handling when force replacing
2 parents a2b2aba + 88b3030 commit a47e281

File tree

3 files changed

+44
-10
lines changed

3 files changed

+44
-10
lines changed

core_keeper.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ func newKeeper() *keeper {
66
return &keeper{
77
coffins: []*coffin{},
88
nameMap: make(map[string]*coffin),
9-
defaultTypeMap: make(map[reflect.Type]bool),
9+
defaultTypeMap: make(map[reflect.Type]*coffin),
1010
}
1111
}
1212

1313
type keeper struct {
1414
Flag
1515
coffins []*coffin
1616
nameMap map[string]*coffin
17-
defaultTypeMap map[reflect.Type]bool
17+
defaultTypeMap map[reflect.Type]*coffin
1818
}
1919

2020
func (s *keeper) getAllCoffins() []*coffin {
@@ -83,13 +83,20 @@ func (s *keeper) load(goner Goner, options ...Option) error {
8383

8484
var forceReplaceFind = false
8585
if co.forceReplace && co.name != "" {
86+
var replacedCo *coffin
8687
for i := range s.coffins {
8788
if s.coffins[i].name == co.name {
89+
replacedCo = s.coffins[i]
8890
s.coffins[i] = co
8991
forceReplaceFind = true
9092
break
9193
}
9294
}
95+
for t, typeCo := range s.defaultTypeMap {
96+
if typeCo == replacedCo {
97+
delete(s.defaultTypeMap, t)
98+
}
99+
}
93100
}
94101

95102
if !forceReplaceFind {
@@ -105,7 +112,7 @@ func (s *keeper) load(goner Goner, options ...Option) error {
105112
co.Name(),
106113
)
107114
} else {
108-
s.defaultTypeMap[t] = true
115+
s.defaultTypeMap[t] = co
109116
}
110117
}
111118
return nil

core_keeper_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,20 +70,18 @@ func withErrOption() option {
7070
}
7171

7272
func Test_keeper_load(t *testing.T) {
73-
k := newKeeper()
73+
//k := newKeeper()
7474
type g struct {
7575
Flag
7676
Name string
7777
}
7878

79-
_ = k.load(&g{Name: "instance-01"}, Name("food-01"), IsDefault())
80-
8179
type args struct {
8280
goner Goner
8381
options []Option
8482
}
8583
tests := []struct {
86-
setUp func() func()
84+
setUp func(k *keeper) func()
8785
name string
8886
args args
8987
wantErr bool
@@ -111,7 +109,7 @@ func Test_keeper_load(t *testing.T) {
111109
options: []Option{ForceReplace(), Name("food-01")},
112110
},
113111
wantErr: false,
114-
setUp: func() func() {
112+
setUp: func(k *keeper) func() {
115113
return func() {
116114
coffins := k.getByTypeAndPattern(reflect.TypeOf(&g{}), "*-01")
117115
if len(coffins) != 1 {
@@ -135,10 +133,12 @@ func Test_keeper_load(t *testing.T) {
135133
}
136134
for _, tt := range tests {
137135
t.Run(tt.name, func(t *testing.T) {
136+
s := newKeeper()
137+
_ = s.load(&g{Name: "instance-01"}, Name("food-01"), IsDefault())
138138
if tt.setUp != nil {
139-
defer tt.setUp()()
139+
defer tt.setUp(s)()
140140
}
141-
s := k
141+
142142
if err := s.load(tt.args.goner, tt.args.options...); (err != nil) != tt.wantErr {
143143
t.Errorf("load() error = %v, wantErr %v", err, tt.wantErr)
144144
}

use_case/replace_default_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package use_case
2+
3+
import (
4+
"github.com/gone-io/gone/v2"
5+
"testing"
6+
)
7+
8+
func TestReplaceAndDefault(t *testing.T) {
9+
type X struct {
10+
gone.Flag
11+
ID int
12+
}
13+
gone.
14+
NewApp().
15+
Load(&X{ID: 1}, gone.Name("x"), gone.IsDefault()).
16+
Load(&X{ID: 2}, gone.Name("x"), gone.ForceReplace()).
17+
Load(&X{ID: 3}, gone.IsDefault()).
18+
Run(func(xList []*X, x *X) {
19+
if len(xList) != 2 {
20+
t.Errorf("xList error")
21+
}
22+
if x.ID != 3 {
23+
t.Errorf("x error")
24+
}
25+
})
26+
27+
}

0 commit comments

Comments
 (0)