kosmas58-cucumber 0.1.16.6 → 0.1.99.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +126 -2
- data/License.txt +1 -1
- data/Manifest.txt +0 -270
- data/Rakefile +1 -1
- data/bin/cucumber +2 -2
- data/config/hoe.rb +7 -2
- data/examples/cs/features/step_definitons/calculator_steps.rb +1 -1
- data/examples/i18n/README.textile +1 -1
- data/examples/i18n/Rakefile +3 -3
- data/examples/i18n/ar/features/step_definitons/calculator_steps.rb +1 -6
- data/examples/i18n/da/features/step_definitons/kalkulator_steps.rb +1 -1
- data/examples/i18n/de/features/addition.feature +6 -6
- data/examples/i18n/de/features/step_definitons/calculator_steps.rb +2 -2
- data/examples/i18n/en/features/addition.feature +6 -6
- data/examples/i18n/en/features/step_definitons/calculator_steps.rb +2 -2
- data/examples/i18n/es/features/adicion.feature +11 -12
- data/examples/i18n/es/features/step_definitons/calculador_steps.rb +7 -10
- data/examples/i18n/es/lib/calculador.rb +4 -1
- data/examples/i18n/et/features/liitmine.feature +7 -6
- data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +1 -1
- data/examples/i18n/fi/features/step_definitons/laskin_steps.rb +1 -1
- data/examples/i18n/fi/features/yhteenlasku.feature +2 -2
- data/examples/i18n/fr/features/addition.feature +2 -2
- data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +1 -1
- data/examples/i18n/id/features/addition.feature +6 -6
- data/examples/i18n/id/features/step_definitons/calculator_steps.rb +2 -2
- data/examples/i18n/it/features/step_definitons/calcolatrice_steps.rb +1 -1
- data/examples/i18n/ja/features/step_definitons/calculator_steps.rb +2 -3
- data/examples/i18n/ko/features/step_definitons/calculator_steps.rb +1 -1
- data/examples/i18n/lt/features/addition.feature +7 -6
- data/examples/i18n/lt/features/step_definitons/calculator_steps.rb +2 -2
- data/examples/i18n/no/features/step_definitons/kalkulator_steps.rb +7 -7
- data/examples/i18n/no/features/summering.feature +1 -0
- data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +1 -1
- data/examples/i18n/ro/features/step_definitons/calculator_steps.rb +1 -1
- data/examples/i18n/se/features/step_definitons/kalkulator_steps.rb +1 -1
- data/examples/i18n/zh-CN/features/step_definitons/calculator_steps.rb +2 -2
- data/examples/java/src/cucumber/demo/Hello.java +16 -0
- data/examples/jbehave/README.textile +17 -0
- data/examples/jbehave/features/support/env.rb +7 -0
- data/examples/jbehave/features/trading.feature +24 -0
- data/examples/jbehave/pom.xml +48 -0
- data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/converters/TraderConverter.java +32 -0
- data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/model/Stock.java +42 -0
- data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/model/Trader.java +29 -0
- data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/persistence/TraderPersister.java +22 -0
- data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/scenarios/TraderSteps.java +65 -0
- data/examples/self_test/README.textile +4 -1
- data/examples/{calculator_ruby_features → self_test}/Rakefile +3 -3
- data/examples/self_test/features/background/failing_background.feature +10 -0
- data/examples/self_test/features/background/failing_background_after_success.feature +11 -0
- data/examples/self_test/features/background/multiline_args_background.feature +32 -0
- data/examples/self_test/features/background/passing_background.feature +10 -0
- data/examples/self_test/features/background/pending_background.feature +10 -0
- data/examples/self_test/features/background/scenario_outline_failing_background.feature +16 -0
- data/examples/self_test/features/background/scenario_outline_passing_background.feature +16 -0
- data/examples/self_test/features/call_undefined_step_from_step_def.feature +7 -0
- data/examples/self_test/features/lots_of_undefined.feature +8 -0
- data/examples/self_test/features/outline_sample.feature +11 -5
- data/examples/self_test/features/sample.feature +8 -3
- data/examples/self_test/features/step_definitions/sample_steps.rb +53 -4
- data/examples/self_test/features/support/env.rb +1 -0
- data/examples/self_test/features/support/tag_count_formatter.rb +25 -0
- data/examples/tickets/features/172.feature +28 -0
- data/examples/tickets/features/177/1.feature +29 -0
- data/examples/tickets/features/177/2.feature +21 -0
- data/examples/tickets/features/177/3.feature +18 -0
- data/examples/tickets/features/180.feature +7 -0
- data/examples/tickets/features/scenario_outline.feature +6 -1
- data/examples/tickets/features/step_definitons/tickets_steps.rb +27 -3
- data/examples/tickets/features/tickets.feature +4 -0
- data/features/background.feature +223 -0
- data/features/cucumber_cli.feature +218 -98
- data/features/cucumber_cli_outlines.feature +54 -37
- data/features/custom_formatter.feature +11 -0
- data/features/report_called_undefined_steps.feature +32 -0
- data/features/step_definitions/cucumber_steps.rb +7 -3
- data/features/step_definitions/extra_steps.rb +1 -1
- data/features/support/env.rb +2 -1
- data/gem_tasks/flog.rake +1 -1
- data/gem_tasks/gemspec.rake +2 -2
- data/gem_tasks/jar.rake +67 -0
- data/lib/autotest/cucumber_mixin.rb +17 -23
- data/lib/cucumber.rb +63 -11
- data/lib/cucumber/ast.rb +29 -0
- data/lib/cucumber/ast/background.rb +88 -0
- data/lib/cucumber/ast/comment.rb +26 -0
- data/lib/cucumber/ast/examples.rb +26 -0
- data/lib/cucumber/ast/feature.rb +66 -0
- data/lib/cucumber/ast/features.rb +39 -0
- data/lib/cucumber/ast/filter.rb +22 -0
- data/lib/cucumber/ast/outline_table.rb +49 -0
- data/lib/cucumber/ast/py_string.rb +52 -0
- data/lib/cucumber/ast/scenario.rb +103 -0
- data/lib/cucumber/ast/scenario_outline.rb +92 -0
- data/lib/cucumber/ast/step.rb +161 -0
- data/lib/cucumber/ast/steps.rb +13 -0
- data/lib/cucumber/ast/table.rb +218 -0
- data/lib/cucumber/ast/tags.rb +40 -0
- data/lib/cucumber/ast/visitor.rb +109 -0
- data/lib/cucumber/broadcaster.rb +1 -6
- data/lib/cucumber/cli/configuration.rb +339 -0
- data/lib/cucumber/cli/language_help_formatter.rb +59 -0
- data/lib/cucumber/cli/main.rb +100 -0
- data/lib/cucumber/core_ext/exception.rb +41 -8
- data/lib/cucumber/core_ext/instance_exec.rb +54 -0
- data/lib/cucumber/core_ext/proc.rb +29 -65
- data/lib/cucumber/core_ext/string.rb +19 -0
- data/lib/cucumber/formatter.rb +1 -0
- data/lib/cucumber/{formatters → formatter}/ansicolor.rb +14 -16
- data/lib/cucumber/formatter/color_io.rb +17 -0
- data/lib/cucumber/formatter/console.rb +119 -0
- data/lib/cucumber/formatter/cucumber.css +55 -0
- data/lib/cucumber/formatter/cucumber.sass +49 -0
- data/lib/cucumber/formatter/html.rb +121 -0
- data/lib/cucumber/formatter/pretty.rb +167 -0
- data/lib/cucumber/formatter/profile.rb +77 -0
- data/lib/cucumber/formatter/progress.rb +68 -0
- data/lib/cucumber/formatter/rerun.rb +35 -0
- data/lib/cucumber/formatter/unicode.rb +35 -0
- data/lib/cucumber/formatters/unicode.rb +2 -35
- data/lib/cucumber/jbehave.rb +102 -0
- data/lib/cucumber/languages.yml +128 -75
- data/lib/cucumber/parser.rb +43 -0
- data/lib/cucumber/parser/basic.rb +0 -0
- data/lib/cucumber/parser/feature.rb +1490 -0
- data/lib/cucumber/parser/feature.tt +188 -0
- data/lib/cucumber/parser/i18n.tt +31 -0
- data/lib/cucumber/parser/table.rb +402 -0
- data/lib/cucumber/parser/table.tt +59 -0
- data/lib/cucumber/parser/treetop_ext.rb +75 -0
- data/lib/cucumber/platform.rb +3 -17
- data/lib/cucumber/rails/rspec.rb +5 -2
- data/lib/cucumber/step_definition.rb +87 -0
- data/lib/cucumber/step_mother.rb +151 -66
- data/lib/cucumber/version.rb +2 -2
- data/rails_generators/cucumber/USAGE +3 -2
- data/rails_generators/cucumber/cucumber_generator.rb +33 -23
- data/rails_generators/cucumber/templates/cucumber +2 -1
- data/rails_generators/cucumber/templates/cucumber.rake +6 -1
- data/rails_generators/cucumber/templates/env.rb +1 -1
- data/rails_generators/feature/USAGE +3 -0
- data/rails_generators/feature/feature_generator.rb +30 -6
- data/spec/cucumber/ast/background_spec.rb +58 -0
- data/spec/cucumber/ast/feature_factory.rb +54 -0
- data/spec/cucumber/ast/feature_spec.rb +60 -0
- data/spec/cucumber/ast/py_string_spec.rb +40 -0
- data/spec/cucumber/ast/scenario_outline_spec.rb +64 -0
- data/spec/cucumber/ast/scenario_spec.rb +82 -0
- data/spec/cucumber/ast/step_spec.rb +45 -0
- data/spec/cucumber/ast/table_spec.rb +81 -0
- data/spec/cucumber/ast/tags_spec.rb +23 -0
- data/spec/cucumber/broadcaster_spec.rb +4 -17
- data/spec/cucumber/cli/configuration_spec.rb +239 -0
- data/spec/cucumber/cli/main_spec.rb +164 -0
- data/spec/cucumber/core_ext/proc_spec.rb +27 -35
- data/spec/cucumber/core_ext/string_spec.rb +8 -0
- data/spec/cucumber/{formatters → formatter}/ansicolor_spec.rb +2 -2
- data/spec/cucumber/formatter/html/cucumber.css +37 -0
- data/spec/cucumber/formatter/html/cucumber.js +13 -0
- data/spec/cucumber/formatter/html/index.html +45 -0
- data/spec/cucumber/formatter/html/jquery-1.3.min.js +19 -0
- data/spec/cucumber/formatter/html/jquery.uitableedit.js +100 -0
- data/spec/cucumber/formatters/profile_formatter_spec.rb +17 -16
- data/spec/cucumber/parser/feature_parser_spec.rb +281 -0
- data/spec/cucumber/parser/table_parser_spec.rb +48 -0
- data/spec/cucumber/step_definition_spec.rb +62 -0
- data/spec/cucumber/step_mother_spec.rb +50 -51
- data/spec/cucumber/treetop_parser/empty_feature.feature +1 -1
- data/spec/cucumber/treetop_parser/scenario_outline.feature +1 -1
- data/spec/cucumber/treetop_parser/spaces.feature +3 -1
- data/spec/cucumber/treetop_parser/with_comments.feature +1 -1
- data/spec/cucumber/treetop_parser/with_tags.feature +18 -0
- data/spec/cucumber/world/pending_spec.rb +13 -12
- data/spec/spec_helper.rb +1 -1
- metadata +107 -79
- data/examples/calculator_ruby_features/features/addition.rb +0 -39
- data/examples/calculator_ruby_features/features/step_definitons/calculator_steps.rb +0 -43
- data/gem_tasks/treetop.rake +0 -41
- data/lib/cucumber/cli.rb +0 -355
- data/lib/cucumber/executor.rb +0 -205
- data/lib/cucumber/formatters.rb +0 -1
- data/lib/cucumber/formatters/autotest_formatter.rb +0 -23
- data/lib/cucumber/formatters/cucumber.css +0 -132
- data/lib/cucumber/formatters/cucumber.js +0 -11
- data/lib/cucumber/formatters/html_formatter.rb +0 -152
- data/lib/cucumber/formatters/jquery.js +0 -32
- data/lib/cucumber/formatters/pretty_formatter.rb +0 -285
- data/lib/cucumber/formatters/profile_formatter.rb +0 -92
- data/lib/cucumber/formatters/progress_formatter.rb +0 -61
- data/lib/cucumber/model.rb +0 -1
- data/lib/cucumber/model/table.rb +0 -32
- data/lib/cucumber/step_methods.rb +0 -49
- data/lib/cucumber/tree.rb +0 -16
- data/lib/cucumber/tree/feature.rb +0 -105
- data/lib/cucumber/tree/features.rb +0 -21
- data/lib/cucumber/tree/given_scenario.rb +0 -13
- data/lib/cucumber/tree/scenario.rb +0 -240
- data/lib/cucumber/tree/step.rb +0 -173
- data/lib/cucumber/tree/table.rb +0 -26
- data/lib/cucumber/tree/top_down_visitor.rb +0 -23
- data/lib/cucumber/treetop_parser/feature.treetop.erb +0 -254
- data/lib/cucumber/treetop_parser/feature_ar.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_cy.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_da.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_de.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_en-lol.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_en-tx.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_en.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_es.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_et.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_fi.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_fr.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_id.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_it.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_ja.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_ko.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_lt.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_nl.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_no.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_parser.rb +0 -36
- data/lib/cucumber/treetop_parser/feature_pl.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_pt.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_ro.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_ro2.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_ru.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_se.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_zh-CN.rb +0 -1951
- data/lib/cucumber/world.rb +0 -1
- data/lib/cucumber/world/pending.rb +0 -22
- data/setup.rb +0 -1585
- data/spec/cucumber/cli_spec.rb +0 -521
- data/spec/cucumber/executor_spec.rb +0 -382
- data/spec/cucumber/formatters/autotest_formatter_spec.rb +0 -26
- data/spec/cucumber/formatters/features.html +0 -269
- data/spec/cucumber/formatters/html_formatter_spec.rb +0 -110
- data/spec/cucumber/formatters/pretty_formatter_spec.rb +0 -410
- data/spec/cucumber/formatters/progress_formatter_spec.rb +0 -81
- data/spec/cucumber/model/table_spec.rb +0 -32
- data/spec/cucumber/tree/feature_spec.rb +0 -122
- data/spec/cucumber/tree/row_scenario_outline_spec.rb +0 -73
- data/spec/cucumber/tree/row_scenario_spec.rb +0 -55
- data/spec/cucumber/tree/row_step_outline_spec.rb +0 -38
- data/spec/cucumber/tree/scenario_outline_spec.rb +0 -50
- data/spec/cucumber/tree/scenario_spec.rb +0 -134
- data/spec/cucumber/tree/step_outline_spec.rb +0 -17
- data/spec/cucumber/tree/step_spec.rb +0 -59
- data/spec/cucumber/treetop_parser/feature_parser_spec.rb +0 -120
@@ -0,0 +1,32 @@
|
|
1
|
+
Feature: Cucumber command line
|
2
|
+
In order to find out what step definitions need to be implemented
|
3
|
+
Developers should always see what step definition is missing
|
4
|
+
|
5
|
+
Scenario: Get info at arbitrary levels of nesting
|
6
|
+
When I run cucumber features/call_undefined_step_from_step_def.feature
|
7
|
+
Then it should pass with
|
8
|
+
"""
|
9
|
+
Feature: Calling undefined step
|
10
|
+
|
11
|
+
Scenario: Call directly # features/call_undefined_step_from_step_def.feature:3
|
12
|
+
Given a step definition that calls an undefined step # features/step_definitions/sample_steps.rb:19
|
13
|
+
Undefined step: "this does not exist" (Cucumber::Undefined)
|
14
|
+
./features/step_definitions/sample_steps.rb:20:in `/^a step definition that calls an undefined step$/'
|
15
|
+
|
16
|
+
Scenario: Call via another # features/call_undefined_step_from_step_def.feature:6
|
17
|
+
Given call step "a step definition that calls an undefined step" # features/step_definitions/sample_steps.rb:23
|
18
|
+
Undefined step: "this does not exist" (Cucumber::Undefined)
|
19
|
+
./features/step_definitions/sample_steps.rb:20:in `/^a step definition that calls an undefined step$/'
|
20
|
+
|
21
|
+
2 scenarios
|
22
|
+
2 undefined steps
|
23
|
+
|
24
|
+
You can implement step definitions for missing steps with these snippets:
|
25
|
+
|
26
|
+
Given /^this does not exist$/ do
|
27
|
+
pending
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
"""
|
32
|
+
|
@@ -6,16 +6,20 @@ When /^I run cucumber (.*)$/ do |cmd|
|
|
6
6
|
@dir ||= 'self_test'
|
7
7
|
full_dir ||= File.expand_path(File.dirname(__FILE__) + "/../../examples/#{@dir}")
|
8
8
|
Dir.chdir(full_dir) do
|
9
|
-
@full_cmd = "#{Cucumber::RUBY_BINARY} #{Cucumber::BINARY} #{cmd}"
|
9
|
+
@full_cmd = "#{Cucumber::RUBY_BINARY} #{Cucumber::BINARY} --no-color #{cmd}"
|
10
10
|
@out = `#{@full_cmd}`
|
11
11
|
@status = $?.exitstatus
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
15
|
Then /^it should (fail|pass) with$/ do |success, output|
|
16
|
+
#puts @out
|
16
17
|
@out.should == output
|
17
|
-
|
18
|
-
|
18
|
+
if success == 'fail'
|
19
|
+
@status.should_not == 0
|
20
|
+
else
|
21
|
+
@status.should == 0
|
22
|
+
end
|
19
23
|
end
|
20
24
|
|
21
25
|
Then /^(.*) should contain$/ do |file, text|
|
@@ -1,2 +1,2 @@
|
|
1
1
|
Given /^missing$/ do
|
2
|
-
end
|
2
|
+
end
|
data/features/support/env.rb
CHANGED
data/gem_tasks/flog.rake
CHANGED
data/gem_tasks/gemspec.rake
CHANGED
@@ -4,7 +4,7 @@ namespace :gemspec do
|
|
4
4
|
File.open('cucumber.gemspec', 'w') {|io| io.write($hoe.spec.to_ruby)}
|
5
5
|
puts "1) git commit -a -m \"Release #{Cucumber::VERSION::STRING}\""
|
6
6
|
puts "2) git tag -a \"v#{Cucumber::VERSION::STRING}\" -m \"Release #{Cucumber::VERSION::STRING}\""
|
7
|
-
puts "3) git push
|
8
|
-
puts "4)
|
7
|
+
puts "3) git push"
|
8
|
+
puts "4) git push --tags"
|
9
9
|
end
|
10
10
|
end
|
data/gem_tasks/jar.rake
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
# http://blog.nicksieger.com/articles/2009/01/10/jruby-1-1-6-gems-in-a-jar
|
2
|
+
|
3
|
+
USE_JRUBY_VERSION = '1.1.6'
|
4
|
+
USE_JBEHAVE_VERSION = '2.1'
|
5
|
+
USE_JUNIT_VERSION = '4.5'
|
6
|
+
USE_HAMCREST_VERSION = '1.1'
|
7
|
+
CUCUMBER_VERSIONED = "cucumber-#{Cucumber::VERSION::STRING}"
|
8
|
+
|
9
|
+
task :jar => [
|
10
|
+
:clean,
|
11
|
+
'jar:download_jruby',
|
12
|
+
'jar:install_gems',
|
13
|
+
'jar:bundle_gems',
|
14
|
+
'jar:download_jars_deps',
|
15
|
+
'jar:unpack_jar_deps',
|
16
|
+
'jar:bundle_jars',
|
17
|
+
'jar:fix_gem_binaries',
|
18
|
+
'jar:test_jar'
|
19
|
+
]
|
20
|
+
|
21
|
+
namespace :jar do
|
22
|
+
task :download_jruby do
|
23
|
+
sh "wget http://dist.codehaus.org/jruby/#{USE_JRUBY_VERSION}/jruby-complete-#{USE_JRUBY_VERSION}.jar -O #{CUCUMBER_VERSIONED}.jar"
|
24
|
+
end
|
25
|
+
|
26
|
+
task :install_gems => :gem do
|
27
|
+
mkdir 'pkg/jar_gems'
|
28
|
+
sh "java -jar #{CUCUMBER_VERSIONED}.jar -S gem install -i ./pkg/jar_gems pkg/#{CUCUMBER_VERSIONED}.gem --no-ri --no-rdoc"
|
29
|
+
end
|
30
|
+
|
31
|
+
task :bundle_gems do
|
32
|
+
sh "jar uf #{CUCUMBER_VERSIONED}.jar -C pkg/jar_gems ."
|
33
|
+
end
|
34
|
+
|
35
|
+
task :download_jars_deps do
|
36
|
+
mkdir 'pkg/jar_deps'
|
37
|
+
sh "wget http://repository.codehaus.org/org/jbehave/jbehave-core/#{USE_JBEHAVE_VERSION}/jbehave-core-#{USE_JBEHAVE_VERSION}.jar -O pkg/jar_deps/jbehave-core-#{USE_JBEHAVE_VERSION}.jar"
|
38
|
+
sh "wget http://mirrors.ibiblio.org/pub/mirrors/maven2/junit/junit/#{USE_JUNIT_VERSION}/junit-#{USE_JUNIT_VERSION}.jar -O pkg/jar_deps/junit-#{USE_JUNIT_VERSION}.jar"
|
39
|
+
sh "wget http://hamcrest.googlecode.com/files/hamcrest-all-#{USE_HAMCREST_VERSION}.jar -O pkg/jar_deps/hamcrest-all-#{USE_HAMCREST_VERSION}.jar"
|
40
|
+
end
|
41
|
+
|
42
|
+
task :unpack_jar_deps do
|
43
|
+
Dir.chdir 'pkg/jar_deps' do
|
44
|
+
Dir['*.jar'].each do |jar|
|
45
|
+
sh "jar xvf #{jar}"
|
46
|
+
rm_rf jar
|
47
|
+
rm_rf 'META-INF'
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
task :bundle_jars do
|
53
|
+
sh "jar uf #{CUCUMBER_VERSIONED}.jar -C pkg/jar_deps ."
|
54
|
+
end
|
55
|
+
|
56
|
+
task :fix_gem_binaries do
|
57
|
+
mkdir_p 'pkg/gem_binaries/META-INF/jruby.home'
|
58
|
+
Dir.chdir 'pkg/gem_binaries/META-INF/jruby.home' do
|
59
|
+
sh "jar xvf ../../../../#{CUCUMBER_VERSIONED}.jar bin"
|
60
|
+
end
|
61
|
+
sh "jar uf #{CUCUMBER_VERSIONED}.jar -C pkg/gem_binaries ."
|
62
|
+
end
|
63
|
+
|
64
|
+
task :test_jar do
|
65
|
+
sh "java -cp examples/jbehave/target/classes -jar #{CUCUMBER_VERSIONED}.jar -S cucumber examples/jbehave/features"
|
66
|
+
end
|
67
|
+
end
|
@@ -1,13 +1,14 @@
|
|
1
1
|
require 'autotest'
|
2
2
|
require 'tempfile'
|
3
|
-
require
|
3
|
+
require 'yaml'
|
4
|
+
require File.dirname(__FILE__) + '/../cucumber'
|
4
5
|
|
5
6
|
module Autotest::CucumberMixin
|
6
7
|
def self.included(receiver)
|
7
8
|
receiver::ALL_HOOKS << [:run_features, :ran_features]
|
8
9
|
end
|
9
10
|
|
10
|
-
attr_accessor :
|
11
|
+
attr_accessor :features_to_run
|
11
12
|
|
12
13
|
def initialize
|
13
14
|
super
|
@@ -45,7 +46,7 @@ module Autotest::CucumberMixin
|
|
45
46
|
end
|
46
47
|
|
47
48
|
def all_features_good
|
48
|
-
|
49
|
+
features_to_run == ""
|
49
50
|
end
|
50
51
|
|
51
52
|
def get_to_green
|
@@ -62,13 +63,13 @@ module Autotest::CucumberMixin
|
|
62
63
|
end
|
63
64
|
|
64
65
|
def reset_features
|
65
|
-
self.
|
66
|
+
self.features_to_run = :all
|
66
67
|
end
|
67
68
|
|
68
69
|
def run_features
|
69
70
|
hook :run_features
|
70
|
-
Tempfile.open('autotest-cucumber') do |
|
71
|
-
cmd = self.make_cucumber_cmd
|
71
|
+
Tempfile.open('autotest-cucumber') do |dirty_features_file|
|
72
|
+
cmd = self.make_cucumber_cmd(self.features_to_run, dirty_features_file.path)
|
72
73
|
return if cmd.empty?
|
73
74
|
puts cmd unless $q
|
74
75
|
old_sync = $stdout.sync
|
@@ -94,37 +95,30 @@ module Autotest::CucumberMixin
|
|
94
95
|
ensure
|
95
96
|
$stdout.sync = old_sync
|
96
97
|
end
|
97
|
-
self.
|
98
|
-
self.tainted = true unless self.
|
98
|
+
self.features_to_run = dirty_features_file.read
|
99
|
+
self.tainted = true unless self.features_to_run == []
|
99
100
|
end
|
100
101
|
hook :ran_features
|
101
102
|
end
|
102
103
|
|
103
|
-
def make_cucumber_cmd(
|
104
|
-
return '' if
|
104
|
+
def make_cucumber_cmd(features_to_run, dirty_features_filename)
|
105
|
+
return '' if features_to_run == ''
|
105
106
|
|
106
107
|
profiles = YAML.load_file("cucumber.yml").keys rescue []
|
107
108
|
|
108
|
-
profile ||= "autotest-all" if profiles.include?("autotest-all") and
|
109
|
+
profile ||= "autotest-all" if profiles.include?("autotest-all") and features_to_run == :all
|
109
110
|
profile ||= "autotest" if profiles.include?("autotest")
|
110
111
|
profile ||= nil
|
111
112
|
|
112
113
|
if profile
|
113
114
|
args = ["--profile", profile]
|
114
115
|
else
|
115
|
-
args = %w{
|
116
|
+
args = %w{--format} << (features_to_run == :all ? "progress" : "pretty")
|
116
117
|
end
|
117
|
-
args += %w{--format
|
118
|
+
args += %w{--color --format rerun --out} << dirty_features_filename
|
119
|
+
args << (features_to_run == :all ? "features" : features_to_run)
|
118
120
|
args = args.join(' ')
|
119
|
-
|
120
|
-
|
121
|
-
scenario_args = nil
|
122
|
-
else
|
123
|
-
# We escape scenario names for the shell by wrapping them in $'...' and replacing
|
124
|
-
# every single quote with an escaped version, "\'". We use a double backslash for
|
125
|
-
# Ruby, and we put it in a block or gsub interpolates the sequence "\'" as $'.
|
126
|
-
scenario_args = scenarios_to_run.map { |s| "-s $'#{s.gsub("'") {"\\'"} }'" }.join(' ')
|
127
|
-
end
|
128
|
-
return "#{Cucumber::RUBY_BINARY} #{Cucumber::BINARY} #{args} #{scenario_args}"
|
121
|
+
|
122
|
+
return "#{Cucumber::RUBY_BINARY} #{Cucumber::BINARY} #{args}"
|
129
123
|
end
|
130
124
|
end
|
data/lib/cucumber.rb
CHANGED
@@ -1,19 +1,71 @@
|
|
1
1
|
$:.unshift(File.dirname(__FILE__)) unless
|
2
2
|
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
3
|
|
4
|
+
require 'yaml'
|
4
5
|
require 'cucumber/platform'
|
5
|
-
require '
|
6
|
-
require 'treetop/runtime'
|
7
|
-
require 'treetop/ruby_extensions'
|
6
|
+
require 'cucumber/parser'
|
8
7
|
require 'cucumber/version'
|
9
|
-
require 'cucumber/step_methods'
|
10
|
-
require 'cucumber/tree'
|
11
|
-
require 'cucumber/model'
|
12
|
-
require 'cucumber/executor'
|
13
8
|
require 'cucumber/step_mother'
|
14
|
-
require 'cucumber/
|
15
|
-
require 'cucumber/treetop_parser/feature_parser'
|
16
|
-
require 'cucumber/cli'
|
9
|
+
require 'cucumber/cli/main'
|
17
10
|
require 'cucumber/broadcaster'
|
18
|
-
require 'cucumber/world'
|
19
11
|
require 'cucumber/core_ext/exception'
|
12
|
+
|
13
|
+
module Cucumber
|
14
|
+
KEYWORD_KEYS = %w{name native encoding feature background scenario scenario_outline examples given when then but}
|
15
|
+
|
16
|
+
class << self
|
17
|
+
attr_reader :lang
|
18
|
+
|
19
|
+
def load_language(lang) #:nodoc:
|
20
|
+
return if @lang
|
21
|
+
@lang = lang
|
22
|
+
alias_step_definitions(lang)
|
23
|
+
Parser.load_parser(keyword_hash)
|
24
|
+
end
|
25
|
+
|
26
|
+
def language_incomplete?(lang=@lang)
|
27
|
+
KEYWORD_KEYS.detect{|key| keyword_hash(lang)[key].nil?}
|
28
|
+
end
|
29
|
+
|
30
|
+
# File mode that accounts for Ruby platform and current language
|
31
|
+
def file_mode(m)
|
32
|
+
Cucumber::RUBY_1_9 ? "#{m}:#{keyword_hash['encoding']}" : m
|
33
|
+
end
|
34
|
+
|
35
|
+
# Returns a Hash of the currently active
|
36
|
+
# language, or for a specific language if +lang+ is
|
37
|
+
# specified.
|
38
|
+
def keyword_hash(lang=@lang)
|
39
|
+
LANGUAGES[lang]
|
40
|
+
end
|
41
|
+
|
42
|
+
def alias_step_definitions(lang) #:nodoc:
|
43
|
+
keywords = %w{given when then and but}.map{|keyword| keyword_hash(lang)[keyword]}
|
44
|
+
alias_steps(keywords)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Sets up additional aliases for Given, When and Then.
|
48
|
+
# Try adding the following to your <tt>support/env.rb</tt>:
|
49
|
+
#
|
50
|
+
# # Given When Then in Norwegian
|
51
|
+
# Cucumber.alias_steps %w{Gitt Naar Saa}
|
52
|
+
#
|
53
|
+
# You cannot use special characters here, because methods
|
54
|
+
# with special characters is not valid Ruby code
|
55
|
+
#
|
56
|
+
def alias_steps(keywords)
|
57
|
+
keywords.each do |adverb|
|
58
|
+
StepMother.class_eval do
|
59
|
+
alias_method adverb, :register_step_definition
|
60
|
+
end
|
61
|
+
|
62
|
+
StepMother::WorldMethods.class_eval do
|
63
|
+
alias_method adverb, :__cucumber_invoke
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# Make sure we always have English aliases
|
70
|
+
alias_step_definitions('en')
|
71
|
+
end
|
data/lib/cucumber/ast.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'cucumber/ast/comment'
|
2
|
+
require 'cucumber/ast/tags'
|
3
|
+
require 'cucumber/ast/features'
|
4
|
+
require 'cucumber/ast/feature'
|
5
|
+
require 'cucumber/ast/scenario'
|
6
|
+
require 'cucumber/ast/scenario_outline'
|
7
|
+
require 'cucumber/ast/background'
|
8
|
+
require 'cucumber/ast/steps'
|
9
|
+
require 'cucumber/ast/step'
|
10
|
+
require 'cucumber/ast/table'
|
11
|
+
require 'cucumber/ast/py_string'
|
12
|
+
require 'cucumber/ast/outline_table'
|
13
|
+
require 'cucumber/ast/examples'
|
14
|
+
require 'cucumber/ast/visitor'
|
15
|
+
require 'cucumber/ast/filter'
|
16
|
+
|
17
|
+
module Cucumber
|
18
|
+
# Classes in this module represent the Abstract Syntax Tree (AST)
|
19
|
+
# that gets built when feature files are parsed.
|
20
|
+
#
|
21
|
+
# AST classes don't expose any internal data directly. This is
|
22
|
+
# in order to encourage a less coupled design in the classes
|
23
|
+
# that operate on the AST. The only public method is #accept.
|
24
|
+
#
|
25
|
+
# The AST can be traversed with a visitor. See Cucumber::Format::Pretty
|
26
|
+
# for an example.
|
27
|
+
module Ast
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
module Cucumber
|
2
|
+
module Ast
|
3
|
+
class Background < Scenario
|
4
|
+
|
5
|
+
attr_accessor :world
|
6
|
+
attr_reader :status
|
7
|
+
|
8
|
+
def initialize(comment, line, keyword, steps)
|
9
|
+
@record_executed_steps = true
|
10
|
+
super(comment, Tags.new(1, []), line, keyword, "", steps)
|
11
|
+
end
|
12
|
+
|
13
|
+
def accept(visitor)
|
14
|
+
@world = visitor.new_world
|
15
|
+
if already_visited_steps?
|
16
|
+
@status = execute_steps(visitor)
|
17
|
+
else
|
18
|
+
@status = visit_background_and_steps(visitor, @steps)
|
19
|
+
@steps_visited = true
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def step_executed(step)
|
24
|
+
@feature.step_executed(step) if @feature && @record_executed_steps
|
25
|
+
end
|
26
|
+
|
27
|
+
def already_visited_steps?
|
28
|
+
@steps_visited
|
29
|
+
end
|
30
|
+
|
31
|
+
def to_sexp #:nodoc:
|
32
|
+
sexp = [:background, @line, @keyword]
|
33
|
+
comment = @comment.to_sexp
|
34
|
+
sexp += [comment] if comment
|
35
|
+
tags = @tags.to_sexp
|
36
|
+
sexp += tags if tags.any?
|
37
|
+
steps = @steps.map{|step| step.to_sexp}
|
38
|
+
sexp += steps if steps.any?
|
39
|
+
sexp
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def visit_background_and_steps(visitor, steps)
|
45
|
+
visitor.visit_comment(@comment)
|
46
|
+
visitor.visit_scenario_name(@keyword, @name, file_line(@line), source_indent(text_length))
|
47
|
+
|
48
|
+
previous = :passed
|
49
|
+
steps.each do |step|
|
50
|
+
step.previous = previous
|
51
|
+
step.world = @world
|
52
|
+
visitor.visit_step(step)
|
53
|
+
previous = step.status
|
54
|
+
end
|
55
|
+
previous
|
56
|
+
end
|
57
|
+
|
58
|
+
def execute_steps(visitor)
|
59
|
+
previous = :passed
|
60
|
+
executed_steps = []
|
61
|
+
exception = nil
|
62
|
+
@steps.each do |step|
|
63
|
+
executed_step, previous, _ = step.execute_as_new(@world, previous, visitor, @line)
|
64
|
+
executed_steps << executed_step
|
65
|
+
exception ||= executed_step.exception
|
66
|
+
end
|
67
|
+
@steps = executed_steps
|
68
|
+
|
69
|
+
if exception && @status != :failed
|
70
|
+
without_recording_steps do
|
71
|
+
@steps_visited = false
|
72
|
+
#Since the steps have already been executed they will not be re-run, they will just be displayed
|
73
|
+
visitor.visit_background(self)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
previous
|
78
|
+
end
|
79
|
+
|
80
|
+
def without_recording_steps
|
81
|
+
@record_executed_steps = false
|
82
|
+
yield
|
83
|
+
@record_executed_steps = true
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|