[libtest-bdd-cucumber-perl] 17/25: Generate stable feature/scenario IDs in JSON output

Intrigeri intrigeri at moszumanska.debian.org
Mon Apr 27 09:51:17 UTC 2015


This is an automated email from the git hooks/post-receive script.

intrigeri pushed a commit to branch master
in repository libtest-bdd-cucumber-perl.

commit 9cd5a061f11a9eb97e704f4db3ba1b2aa1daea49
Author: Tomas Pokorny <tnt at verotel.cz>
Date:   Wed Apr 15 06:52:17 2015 +0000

    Generate stable feature/scenario IDs in JSON output
    
    so that they can be used for identify same feature/scenario in multiple
    JSON result files.
---
 lib/Test/BDD/Cucumber/Harness/JSON.pm |  9 +++++++--
 t/600_harness_json_output.t           | 31 ++++++++++++++++++++++++-------
 2 files changed, 31 insertions(+), 9 deletions(-)

diff --git a/lib/Test/BDD/Cucumber/Harness/JSON.pm b/lib/Test/BDD/Cucumber/Harness/JSON.pm
index cf5ad01..30f5e20 100644
--- a/lib/Test/BDD/Cucumber/Harness/JSON.pm
+++ b/lib/Test/BDD/Cucumber/Harness/JSON.pm
@@ -104,7 +104,7 @@ sub format_feature {
     return {
         uri         => $feature->name_line->filename,
         keyword     => $self->get_keyword( $feature->name_line ),
-        id          => "feature-" . int($feature),
+        id          => $self->_generate_stable_id( $feature->name_line ),
         name        => $feature->name,
         line        => $feature->name_line->number,
         description => $self->format_description($feature),
@@ -117,7 +117,7 @@ sub format_scenario {
     my ( $self, $scenario, $dataset ) = @_;
     return {
         keyword => $self->get_keyword( $scenario->line ),
-        id      => "scenario-" . int($scenario),
+        id      => $self->_generate_stable_id( $scenario->line ),
         name    => $scenario->name,
         line    => $scenario->line->number,
         tags    => $self->format_tags( $scenario->tags ),
@@ -126,6 +126,11 @@ sub format_scenario {
     };
 }
 
+sub _generate_stable_id {
+    my ( $self, $line ) = @_;
+    return $line->filename . ":" . $line->number;
+}
+
 sub format_step {
     my ( $self, $step_context, $result, $duration ) = @_;
     my $step = $step_context->step;
diff --git a/t/600_harness_json_output.t b/t/600_harness_json_output.t
index 01b86da..049be61 100644
--- a/t/600_harness_json_output.t
+++ b/t/600_harness_json_output.t
@@ -24,11 +24,11 @@ sub get_line_number {
     }
 }
 
-my $json_data = "";
-my $fh        = new IO::Scalar \$json_data;
-
 # Run tests
-{
+sub run_tests {
+    my $json_data = "";
+    my $fh        = new IO::Scalar \$json_data;
+
     my $harness = Test::BDD::Cucumber::Harness::JSON->new( fh => $fh );
     for my $directory ( $DIGEST_DIR, 't/harness_json' ) {
         my ( $executor, @features ) =
@@ -37,15 +37,21 @@ my $fh        = new IO::Scalar \$json_data;
         $executor->execute( $_, $harness ) for @features;
     }
     $harness->shutdown();
+
+    $fh->close;
+    return $json_data;
 }
 
-$fh->close;
+my $json_data = run_tests();
 
 # Load & Check JSON output
 my $parsed_json = decode_json($json_data);
 
 is( ref($parsed_json), 'ARRAY', 'json file contains list of features' );
 
+# Second run results
+my $second_run_json = decode_json( run_tests() );
+
 # Test list of features
 my @json_features = @$parsed_json;
 is( scalar(@json_features), 2, "number of features matches" );
@@ -59,7 +65,11 @@ is_deeply(
 my %json_feature = %{ $parsed_json->[0] };
 is( $json_feature{keyword}, 'Feature', 'feature keyword' );
 is( $json_feature{name}, 'Simple tests of Digest.pm', 'feature name' );
-like( $json_feature{id}, qr/^feature-\d+$/, 'feature id' );
+like( $json_feature{id},
+    qr{^.*examples/tagged-digest/features/basic\.feature:\d+$},
+    'feature id'
+);
+is( $json_feature{id}, $second_run_json->[0]{id}, "Feature ID is stable" );
 is( $json_feature{uri}, $DIGEST_FEATURE_FILE, 'feature uri' );
 is(
     $json_feature{line},
@@ -92,7 +102,14 @@ is_deeply(
 my %json_scenario = %{ $json_feature{elements}[2] };
 is( $json_scenario{keyword}, 'Scenario',    'scenario keyword' );
 is( $json_scenario{name},    'Check SHA-1', 'scenario name' );
-like( $json_scenario{id}, qr/^scenario-\d+$/, 'scenario id' );
+like( $json_scenario{id},
+    qr{^.*examples/tagged-digest/features/basic.feature:\d+$},
+    'scenario id'
+);
+is( $json_scenario{id},
+    $second_run_json->[0]{elements}[2]{id},
+    "Scenario ID is stable"
+);
 is(
     $json_scenario{line},
     get_line_number( $json_feature{uri}, 'Scenario: Check SHA-1' ),

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libtest-bdd-cucumber-perl.git



More information about the Pkg-perl-cvs-commits mailing list