Detailed changes
@@ -89,10 +89,11 @@ func BackupPaths() ([]string, error) {
return splitFields(raw), nil
}
-// notEmpty returns a validation function that rejects blank input.
+// notEmpty returns a validation function that rejects blank or
+// whitespace-only input.
func notEmpty(fieldName string) func(string) error {
return func(s string) error {
- if len(s) == 0 {
+ if strings.TrimSpace(s) == "" {
return fmt.Errorf("%s is required", fieldName)
}
return nil
@@ -16,7 +16,7 @@ func TestNotEmpty(t *testing.T) {
}{
{name: "empty string", input: "", wantErr: true},
{name: "non-empty string", input: "hello", wantErr: false},
- {name: "whitespace only", input: " ", wantErr: false},
+ {name: "whitespace only", input: " ", wantErr: true},
}
for _, tt := range tests {
@@ -44,7 +44,6 @@ func TestBuildArgv(t *testing.T) {
}
for _, tt := range tests {
- tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
@@ -234,7 +233,6 @@ func TestResolveEnvironCommands(t *testing.T) {
}
for _, tt := range tests {
- tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
@@ -134,7 +134,6 @@ func TestBuildSnapshotCmd(t *testing.T) {
}
for _, tt := range tests {
- tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
@@ -33,7 +33,8 @@ func ParseSnapshots(data []byte) ([]Snapshot, error) {
//
// <short_id> <date> <time> <hostname> <paths> [<tags>]
//
-// Tags are omitted when empty. Hostname shows "(unknown)" when blank.
+// Paths and tags are omitted when empty. Hostname shows "(unknown)"
+// when blank.
func FormatSnapshotLine(s Snapshot) string {
var b strings.Builder
@@ -5,8 +5,8 @@ import (
"time"
)
-// resolveFixtureTOML-style: embed test JSON as string constants so tests
-// are self-contained and don't depend on external files.
+// Embed test JSON as string constants so tests are self-contained and
+// don't depend on external files.
const snapshotFixtureNormal = `[
{