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?fh|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) } } }