Implements tests/_plans and previously deferred packages; updates plan README with new coverage numbers.
124 lines
2.7 KiB
Go
124 lines
2.7 KiB
Go
package writers
|
|
|
|
import "testing"
|
|
|
|
func TestQuoteDefaultValue(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tests := []struct {
|
|
name string
|
|
value string
|
|
sqlType string
|
|
want string
|
|
}{
|
|
{
|
|
name: "text default is quoted",
|
|
value: "active",
|
|
sqlType: "text",
|
|
want: "'active'",
|
|
},
|
|
{
|
|
name: "array default from bare literal is quoted once",
|
|
value: "{}",
|
|
sqlType: "text[]",
|
|
want: "'{}'",
|
|
},
|
|
{
|
|
name: "array default from quoted literal is preserved",
|
|
value: "'{}'",
|
|
sqlType: "text[]",
|
|
want: "'{}'",
|
|
},
|
|
{
|
|
name: "array default from double quoted literal is normalized",
|
|
value: "''{}''",
|
|
sqlType: "text[]",
|
|
want: "'{}'",
|
|
},
|
|
{
|
|
name: "function default is left alone",
|
|
value: "now()",
|
|
sqlType: "timestamptz",
|
|
want: "now()",
|
|
},
|
|
{
|
|
name: "bare keyword default CURRENT_DATE is not quoted",
|
|
value: "CURRENT_DATE",
|
|
sqlType: "date",
|
|
want: "CURRENT_DATE",
|
|
},
|
|
{
|
|
name: "bare keyword default is case insensitive",
|
|
value: "current_timestamp",
|
|
sqlType: "timestamptz",
|
|
want: "current_timestamp",
|
|
},
|
|
{
|
|
name: "bare keyword default localtime is not quoted",
|
|
value: "LOCALTIME",
|
|
sqlType: "time",
|
|
want: "LOCALTIME",
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got := QuoteDefaultValue(tt.value, tt.sqlType)
|
|
if got != tt.want {
|
|
t.Fatalf("QuoteDefaultValue(%q, %q) = %q, want %q", tt.value, tt.sqlType, got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestQualifiedTableName(t *testing.T) {
|
|
tests := []struct {
|
|
schema, table string
|
|
flatten bool
|
|
want string
|
|
}{
|
|
{"", "t", false, "t"},
|
|
{"", "t", true, "t"},
|
|
{"s", "t", false, "s.t"},
|
|
{"s", "t", true, "s_t"},
|
|
}
|
|
for _, tt := range tests {
|
|
if got := QualifiedTableName(tt.schema, tt.table, tt.flatten); got != tt.want {
|
|
t.Errorf("%+v: got %q", tt, got)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestSanitizeFilename(t *testing.T) {
|
|
tests := []struct{ in, want string }{
|
|
{`"users"`, "users"},
|
|
{`'users'`, "users"},
|
|
{"`users`", "users"},
|
|
{"users [note: 'x']", "users"},
|
|
{"a/b\\c:d*e?f<g>h|i", "a_b_c_d_e_f_g_h_i"},
|
|
{"__a__b__", "a_b"},
|
|
{" spaced ", "spaced"},
|
|
{"ctl\x01char", "ctl_char"},
|
|
}
|
|
for _, tt := range tests {
|
|
if got := SanitizeFilename(tt.in); got != tt.want {
|
|
t.Errorf("%q: got %q want %q", tt.in, got, tt.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestSanitizeStructTagValue(t *testing.T) {
|
|
tests := []struct{ in, want string }{
|
|
{"name", "name"},
|
|
{"`na\"me'`", "name"},
|
|
{"users [note: 'x']", "users"},
|
|
{"tags[]", "tags[]"},
|
|
{" padded ", "padded"},
|
|
}
|
|
for _, tt := range tests {
|
|
if got := SanitizeStructTagValue(tt.in); got != tt.want {
|
|
t.Errorf("%q: got %q want %q", tt.in, got, tt.want)
|
|
}
|
|
}
|
|
}
|