86 lines
2.0 KiB
Go
86 lines
2.0 KiB
Go
|
package cassandra
|
||
|
|
||
|
import (
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
"reflect"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestContains(t *testing.T) {
|
||
|
type testCase struct {
|
||
|
name string
|
||
|
list []string
|
||
|
target string
|
||
|
expected bool
|
||
|
}
|
||
|
|
||
|
tests := []testCase{
|
||
|
{"contains first", []string{"a", "b", "c"}, "a", true},
|
||
|
{"contains middle", []string{"a", "b", "c"}, "b", true},
|
||
|
{"contains last", []string{"a", "b", "c"}, "c", true},
|
||
|
{"not contains", []string{"a", "b", "c"}, "d", false},
|
||
|
{"empty list", []string{}, "a", false},
|
||
|
}
|
||
|
|
||
|
for _, tc := range tests {
|
||
|
t.Run(tc.name, func(t *testing.T) {
|
||
|
actual := contains(tc.list, tc.target)
|
||
|
if actual != tc.expected {
|
||
|
t.Errorf("contains(%v, %q) = %v; want %v", tc.list, tc.target, actual, tc.expected)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// TestToSnakeCase 測試 toSnakeCase 函式
|
||
|
func TestToSnakeCase(t *testing.T) {
|
||
|
testCases := []struct {
|
||
|
input string
|
||
|
expected string
|
||
|
}{
|
||
|
{"CamelCase", "camel_case"},
|
||
|
{"snake_case", "snake_case"},
|
||
|
{"HttpServer", "http_server"},
|
||
|
{"A", "a"},
|
||
|
{"Already_Snake", "already__snake"}, // 依照實作,"Already_Snake" 轉換後會產生 double underscore
|
||
|
}
|
||
|
|
||
|
for _, tc := range testCases {
|
||
|
t.Run(tc.input, func(t *testing.T) {
|
||
|
result := toSnakeCase(tc.input)
|
||
|
assert.Equal(t, tc.expected, result)
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestIsZero(t *testing.T) {
|
||
|
type testCase struct {
|
||
|
name string
|
||
|
input any
|
||
|
expected bool
|
||
|
}
|
||
|
|
||
|
tests := []testCase{
|
||
|
{"zero int", 0, true},
|
||
|
{"non-zero int", 42, false},
|
||
|
{"zero string", "", true},
|
||
|
{"non-zero string", "hello", false},
|
||
|
{"zero bool", false, true},
|
||
|
{"non-zero bool", true, false},
|
||
|
{"nil slice", []string(nil), true},
|
||
|
{"empty slice", []string{}, false},
|
||
|
{"nil pointer", (*int)(nil), true},
|
||
|
{"non-nil pointer", new(int), false},
|
||
|
}
|
||
|
|
||
|
for _, tc := range tests {
|
||
|
t.Run(tc.name, func(t *testing.T) {
|
||
|
v := reflect.ValueOf(tc.input)
|
||
|
actual := isZero(v)
|
||
|
if actual != tc.expected {
|
||
|
t.Errorf("isZero(%v) = %v; want %v", tc.input, actual, tc.expected)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|