test: expand coverage across readers, writers, cmd, ui, diff and merge
Implements tests/_plans and previously deferred packages; updates plan README with new coverage numbers.
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
package gorm
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestSnakeCaseToCamelCase(t *testing.T) {
|
||||
tests := []struct{ in, want string }{
|
||||
{"", ""},
|
||||
{"user", "user"},
|
||||
{"User_Name", "userName"},
|
||||
{"user_id", "userID"},
|
||||
{"http_request", "httpRequest"},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
if got := SnakeCaseToCamelCase(tt.in); got != tt.want {
|
||||
t.Errorf("%q: got %q want %q", tt.in, got, tt.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestPascalCaseToSnakeCase(t *testing.T) {
|
||||
tests := []struct{ in, want string }{
|
||||
{"", ""},
|
||||
{"User", "user"},
|
||||
{"UserName", "user_name"},
|
||||
{"UserID", "user_id"},
|
||||
{"HTTPRequest", "http_request"},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
if got := PascalCaseToSnakeCase(tt.in); got != tt.want {
|
||||
t.Errorf("%q: got %q want %q", tt.in, got, tt.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestSingularize(t *testing.T) {
|
||||
tests := []struct{ in, want string }{
|
||||
{"", ""},
|
||||
{"people", "person"},
|
||||
{"People", "person"},
|
||||
{"categories", "category"},
|
||||
{"wolves", "wolf"},
|
||||
{"boxes", "box"},
|
||||
{"churches", "church"},
|
||||
{"users", "user"},
|
||||
{"class", "class"},
|
||||
{"user", "user"},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
if got := Singularize(tt.in); got != tt.want {
|
||||
t.Errorf("%q: got %q want %q", tt.in, got, tt.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestPluralize(t *testing.T) {
|
||||
tests := []struct{ in, want string }{
|
||||
{"", ""},
|
||||
{"person", "people"},
|
||||
{"category", "categories"},
|
||||
{"box", "boxes"},
|
||||
{"church", "churches"},
|
||||
{"user", "users"},
|
||||
{"day", "days"},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
if got := Pluralize(tt.in); got != tt.want {
|
||||
t.Errorf("%q: got %q want %q", tt.in, got, tt.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsVowel(t *testing.T) {
|
||||
for _, c := range []byte("aeiouAEIOU") {
|
||||
if !isVowel(c) {
|
||||
t.Errorf("%c should be vowel", c)
|
||||
}
|
||||
}
|
||||
for _, c := range []byte("bcxyzBZ1_") {
|
||||
if isVowel(c) {
|
||||
t.Errorf("%c should not be vowel", c)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
package gorm
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"git.warky.dev/wdevs/relspecgo/pkg/writers"
|
||||
)
|
||||
|
||||
func TestSQLTypeToGoType_Styles(t *testing.T) {
|
||||
tests := []struct {
|
||||
style string
|
||||
sqlType string
|
||||
notNull bool
|
||||
want string
|
||||
}{
|
||||
{writers.NullableTypeSqlTypes, "integer", true, "int32"},
|
||||
{writers.NullableTypeSqlTypes, "bigint", false, "sql_types.SqlInt64"},
|
||||
{writers.NullableTypeSqlTypes, "text", false, "sql_types.SqlString"},
|
||||
{writers.NullableTypeSqlTypes, "text[]", true, "sql_types.SqlStringArray"},
|
||||
{writers.NullableTypeSqlTypes, "integer[]", false, "sql_types.SqlInt32Array"},
|
||||
{writers.NullableTypeSqlTypes, "bigint[]", false, "sql_types.SqlInt64Array"},
|
||||
{writers.NullableTypeSqlTypes, "smallint[]", false, "sql_types.SqlInt16Array"},
|
||||
{writers.NullableTypeSqlTypes, "real[]", false, "sql_types.SqlFloat32Array"},
|
||||
{writers.NullableTypeSqlTypes, "numeric[]", false, "sql_types.SqlFloat64Array"},
|
||||
{writers.NullableTypeSqlTypes, "boolean[]", false, "sql_types.SqlBoolArray"},
|
||||
{writers.NullableTypeSqlTypes, "uuid[]", false, "sql_types.SqlUUIDArray"},
|
||||
{writers.NullableTypeSqlTypes, "weird[]", false, "sql_types.SqlStringArray"},
|
||||
{writers.NullableTypeSqlTypes, "unknowntype", false, "sql_types.SqlString"},
|
||||
{writers.NullableTypeStdlib, "integer", true, "int32"},
|
||||
{writers.NullableTypeStdlib, "integer", false, "sql.NullInt32"},
|
||||
{writers.NullableTypeStdlib, "smallint", false, "sql.NullInt16"},
|
||||
{writers.NullableTypeStdlib, "bigint", false, "sql.NullInt64"},
|
||||
{writers.NullableTypeStdlib, "boolean", false, "sql.NullBool"},
|
||||
{writers.NullableTypeStdlib, "double precision", false, "sql.NullFloat64"},
|
||||
{writers.NullableTypeStdlib, "varchar(10)", false, "sql.NullString"},
|
||||
{writers.NullableTypeStdlib, "timestamptz", false, "sql.NullTime"},
|
||||
{writers.NullableTypeStdlib, "bytea", false, "[]byte"},
|
||||
{writers.NullableTypeStdlib, "mystery", false, "sql.NullString"},
|
||||
{writers.NullableTypeBaselib, "integer", true, "int32"},
|
||||
{writers.NullableTypeBaselib, "integer", false, "*int32"},
|
||||
{writers.NullableTypeBaselib, "text", false, "*string"},
|
||||
{"", "text", false, "*string"},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.style+"/"+tt.sqlType, func(t *testing.T) {
|
||||
got := NewTypeMapper(tt.style).SQLTypeToGoType(tt.sqlType, tt.notNull)
|
||||
if got != tt.want {
|
||||
t.Errorf("got %q want %q", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestStdlibArrayTypes(t *testing.T) {
|
||||
tm := NewTypeMapper(writers.NullableTypeStdlib)
|
||||
for _, sqlType := range []string{"text[]", "integer[]", "bigint[]", "boolean[]", "uuid[]", "numeric[]"} {
|
||||
if got := tm.SQLTypeToGoType(sqlType, true); got == "" {
|
||||
t.Errorf("%s: empty", sqlType)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestImportHelpers(t *testing.T) {
|
||||
tests := []struct {
|
||||
style string
|
||||
want string
|
||||
}{
|
||||
{writers.NullableTypeStdlib, `"database/sql"`},
|
||||
{writers.NullableTypeBaselib, ""},
|
||||
{writers.NullableTypeSqlTypes, `sql_types "git.warky.dev/wdevs/relspecgo/pkg/sqltypes"`},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
if got := NewTypeMapper(tt.style).GetNullableTypeImportLine(); got != tt.want {
|
||||
t.Errorf("%s: got %q want %q", tt.style, got, tt.want)
|
||||
}
|
||||
}
|
||||
tm := NewTypeMapper("")
|
||||
if !tm.NeedsFmtImport(true) || tm.NeedsFmtImport(false) {
|
||||
t.Error("NeedsFmtImport should echo its argument")
|
||||
}
|
||||
if tm.GetSQLTypesImport() == "" {
|
||||
t.Error("empty sqltypes import")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user