Files
upstream-sqlc/internal/opts/experiment_test.go
upstream-mirror 0f4df23290
Some checks failed
kotlin / test (push) Has been skipped
python / test (push) Has been skipped
typescript / test (push) Has been skipped
go / build darwin/amd64 (push) Has been cancelled
go / build linux/amd64 (push) Has been cancelled
go / build windows/amd64 (push) Has been cancelled
go / build darwin/arm64 (push) Has been cancelled
go / build linux/arm64 (push) Has been cancelled
go / build windows/arm64 (push) Has been cancelled
go / test (push) Has been cancelled
go / vuln_check (push) Has been cancelled
snapshot of https://github.com/sqlc-dev/sqlc.git (main, 2026-09-16; blobs > 131072B omitted)
2026-09-16 02:17:34 +05:00

156 lines
2.9 KiB
Go

package opts
import "testing"
func TestExperimentFromString(t *testing.T) {
tests := []struct {
name string
input string
want Experiment
}{
{
name: "empty string",
input: "",
want: Experiment{},
},
{
name: "whitespace only",
input: " ",
want: Experiment{},
},
{
name: "unknown experiment",
input: "unknownexperiment",
want: Experiment{},
},
{
name: "multiple unknown experiments",
input: "foo,bar,baz",
want: Experiment{},
},
{
name: "unknown with no prefix",
input: "nounknown",
want: Experiment{},
},
{
name: "whitespace around experiments",
input: " foo , bar , baz ",
want: Experiment{},
},
{
name: "empty items in list",
input: "foo,,bar",
want: Experiment{},
},
{
name: "enable coreanalyzer",
input: "coreanalyzer",
want: Experiment{CoreAnalyzer: true},
},
{
name: "disable coreanalyzer",
input: "nocoreanalyzer",
want: Experiment{CoreAnalyzer: false},
},
{
name: "enable then disable coreanalyzer",
input: "coreanalyzer,nocoreanalyzer",
want: Experiment{CoreAnalyzer: false},
},
{
name: "coreanalyzer case insensitive",
input: "CoreAnalyzer",
want: Experiment{CoreAnalyzer: true},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := ExperimentFromString(tt.input)
if got != tt.want {
t.Errorf("ExperimentFromString(%q) = %+v, want %+v", tt.input, got, tt.want)
}
})
}
}
func TestExperimentEnabled(t *testing.T) {
tests := []struct {
name string
exp Experiment
want []string
}{
{
name: "no experiments enabled",
exp: Experiment{},
want: nil,
},
{
name: "coreanalyzer enabled",
exp: Experiment{CoreAnalyzer: true},
want: []string{"coreanalyzer"},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := tt.exp.Enabled()
if len(got) != len(tt.want) {
t.Errorf("Experiment.Enabled() = %v, want %v", got, tt.want)
return
}
for i := range got {
if got[i] != tt.want[i] {
t.Errorf("Experiment.Enabled()[%d] = %q, want %q", i, got[i], tt.want[i])
}
}
})
}
}
func TestExperimentString(t *testing.T) {
exp := Experiment{}
if got := exp.String(); got != "" {
t.Errorf("Experiment.String() = %q, want %q", got, "")
}
}
func TestIsKnownExperiment(t *testing.T) {
tests := []struct {
name string
input string
want bool
}{
{
name: "unknown experiment",
input: "unknown",
want: false,
},
{
name: "empty string",
input: "",
want: false,
},
{
name: "coreanalyzer lowercase",
input: "coreanalyzer",
want: true,
},
{
name: "coreanalyzer mixed case",
input: "CoreAnalyzer",
want: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := isKnownExperiment(tt.input)
if got != tt.want {
t.Errorf("isKnownExperiment(%q) = %v, want %v", tt.input, got, tt.want)
}
})
}
}