diff --git a/shellkin b/shellkin index 7a0cf8b..4baae35 100755 --- a/shellkin +++ b/shellkin @@ -365,6 +365,7 @@ feature_run() { local section= local feature_seen=0 local scenario_seen=0 + local feature_output_started=0 local in_description=0 local in_doc_string=0 local failed=0 @@ -412,7 +413,6 @@ feature_run() { section=feature in_description=1 FEATURE_NAME=$FEATURE_LINE_NAME - output_feature_start "$FEATURE_NAME" continue ;; background) @@ -768,6 +768,10 @@ feature_scenario_run() { ((TEST_SCENARIOS_TOTAL += 1)) FEATURE_PREVIOUS_STEP_TYPE= SCENARIO_DEFERRED_COMMANDS=() + if [[ -n ${FEATURE_NAME:-} && ${feature_output_started:-1} -eq 0 ]]; then + output_feature_start "$FEATURE_NAME" + feature_output_started=1 + fi output_scenario_start "$scenario_number" "$scenario_name" set +e diff --git a/src/lib/feature/core.sh b/src/lib/feature/core.sh index 0c1078f..5f07eda 100644 --- a/src/lib/feature/core.sh +++ b/src/lib/feature/core.sh @@ -5,6 +5,7 @@ feature_run() { local section= local feature_seen=0 local scenario_seen=0 + local feature_output_started=0 local in_description=0 local in_doc_string=0 local failed=0 @@ -52,7 +53,6 @@ feature_run() { section=feature in_description=1 FEATURE_NAME=$FEATURE_LINE_NAME - output_feature_start "$FEATURE_NAME" continue ;; background) @@ -415,6 +415,10 @@ feature_scenario_run() { ((TEST_SCENARIOS_TOTAL += 1)) FEATURE_PREVIOUS_STEP_TYPE= SCENARIO_DEFERRED_COMMANDS=() + if [[ -n ${FEATURE_NAME:-} && ${feature_output_started:-1} -eq 0 ]]; then + output_feature_start "$FEATURE_NAME" + feature_output_started=1 + fi output_scenario_start "$scenario_number" "$scenario_name" set +e diff --git a/test/commands/test.bats b/test/commands/test.bats index f563550..8ee4250 100644 --- a/test/commands/test.bats +++ b/test/commands/test.bats @@ -393,6 +393,36 @@ EOF assert_output_contains "1 scenario, 0 failing" } +@test "shellkin omits headings for feature files with no selected scenarios" { + write_file features/first.feature <<'EOF' +Feature: First feature + +Scenario: First + Then I write 'first' +EOF + + write_file features/second.feature <<'EOF' +Feature: Second feature + +Scenario: Second + Then I write 'second' +EOF + + write_file features/step_definitions/core.sh <<'EOF' +@Then I write '{text}' +printf '%s' "$text" > "$TEST_ROOT/result.txt" +EOF + + run "$SHELLKIN_REPO_ROOT/shellkin" --default-target "$TEST_ROOT/features" 2 + + [ "$status" -eq 0 ] + [ "$(cat "$TEST_ROOT/result.txt")" = "second" ] + [[ "$output" != *"Feature: First feature"* ]] + assert_output_contains "Feature: Second feature" + assert_output_contains "Scenario 2: Second" + assert_output_contains "1 scenario, 0 failing" +} + @test "shellkin runs only the selected scenario number from an explicit feature target" { write_file features/sample.feature <<'EOF' Feature: Select from file target