Most of the command-line contract was already tested through run. This adds what was missing: report and trees with no database exit 1 with the message telling the user to run scan; a scan that skips an unreadable file prints its warning and counts the skip in its summary; the report and trees summary lines are checked exactly. The scan tests now capture the process's own stdout, which scan would write to directly, so a stray stdout write in scan fails them. The fatal-path test takes its subcommands from the command tree, so a new subcommand wired without runE fails it. The nonexistent-operand test gets an accurate name. Model: opus-5-5
This commit was merged in pull request #90.
This commit is contained in:
+15
-5
@@ -344,13 +344,14 @@ func storedPaths(t *testing.T, path string) []string {
|
||||
|
||||
// TestRunScanInterrupted calls the scan entrypoint with a context that
|
||||
// is already cancelled, as when a signal arrives at once. It must return
|
||||
// errInterrupted promptly with its one line on stderr, leave the
|
||||
// database valid and as it was, and leave nothing in the way of the
|
||||
// next scan, which must bring the database up to date.
|
||||
// errInterrupted promptly with its one line on stderr and nothing on
|
||||
// stdout, leave the database valid and as it was, and leave nothing in
|
||||
// the way of the next scan, which must bring the database up to date.
|
||||
func TestRunScanInterrupted(t *testing.T) {
|
||||
path := testDBPath(t)
|
||||
t.Setenv(databaseEnv, path)
|
||||
|
||||
stdout := captureStdout(t)
|
||||
stderr := captureStderr(t)
|
||||
dir := buildSmokeTree(t)
|
||||
|
||||
@@ -393,6 +394,10 @@ func TestRunScanInterrupted(t *testing.T) {
|
||||
t.Errorf("stderr = %q, want %q", got, want)
|
||||
}
|
||||
|
||||
if got := stdout(); got != "" {
|
||||
t.Errorf("stdout = %q, want nothing (data only)", got)
|
||||
}
|
||||
|
||||
assertNoSidecars(t, path)
|
||||
|
||||
if got := storedPaths(t, path); !slices.Equal(got, before) {
|
||||
@@ -415,12 +420,13 @@ func TestRunScanInterrupted(t *testing.T) {
|
||||
// TestRunScanInterruptedMidHash interrupts the scan entrypoint part-way
|
||||
// through its hash phase, after the database is open. It must return
|
||||
// errInterrupted, release the lock, end stderr with its line counting
|
||||
// every file the walk reached, close the database out of WAL mode, and
|
||||
// keep the records it hashed.
|
||||
// every file the walk reached, write nothing to stdout, close the
|
||||
// database out of WAL mode, and keep the records it hashed.
|
||||
func TestRunScanInterruptedMidHash(t *testing.T) {
|
||||
path := testDBPath(t)
|
||||
t.Setenv(databaseEnv, path)
|
||||
|
||||
stdout := captureStdout(t)
|
||||
stderr := captureStderr(t)
|
||||
dir := buildWalkCancelTree(t)
|
||||
|
||||
@@ -438,6 +444,10 @@ func TestRunScanInterruptedMidHash(t *testing.T) {
|
||||
t.Errorf("stderr = %q, want it to end with %q", got, want)
|
||||
}
|
||||
|
||||
if got := stdout(); got != "" {
|
||||
t.Errorf("stdout = %q, want nothing (data only)", got)
|
||||
}
|
||||
|
||||
assertNoSidecars(t, path)
|
||||
|
||||
db, err := openReportDatabase(t.Context(), path)
|
||||
|
||||
Reference in New Issue
Block a user