Skip to content

Commit 6749c5b

Browse files
committed
add more tests
1 parent e66cca3 commit 6749c5b

File tree

3 files changed

+101
-4
lines changed

3 files changed

+101
-4
lines changed

core/collection/set.go

+2-4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ const (
1515
stringType
1616
)
1717

18+
// Set is not thread-safe, for concurrent use, make sure to use it with synchronization.
1819
type Set struct {
1920
data map[interface{}]lang.PlaceholderType
2021
tp int
@@ -182,10 +183,7 @@ func (s *Set) add(i interface{}) {
182183
}
183184

184185
func (s *Set) setType(i interface{}) {
185-
if s.tp != untyped {
186-
return
187-
}
188-
186+
// s.tp can only be untyped here
189187
switch i.(type) {
190188
case int:
191189
s.tp = intType

core/collection/set_test.go

+53
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,13 @@ import (
55
"testing"
66

77
"github.com/stretchr/testify/assert"
8+
"github.com/tal-tech/go-zero/core/logx"
89
)
910

11+
func init() {
12+
logx.Disable()
13+
}
14+
1015
func BenchmarkRawSet(b *testing.B) {
1116
m := make(map[interface{}]struct{})
1217
for i := 0; i < b.N; i++ {
@@ -147,3 +152,51 @@ func TestCount(t *testing.T) {
147152
// then
148153
assert.Equal(t, set.Count(), 3)
149154
}
155+
156+
func TestKeysIntMismatch(t *testing.T) {
157+
set := NewSet()
158+
set.add(int64(1))
159+
set.add(2)
160+
vals := set.KeysInt()
161+
assert.EqualValues(t, []int{2}, vals)
162+
}
163+
164+
func TestKeysInt64Mismatch(t *testing.T) {
165+
set := NewSet()
166+
set.add(1)
167+
set.add(int64(2))
168+
vals := set.KeysInt64()
169+
assert.EqualValues(t, []int64{2}, vals)
170+
}
171+
172+
func TestKeysUintMismatch(t *testing.T) {
173+
set := NewSet()
174+
set.add(1)
175+
set.add(uint(2))
176+
vals := set.KeysUint()
177+
assert.EqualValues(t, []uint{2}, vals)
178+
}
179+
180+
func TestKeysUint64Mismatch(t *testing.T) {
181+
set := NewSet()
182+
set.add(1)
183+
set.add(uint64(2))
184+
vals := set.KeysUint64()
185+
assert.EqualValues(t, []uint64{2}, vals)
186+
}
187+
188+
func TestKeysStrMismatch(t *testing.T) {
189+
set := NewSet()
190+
set.add(1)
191+
set.add("2")
192+
vals := set.KeysStr()
193+
assert.EqualValues(t, []string{"2"}, vals)
194+
}
195+
196+
func TestSetType(t *testing.T) {
197+
set := NewUnmanagedSet()
198+
set.add(1)
199+
set.add("2")
200+
vals := set.Keys()
201+
assert.ElementsMatch(t, []interface{}{1, "2"}, vals)
202+
}

core/stores/sqlx/orm_test.go

+46
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,18 @@ func TestUnmarshalRowBool(t *testing.T) {
2222
})
2323
}
2424

25+
func TestUnmarshalRowBoolNotSettable(t *testing.T) {
26+
runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
27+
rs := sqlmock.NewRows([]string{"value"}).FromCSVString("1")
28+
mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
29+
30+
var value bool
31+
assert.NotNil(t, query(db, func(rows *sql.Rows) error {
32+
return unmarshalRow(value, rows, true)
33+
}, "select value from users where user=?", "anyone"))
34+
})
35+
}
36+
2537
func TestUnmarshalRowInt(t *testing.T) {
2638
runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
2739
rs := sqlmock.NewRows([]string{"value"}).FromCSVString("2")
@@ -228,6 +240,40 @@ func TestUnmarshalRowStructWithTags(t *testing.T) {
228240
})
229241
}
230242

243+
func TestUnmarshalRowStructWithTagsWrongColumns(t *testing.T) {
244+
var value = new(struct {
245+
Age *int `db:"age"`
246+
Name string `db:"name"`
247+
})
248+
249+
runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
250+
rs := sqlmock.NewRows([]string{"name"}).FromCSVString("liao")
251+
mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
252+
253+
assert.NotNil(t, query(db, func(rows *sql.Rows) error {
254+
return unmarshalRow(value, rows, true)
255+
}, "select name, age from users where user=?", "anyone"))
256+
})
257+
}
258+
259+
func TestUnmarshalRowStructWithTagsPtr(t *testing.T) {
260+
var value = new(struct {
261+
Age *int `db:"age"`
262+
Name string `db:"name"`
263+
})
264+
265+
runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
266+
rs := sqlmock.NewRows([]string{"name", "age"}).FromCSVString("liao,5")
267+
mock.ExpectQuery("select (.+) from users where user=?").WithArgs("anyone").WillReturnRows(rs)
268+
269+
assert.Nil(t, query(db, func(rows *sql.Rows) error {
270+
return unmarshalRow(value, rows, true)
271+
}, "select name, age from users where user=?", "anyone"))
272+
assert.Equal(t, "liao", value.Name)
273+
assert.Equal(t, 5, *value.Age)
274+
})
275+
}
276+
231277
func TestUnmarshalRowsBool(t *testing.T) {
232278
runOrmTest(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
233279
var expect = []bool{true, false}

0 commit comments

Comments
 (0)