diff --git a/cmd/sanderling/main_test.go b/cmd/sanderling/main_test.go index fa9ebc0..7367551 100644 --- a/cmd/sanderling/main_test.go +++ b/cmd/sanderling/main_test.go @@ -93,6 +93,41 @@ func TestParseTestArgs_AVDIsOptional(t *testing.T) { } } +func TestParseTestArgs_GeneratorDefaultsToSeeded(t *testing.T) { + options, err := parseTestArgs([]string{"--spec", "s.ts", "--bundle-id", "com.example"}, io.Discard) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if options.generator != "seeded" { + t.Fatalf("generator default: got %q, want seeded", options.generator) + } +} + +func TestParseTestArgs_AcceptsLLMGenerator(t *testing.T) { + options, err := parseTestArgs([]string{ + "--spec", "s.ts", + "--bundle-id", "com.example", + "--generator", "llm", + }, io.Discard) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if options.generator != "llm" { + t.Fatalf("generator: got %q, want llm", options.generator) + } +} + +func TestParseTestArgs_RejectsUnknownGenerator(t *testing.T) { + _, err := parseTestArgs([]string{ + "--spec", "s.ts", + "--bundle-id", "com.example", + "--generator", "oracle", + }, io.Discard) + if err == nil || !strings.Contains(err.Error(), "unsupported generator") { + t.Fatalf("expected unsupported-generator error, got %v", err) + } +} + func TestParseTestArgs_RejectsUnknownPlatform(t *testing.T) { _, err := parseTestArgs([]string{ "--spec", "s.ts", diff --git a/internal/runner/llm_source_test.go b/internal/runner/llm_source_test.go index 044cc73..b0e936d 100644 --- a/internal/runner/llm_source_test.go +++ b/internal/runner/llm_source_test.go @@ -230,6 +230,39 @@ func candidateIndex(candidates []verifier.ActionCandidate, kind verifier.ActionK return -1 } +func TestPickSourcesSelectsLLMWhenRequested(t *testing.T) { + fake := newFakeOpenRouter(t) + _, verifierInstance := newLLMSource(t, fake) + action, _, err := pickSources(Options{ + Verifier: verifierInstance, + Generator: "llm", + Logger: slog.New(slog.NewTextHandler(io.Discard, nil)), + }) + if err != nil { + t.Fatalf("pickSources: %v", err) + } + if _, ok := action.(*llmSource); !ok { + t.Errorf("action source = %T, want *llmSource for --generator llm", action) + } +} + +func TestPickSourcesSeededByDefault(t *testing.T) { + fake := newFakeOpenRouter(t) + _, verifierInstance := newLLMSource(t, fake) + action, _, err := pickSources(Options{ + Verifier: verifierInstance, + Generator: "seeded", + Logger: slog.New(slog.NewTextHandler(io.Discard, nil)), + }) + if err != nil { + t.Fatalf("pickSources: %v", err) + } + // Even with a generator = llm() config present, the seeded flag wins. + if _, ok := action.(gojaSource); !ok { + t.Errorf("action source = %T, want gojaSource for --generator seeded", action) + } +} + func TestLLMSourceDrivesExecutedActions(t *testing.T) { fake := newFakeOpenRouter(t) source, verifierInstance := newLLMSource(t, fake)