Commit d9eb17b8 authored by gregor herrmann's avatar gregor herrmann

New upstream version 0.67

parents b1164275 b2b0be9e
-----
0.67 2019-09-26
[Changed]
- Add package statement to step files of core feature tests
- Move Executor from Test2::API::context() to Test2::Bundle::More
(for pass, fail and done_testing) to fix seemingly random failures.
Fixes #155.
[Added]
- Full support for package declarations in step files
0.66 2019-09-22
[Fixed]
- Harnass outputs 'Scenario' and 'Feature' instead of the actual
keywords from the feature file (e.g. 'Szenario')
[Changed]
- Dependency listing clean up
- Test2::API minimum dependency updated
- META.json generation -- now includes 'provides' as CPANTS wants
[Added]
- Scenario descriptions are now included in output
- Support for multiple Examples per scenario
- Support for tags on Examples
- Support for description blocks in Examples
[Removed]
- Test files in t/old/ -- not run as tests
0.64 2019-09-15
[Fixed]
- Corrected List::Util dependency failing to declare 1.33 minimum
......
......@@ -41,6 +41,7 @@ lib/Test/BDD/Cucumber/Manual/Architecture.pod
lib/Test/BDD/Cucumber/Manual/Integration.pod
lib/Test/BDD/Cucumber/Manual/Steps.pod
lib/Test/BDD/Cucumber/Manual/Tutorial.pod
lib/Test/BDD/Cucumber/Model/Dataset.pm
lib/Test/BDD/Cucumber/Model/Document.pm
lib/Test/BDD/Cucumber/Model/Feature.pm
lib/Test/BDD/Cucumber/Model/Line.pm
......@@ -85,9 +86,6 @@ t/lib/Test/CucumberExtensionCount.pm
t/lib/Test/CucumberExtensionMetadataVerify.pm
t/lib/Test/CucumberExtensionPush.pm
t/lib/Test/DumpFeature.pm
t/old/020_parser_020_corpus.t.old
t/old/030_pherkin_010_sanity.t.old
t/old/900_run_features.t.old
t/pherkin/match-only/match.feature
t/pherkin/match-only/step_definitions/match_steps.pl
t/pherkin_config_files/not_yaml.yaml
......
......@@ -28,9 +28,7 @@
"runtime" : {
"requires" : {
"Clone" : "0",
"Digest::SHA" : "0",
"File::Find::Rule" : "0",
"Getopt::Long" : "0",
"JSON::MaybeXS" : "1.001000",
"List::MoreUtils" : "0",
"List::Util" : "1.33",
......@@ -42,9 +40,10 @@
"TAP::Parser::Iterator::Stream" : "0",
"TAP::Parser::SourceHandler" : "0",
"Term::ANSIColor" : "3.00",
"Test2::API" : "1.302084",
"Test2::API" : "1.302087",
"Test2::Tools::Basic" : "0",
"Test::More" : "0",
"Type::Tiny" : "0",
"Types::Standard" : "0",
"YAML::Syck" : "0",
"perl" : "5.010"
}
......@@ -57,6 +56,120 @@
}
}
},
"provides" : {
"App::pherkin" : {
"file" : "lib/App/pherkin.pm",
"version" : "0.67"
},
"TAP::Parser::Iterator::PherkinStream" : {
"file" : "lib/TAP/Parser/Iterator/PherkinStream.pm",
"version" : "0.67"
},
"TAP::Parser::SourceHandler::Feature" : {
"file" : "lib/TAP/Parser/SourceHandler/Feature.pm",
"version" : "0.67"
},
"Test::BDD::Cucumber" : {
"file" : "lib/Test/BDD/Cucumber.pm",
"version" : "0.67"
},
"Test::BDD::Cucumber::Errors" : {
"file" : "lib/Test/BDD/Cucumber/Errors.pm",
"version" : "0.67"
},
"Test::BDD::Cucumber::Executor" : {
"file" : "lib/Test/BDD/Cucumber/Executor.pm",
"version" : "0.67"
},
"Test::BDD::Cucumber::Extension" : {
"file" : "lib/Test/BDD/Cucumber/Extension.pm",
"version" : "0.67"
},
"Test::BDD::Cucumber::Harness" : {
"file" : "lib/Test/BDD/Cucumber/Harness.pm",
"version" : "0.67"
},
"Test::BDD::Cucumber::Harness::Data" : {
"file" : "lib/Test/BDD/Cucumber/Harness/Data.pm",
"version" : "0.67"
},
"Test::BDD::Cucumber::Harness::JSON" : {
"file" : "lib/Test/BDD/Cucumber/Harness/JSON.pm",
"version" : "0.67"
},
"Test::BDD::Cucumber::Harness::TAP" : {
"file" : "lib/Test/BDD/Cucumber/Harness/TAP.pm",
"version" : "0.67"
},
"Test::BDD::Cucumber::Harness::TermColor" : {
"file" : "lib/Test/BDD/Cucumber/Harness/TermColor.pm",
"version" : "0.67"
},
"Test::BDD::Cucumber::Harness::TestBuilder" : {
"file" : "lib/Test/BDD/Cucumber/Harness/TestBuilder.pm",
"version" : "0.67"
},
"Test::BDD::Cucumber::I18N::Data" : {
"file" : "lib/Test/BDD/Cucumber/I18N/Data.pm",
"version" : "0.67"
},
"Test::BDD::Cucumber::I18n" : {
"file" : "lib/Test/BDD/Cucumber/I18n.pm",
"version" : "0.67"
},
"Test::BDD::Cucumber::Loader" : {
"file" : "lib/Test/BDD/Cucumber/Loader.pm",
"version" : "0.67"
},
"Test::BDD::Cucumber::Model::Dataset" : {
"file" : "lib/Test/BDD/Cucumber/Model/Dataset.pm",
"version" : "0.67"
},
"Test::BDD::Cucumber::Model::Document" : {
"file" : "lib/Test/BDD/Cucumber/Model/Document.pm",
"version" : "0.67"
},
"Test::BDD::Cucumber::Model::Feature" : {
"file" : "lib/Test/BDD/Cucumber/Model/Feature.pm",
"version" : "0.67"
},
"Test::BDD::Cucumber::Model::Line" : {
"file" : "lib/Test/BDD/Cucumber/Model/Line.pm",
"version" : "0.67"
},
"Test::BDD::Cucumber::Model::Result" : {
"file" : "lib/Test/BDD/Cucumber/Model/Result.pm",
"version" : "0.67"
},
"Test::BDD::Cucumber::Model::Scenario" : {
"file" : "lib/Test/BDD/Cucumber/Model/Scenario.pm",
"version" : "0.67"
},
"Test::BDD::Cucumber::Model::Step" : {
"file" : "lib/Test/BDD/Cucumber/Model/Step.pm",
"version" : "0.67"
},
"Test::BDD::Cucumber::Model::TagSpec" : {
"file" : "lib/Test/BDD/Cucumber/Model/TagSpec.pm",
"version" : "0.67"
},
"Test::BDD::Cucumber::Parser" : {
"file" : "lib/Test/BDD/Cucumber/Parser.pm",
"version" : "0.67"
},
"Test::BDD::Cucumber::StepContext" : {
"file" : "lib/Test/BDD/Cucumber/StepContext.pm",
"version" : "0.67"
},
"Test::BDD::Cucumber::StepFile" : {
"file" : "lib/Test/BDD/Cucumber/StepFile.pm",
"version" : "0.67"
},
"Test::BDD::Cucumber::Util" : {
"file" : "lib/Test/BDD/Cucumber/Util.pm",
"version" : "0.67"
}
},
"release_status" : "stable",
"resources" : {
"bugtracker" : {
......@@ -68,7 +181,7 @@
"web" : "https://github.com/pherkin/test-bdd-cucumber-perl"
}
},
"version" : "0.64",
"version" : "0.67",
"x_contributors" : [
"Aliaksei Palkanau <lifusexitus@gmail.com>",
"Ben Rogers <ben@bdr.org>",
......@@ -86,6 +199,7 @@
"Paul Cochrane <cochrane@driftnoise.com>",
"Tomas Pokorny <tnt@verotel.cz>",
"glauschwuffel <glauschwuffel@nomaden.org>",
"intrigeri <intrigeri@boum.org>",
"poum <poum@cpan.org>",
"rjp <rjpartington@googlemail.com>",
"vti <viacheslav.t@gmail.com>"
......
......@@ -16,11 +16,94 @@ meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
version: '1.4'
name: Test-BDD-Cucumber
provides:
App::pherkin:
file: lib/App/pherkin.pm
version: '0.67'
TAP::Parser::Iterator::PherkinStream:
file: lib/TAP/Parser/Iterator/PherkinStream.pm
version: '0.67'
TAP::Parser::SourceHandler::Feature:
file: lib/TAP/Parser/SourceHandler/Feature.pm
version: '0.67'
Test::BDD::Cucumber:
file: lib/Test/BDD/Cucumber.pm
version: '0.67'
Test::BDD::Cucumber::Errors:
file: lib/Test/BDD/Cucumber/Errors.pm
version: '0.67'
Test::BDD::Cucumber::Executor:
file: lib/Test/BDD/Cucumber/Executor.pm
version: '0.67'
Test::BDD::Cucumber::Extension:
file: lib/Test/BDD/Cucumber/Extension.pm
version: '0.67'
Test::BDD::Cucumber::Harness:
file: lib/Test/BDD/Cucumber/Harness.pm
version: '0.67'
Test::BDD::Cucumber::Harness::Data:
file: lib/Test/BDD/Cucumber/Harness/Data.pm
version: '0.67'
Test::BDD::Cucumber::Harness::JSON:
file: lib/Test/BDD/Cucumber/Harness/JSON.pm
version: '0.67'
Test::BDD::Cucumber::Harness::TAP:
file: lib/Test/BDD/Cucumber/Harness/TAP.pm
version: '0.67'
Test::BDD::Cucumber::Harness::TermColor:
file: lib/Test/BDD/Cucumber/Harness/TermColor.pm
version: '0.67'
Test::BDD::Cucumber::Harness::TestBuilder:
file: lib/Test/BDD/Cucumber/Harness/TestBuilder.pm
version: '0.67'
Test::BDD::Cucumber::I18N::Data:
file: lib/Test/BDD/Cucumber/I18N/Data.pm
version: '0.67'
Test::BDD::Cucumber::I18n:
file: lib/Test/BDD/Cucumber/I18n.pm
version: '0.67'
Test::BDD::Cucumber::Loader:
file: lib/Test/BDD/Cucumber/Loader.pm
version: '0.67'
Test::BDD::Cucumber::Model::Dataset:
file: lib/Test/BDD/Cucumber/Model/Dataset.pm
version: '0.67'
Test::BDD::Cucumber::Model::Document:
file: lib/Test/BDD/Cucumber/Model/Document.pm
version: '0.67'
Test::BDD::Cucumber::Model::Feature:
file: lib/Test/BDD/Cucumber/Model/Feature.pm
version: '0.67'
Test::BDD::Cucumber::Model::Line:
file: lib/Test/BDD/Cucumber/Model/Line.pm
version: '0.67'
Test::BDD::Cucumber::Model::Result:
file: lib/Test/BDD/Cucumber/Model/Result.pm
version: '0.67'
Test::BDD::Cucumber::Model::Scenario:
file: lib/Test/BDD/Cucumber/Model/Scenario.pm
version: '0.67'
Test::BDD::Cucumber::Model::Step:
file: lib/Test/BDD/Cucumber/Model/Step.pm
version: '0.67'
Test::BDD::Cucumber::Model::TagSpec:
file: lib/Test/BDD/Cucumber/Model/TagSpec.pm
version: '0.67'
Test::BDD::Cucumber::Parser:
file: lib/Test/BDD/Cucumber/Parser.pm
version: '0.67'
Test::BDD::Cucumber::StepContext:
file: lib/Test/BDD/Cucumber/StepContext.pm
version: '0.67'
Test::BDD::Cucumber::StepFile:
file: lib/Test/BDD/Cucumber/StepFile.pm
version: '0.67'
Test::BDD::Cucumber::Util:
file: lib/Test/BDD/Cucumber/Util.pm
version: '0.67'
requires:
Clone: '0'
Digest::SHA: '0'
File::Find::Rule: '0'
Getopt::Long: '0'
JSON::MaybeXS: '1.001000'
List::MoreUtils: '0'
List::Util: '1.33'
......@@ -32,15 +115,16 @@ requires:
TAP::Parser::Iterator::Stream: '0'
TAP::Parser::SourceHandler: '0'
Term::ANSIColor: '3.00'
Test2::API: '1.302084'
Test2::API: '1.302087'
Test2::Tools::Basic: '0'
Test::More: '0'
Type::Tiny: '0'
Types::Standard: '0'
YAML::Syck: '0'
perl: '5.010'
resources:
bugtracker: https://github.com/pherkin/test-bdd-cucumber-perl/issues
repository: https://github.com/pherkin/test-bdd-cucumber-perl.git
version: '0.64'
version: '0.67'
x_contributors:
- 'Aliaksei Palkanau <lifusexitus@gmail.com>'
- 'Ben Rogers <ben@bdr.org>'
......@@ -58,6 +142,7 @@ x_contributors:
- 'Paul Cochrane <cochrane@driftnoise.com>'
- 'Tomas Pokorny <tnt@verotel.cz>'
- 'glauschwuffel <glauschwuffel@nomaden.org>'
- 'intrigeri <intrigeri@boum.org>'
- 'poum <poum@cpan.org>'
- 'rjp <rjpartington@googlemail.com>'
- 'vti <viacheslav.t@gmail.com>'
......
......@@ -21,9 +21,7 @@ my %WriteMakefileArgs = (
"NAME" => "Test::BDD::Cucumber",
"PREREQ_PM" => {
"Clone" => 0,
"Digest::SHA" => 0,
"File::Find::Rule" => 0,
"Getopt::Long" => 0,
"JSON::MaybeXS" => "1.001000",
"List::MoreUtils" => 0,
"List::Util" => "1.33",
......@@ -35,9 +33,10 @@ my %WriteMakefileArgs = (
"TAP::Parser::Iterator::Stream" => 0,
"TAP::Parser::SourceHandler" => 0,
"Term::ANSIColor" => "3.00",
"Test2::API" => "1.302084",
"Test2::API" => "1.302087",
"Test2::Tools::Basic" => 0,
"Test::More" => 0,
"Type::Tiny" => 0,
"Types::Standard" => 0,
"YAML::Syck" => 0
},
"TEST_REQUIRES" => {
......@@ -45,7 +44,7 @@ my %WriteMakefileArgs = (
"Test::Differences" => 0,
"Test::Exception" => 0
},
"VERSION" => "0.64",
"VERSION" => "0.67",
"test" => {
"TESTS" => "t/*.t"
}
......@@ -54,9 +53,7 @@ my %WriteMakefileArgs = (
my %FallbackPrereqs = (
"Clone" => 0,
"Digest::SHA" => 0,
"File::Find::Rule" => 0,
"Getopt::Long" => 0,
"IO::Scalar" => 0,
"JSON::MaybeXS" => "1.001000",
"List::MoreUtils" => 0,
......@@ -69,11 +66,12 @@ my %FallbackPrereqs = (
"TAP::Parser::Iterator::Stream" => 0,
"TAP::Parser::SourceHandler" => 0,
"Term::ANSIColor" => "3.00",
"Test2::API" => "1.302084",
"Test2::API" => "1.302087",
"Test2::Tools::Basic" => 0,
"Test::Differences" => 0,
"Test::Exception" => 0,
"Test::More" => 0,
"Type::Tiny" => 0,
"Types::Standard" => 0,
"YAML::Syck" => 0
);
......
......@@ -92,7 +92,7 @@ One thing need specific mentioning:
=over 4
=item * Due to the use of its own parser, differences probably exist
in the intepretation of feature files when comparing to Cucumber.
in the interpretation of feature files when comparing to Cucumber.
Also L<see the issue|https://github.com/pherkin/test-bdd-cucumber-perl/issues/73> for
tracking this topic.
......
......@@ -6,7 +6,7 @@ pherkin - Execute tests written using Test::BDD::Cucumber
=head1 VERSION
version 0.64
version 0.67
=head1 SYNOPSIS
......
name = Test-BDD-Cucumber
version = 0.64
version = 0.67
abstract = Feature-complete Cucumber-style testing in Perl
main_module = lib/Test/BDD/Cucumber.pm
author = Peter Sergeant <pete@clueball.com>
......@@ -23,31 +23,31 @@ repository.type = git
[PodVersion]
[PodSyntaxTests]
[MetaJSON]
[MetaProvides::Package]
[ContributorsFromGit]
[Prereqs]
perl = 5.010
Clone = 0
Digest::SHA = 0
; List::Util 1.33 adds 'any'
List::Util = 1.33
List::MoreUtils = 0
File::Find::Rule = 0
Getopt::Long = 0
JSON::MaybeXS = 1.001000
List::MoreUtils = 0
; List::Util 1.33 adds 'any'
List::Util = 1.33
Module::Runtime = 0
Moo = 2.002002
MooX::HandlesVia = 0
Type::Tiny = 0
Number::Range = 0
Path::Class = 0
TAP::Parser::Iterator::Stream = 0
TAP::Parser::SourceHandler = 0
Term::ANSIColor = 3.00
; Test2::API 1.302084 adds 'pass' and 'fail'
Test2::API = 1.302084
; Test2::API 1.302087 adds 'pass' and 'fail'
Test2::API = 1.302087
Test2::Tools::Basic = 0
Test::More = 0
Types::Standard = 0
YAML::Syck = 0
TAP::Parser::Iterator::Stream = 0
TAP::Parser::SourceHandler = 0
[Prereqs / TestRequires]
IO::Scalar = 0
......
package App::pherkin;
$App::pherkin::VERSION = '0.64';
$App::pherkin::VERSION = '0.67';
use strict;
use warnings;
......@@ -35,7 +35,7 @@ App::pherkin - Run Cucumber tests from the command line
=head1 VERSION
version 0.64
version 0.67
=head1 SYNOPSIS
......
package TAP::Parser::Iterator::PherkinStream;
$TAP::Parser::Iterator::PherkinStream::VERSION = '0.64';
$TAP::Parser::Iterator::PherkinStream::VERSION = '0.67';
use strict;
use warnings;
......
package TAP::Parser::SourceHandler::Feature;
$TAP::Parser::SourceHandler::Feature::VERSION = '0.64';
$TAP::Parser::SourceHandler::Feature::VERSION = '0.67';
use strict;
use warnings;
......
package Test::BDD::Cucumber;
$Test::BDD::Cucumber::VERSION = '0.64';
$Test::BDD::Cucumber::VERSION = '0.67';
use strict;
use warnings;
1;
......@@ -12,7 +12,7 @@ Test::BDD::Cucumber - Feature-complete Cucumber-style testing in Perl
=head1 VERSION
version 0.64
version 0.67
=head1 SYNOPSIS
......@@ -96,7 +96,7 @@ One thing need specific mentioning:
=over 4
=item * Due to the use of its own parser, differences probably exist
in the intepretation of feature files when comparing to Cucumber.
in the interpretation of feature files when comparing to Cucumber.
Also L<see the issue|https://github.com/pherkin/test-bdd-cucumber-perl/issues/73> for
tracking this topic.
......
package Test::BDD::Cucumber::Errors;
$Test::BDD::Cucumber::Errors::VERSION = '0.64';
$Test::BDD::Cucumber::Errors::VERSION = '0.67';
use strict;
use warnings;
......@@ -13,7 +13,7 @@ Test::BDD::Cucumber::Errors - Consistently formatted errors
=head1 VERSION
version 0.64
version 0.67
=head1 DESCRIPTION
......
package Test::BDD::Cucumber::Executor;
$Test::BDD::Cucumber::Executor::VERSION = '0.64';
$Test::BDD::Cucumber::Executor::VERSION = '0.67';
=head1 NAME
Test::BDD::Cucumber::Executor - Run through Feature and Harness objects
=head1 VERSION
version 0.64
version 0.67
=head1 DESCRIPTION
......@@ -26,16 +26,18 @@ use Number::Range;
use Carp qw/croak/;
our @CARP_NOT;
use Test2::API qw/intercept context/;
use Test2::API qw/intercept/;
# Use-ing the formatter results in a
# 'loaded too late to be used globally' warning
# But we only need it locally anyway.
require Test2::Formatter::TAP;
use Test2::Tools::Basic qw/ pass fail done_testing /;
# Needed for subtest() -- we don't want to import all its functions though
require Test::More;
use Test::BDD::Cucumber::StepFile ();
use Test::BDD::Cucumber::StepContext;
use Test::BDD::Cucumber::Util;
use Test::BDD::Cucumber::Model::Result;
......@@ -166,11 +168,6 @@ sub execute {
# Get all scenarios
my @scenarios = @{ $feature->scenarios() };
# Filter them by the tag spec, if we have one
if ( defined $tag_spec ) {
@scenarios = $tag_spec->filter(@scenarios);
}
$_->pre_feature( $feature, $feature_stash ) for @{ $self->extensions };
for my $outline (@scenarios) {
......@@ -181,7 +178,8 @@ sub execute {
scenario => $outline,
feature => $feature,
feature_stash => $feature_stash,
harness => $harness
harness => $harness,
tagspec => $tag_spec,
}
);
}
......@@ -215,29 +213,53 @@ representing the Background
sub execute_outline {
my ( $self, $options ) = @_;
my ( $feature, $feature_stash, $harness, $outline, $background )
= @$options{qw/ feature feature_stash harness scenario background /};
my ( $feature, $feature_stash, $harness, $outline, $background, $tagspec )
= @$options{qw/ feature feature_stash harness scenario background tagspec /};
# Multiply out Scenario Outlines as appropriate
my @datasets = @{ $outline->data };
@datasets = ( {} ) unless @datasets;
my @datasets = @{ $outline->datasets };
if (not @datasets) {
if (not $tagspec or $tagspec->filter($outline) ) {
$self->execute_scenario(
{
feature => $feature,
feature_stash => $feature_stash,
harness => $harness,
scenario => $outline,
background => $background,
scenario_stash => {},
outline_state => {},
dataset => {},
});
}
my $outline_state = {};
return;
}
foreach my $dataset (@datasets) {
$self->execute_scenario(
{
feature => $feature,
feature_stash => $feature_stash,
harness => $harness,
scenario => $outline,
background => $background,
scenario_stash => {},
outline_state => $outline_state,
dataset => $dataset,
});
$outline_state->{'short_circuit'} ||= $self->_bail_out;
if ($tagspec) {
@datasets = $tagspec->filter(@datasets);
return unless @datasets;
}
foreach my $rows (@datasets) {
my $outline_state = {};
foreach my $row (@{$rows->data}) {
$self->execute_scenario(
{
feature => $feature,
feature_stash => $feature_stash,
harness => $harness,
scenario => $outline,
background => $background,
scenario_stash => {},
outline_state => $outline_state,
dataset => $row,
});
$outline_state->{'short_circuit'} ||= $self->_bail_out;
}
}
}
......@@ -580,18 +602,9 @@ sub dispatch {
###TODO: Both intercept() and Test::More::subtest() should
# be replaced by a specific Hub implementation for T::B::C
Test::More::subtest( 'execute step', sub {
my $ctx = context();
$ctx->pass( "Starting to execute step: " . $context->text );
# Execute!
no warnings 'redefine';
local *Test::BDD::Cucumber::StepFile::S = sub {
return $context->stash->{'scenario'};
};
local *Test::BDD::Cucumber::StepFile::C = sub {
return $context;
};
pass(
"Starting to execute step: " . $context->text
);
# Take a copy of this. Turns out actually matching against it
# directly causes all sorts of weird-ass heisenbugs which mst has
......@@ -607,13 +620,23 @@ sub dispatch {
@match_locations = pairwise { [ $a, $b ] } @starts, @ends;
# OK, actually execute
eval { $coderef->($context) };
eval {
no warnings 'redefine';
local *Test::BDD::Cucumber::StepFile::_S = sub {
return $context->stash->{'scenario'};
};
local *Test::BDD::Cucumber::StepFile::_C = sub {
return $context;
};
$coderef->($context)
};
if ($@) {
$ctx->fail("Step ran successfully", $@);
fail("Step ran successfully", $@);
}
$ctx->done_testing;
$ctx->release;
done_testing();
});
};
......
package Test::BDD::Cucumber::Extension;
$Test::BDD::Cucumber::Extension::VERSION = '0.64';
$Test::BDD::Cucumber::Extension::VERSION = '0.67';
=head1 NAME
Test::BDD::Cucumber::Extension - Abstract superclass for extensions
=head1 VERSION
version 0.64
version 0.67
=head1 DESCRIPTION
......@@ -133,7 +133,7 @@ Note: B<executed> steps, so not called for skipped steps.
Invoked by the Executor after each executed step in $scenario.
Reports errors by calling croak().
$failed indicates that the step has not been completed succesfully;
$failed indicates that the step has not been completed successfully;
this means the step can have failed, be marked as TODO or pending
(not implemented).
......
package Test::BDD::Cucumber::Harness;
$Test::BDD::Cucumber::Harness::VERSION = '0.64';
$Test::BDD::Cucumber::Harness::VERSION = '0.67';
=head1 NAME
Test::BDD::Cucumber::Harness - Base class for creating harnesses
=head1 VERSION
version 0.64
version 0.67
=head1 DESCRIPTION
......