cucumber 0.1.6

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.
Files changed (153) hide show
  1. data/History.txt +3 -0
  2. data/License.txt +20 -0
  3. data/Manifest.txt +152 -0
  4. data/README.txt +42 -0
  5. data/Rakefile +4 -0
  6. data/TODO.txt +26 -0
  7. data/bin/cucumber +4 -0
  8. data/config/hoe.rb +69 -0
  9. data/config/requirements.rb +15 -0
  10. data/cucumber.yml +1 -0
  11. data/examples/calculator/Rakefile +6 -0
  12. data/examples/calculator/cucumber.yml +1 -0
  13. data/examples/calculator/features/addition.feature +16 -0
  14. data/examples/calculator/features/division.feature +10 -0
  15. data/examples/calculator/features/steps/calculator_steps.rb +31 -0
  16. data/examples/calculator/lib/calculator.rb +16 -0
  17. data/examples/calculator_ruby_features/Rakefile +6 -0
  18. data/examples/calculator_ruby_features/features/addition.rb +23 -0
  19. data/examples/calculator_ruby_features/features/steps/calculator_steps.rb +43 -0
  20. data/examples/calculatrice_francaise_avec_soit_scenario/Rakefile +6 -0
  21. data/examples/calculatrice_francaise_avec_soit_scenario/features/addition.feature +13 -0
  22. data/examples/calculatrice_francaise_avec_soit_scenario/features/calculatrice_steps.rb +31 -0
  23. data/examples/cs/README.textile +22 -0
  24. data/examples/cs/Rakefile +12 -0
  25. data/examples/cs/features/hello.feature +11 -0
  26. data/examples/cs/features/steps/hello_steps.rb +25 -0
  27. data/examples/cs/features/steps/tree_steps.rb +14 -0
  28. data/examples/cs/features/tree.feature +9 -0
  29. data/examples/cs/src/Hello.cs +18 -0
  30. data/examples/danish_calculator/Rakefile +6 -0
  31. data/examples/danish_calculator/features/steps/kalkulator_steps.rb +22 -0
  32. data/examples/danish_calculator/features/summering.feature +17 -0
  33. data/examples/danish_calculator/lib/kalkulator.rb +11 -0
  34. data/examples/estonian_calculator/Rakefile +6 -0
  35. data/examples/estonian_calculator/features/kalkulaator_steps.rb +35 -0
  36. data/examples/estonian_calculator/features/liitmine.feature +16 -0
  37. data/examples/java/README.textile +22 -0
  38. data/examples/java/Rakefile +12 -0
  39. data/examples/java/features/hello.feature +11 -0
  40. data/examples/java/features/steps/hello_steps.rb +25 -0
  41. data/examples/java/features/steps/tree_steps.rb +14 -0
  42. data/examples/java/features/tree.feature +9 -0
  43. data/examples/java/src/cucumber/demo/Hello.java +16 -0
  44. data/examples/norwegian_calculator/Rakefile +6 -0
  45. data/examples/norwegian_calculator/features/steps/kalkulator_steps.rb +22 -0
  46. data/examples/norwegian_calculator/features/summering.feature +17 -0
  47. data/examples/norwegian_calculator/lib/kalkulator.rb +11 -0
  48. data/examples/portuguese_calculator/Rakefile +6 -0
  49. data/examples/portuguese_calculator/features/adicao.feature +10 -0
  50. data/examples/portuguese_calculator/features/calculadora_steps.rb +31 -0
  51. data/examples/selenium/Rakefile +6 -0
  52. data/examples/selenium/features/search.feature +9 -0
  53. data/examples/selenium/features/steps/stories_steps.rb +41 -0
  54. data/examples/spanish_calculator/Rakefile +6 -0
  55. data/examples/spanish_calculator/features/adicion.feature +17 -0
  56. data/examples/spanish_calculator/features/steps/calculador_steps.rb +22 -0
  57. data/examples/spanish_calculator/lib/Calculador.rb +11 -0
  58. data/examples/tickets/Rakefile +4 -0
  59. data/examples/tickets/features/steps/tickets_steps.rb +5 -0
  60. data/examples/tickets/features/tickets.feature +7 -0
  61. data/examples/watir/Rakefile +6 -0
  62. data/examples/watir/features/search.feature +9 -0
  63. data/examples/watir/features/steps/stories_steps.rb +51 -0
  64. data/features/see_features.feature +8 -0
  65. data/features/steps/features_steps.rb +9 -0
  66. data/gem_tasks/deployment.rake +34 -0
  67. data/gem_tasks/environment.rake +7 -0
  68. data/gem_tasks/features.rake +6 -0
  69. data/gem_tasks/fix_cr_lf.rake +10 -0
  70. data/gem_tasks/flog.rake +4 -0
  71. data/gem_tasks/gemspec.rake +6 -0
  72. data/gem_tasks/rspec.rake +21 -0
  73. data/gem_tasks/treetop.rake +27 -0
  74. data/generators/cucumber/cucumber_generator.rb +27 -0
  75. data/generators/cucumber/templates/common_webrat.rb +51 -0
  76. data/generators/cucumber/templates/cucumber +2 -0
  77. data/generators/cucumber/templates/cucumber.rake +7 -0
  78. data/generators/cucumber/templates/env.rb +8 -0
  79. data/generators/feature/feature_generator.rb +17 -0
  80. data/generators/feature/templates/feature.erb +27 -0
  81. data/generators/feature/templates/steps.erb +22 -0
  82. data/lib/cucumber.rb +32 -0
  83. data/lib/cucumber/cli.rb +163 -0
  84. data/lib/cucumber/core_ext/proc.rb +43 -0
  85. data/lib/cucumber/core_ext/string.rb +22 -0
  86. data/lib/cucumber/executor.rb +120 -0
  87. data/lib/cucumber/formatters.rb +1 -0
  88. data/lib/cucumber/formatters/ansicolor.rb +90 -0
  89. data/lib/cucumber/formatters/cucumber.css +132 -0
  90. data/lib/cucumber/formatters/cucumber.js +11 -0
  91. data/lib/cucumber/formatters/html_formatter.rb +125 -0
  92. data/lib/cucumber/formatters/jquery.js +32 -0
  93. data/lib/cucumber/formatters/pretty_formatter.rb +126 -0
  94. data/lib/cucumber/formatters/progress_formatter.rb +42 -0
  95. data/lib/cucumber/languages.yml +83 -0
  96. data/lib/cucumber/rails/rspec.rb +12 -0
  97. data/lib/cucumber/rails/world.rb +75 -0
  98. data/lib/cucumber/rake/task.rb +75 -0
  99. data/lib/cucumber/step_methods.rb +45 -0
  100. data/lib/cucumber/step_mother.rb +82 -0
  101. data/lib/cucumber/tree.rb +18 -0
  102. data/lib/cucumber/tree/feature.rb +53 -0
  103. data/lib/cucumber/tree/features.rb +21 -0
  104. data/lib/cucumber/tree/given_scenario.rb +13 -0
  105. data/lib/cucumber/tree/scenario.rb +110 -0
  106. data/lib/cucumber/tree/step.rb +123 -0
  107. data/lib/cucumber/tree/table.rb +26 -0
  108. data/lib/cucumber/tree/top_down_visitor.rb +23 -0
  109. data/lib/cucumber/treetop_parser/feature.treetop.erb +159 -0
  110. data/lib/cucumber/treetop_parser/feature_da.rb +1214 -0
  111. data/lib/cucumber/treetop_parser/feature_de.rb +1214 -0
  112. data/lib/cucumber/treetop_parser/feature_en.rb +1214 -0
  113. data/lib/cucumber/treetop_parser/feature_es.rb +1214 -0
  114. data/lib/cucumber/treetop_parser/feature_et.rb +1214 -0
  115. data/lib/cucumber/treetop_parser/feature_fr.rb +1214 -0
  116. data/lib/cucumber/treetop_parser/feature_no.rb +1214 -0
  117. data/lib/cucumber/treetop_parser/feature_parser.rb +32 -0
  118. data/lib/cucumber/treetop_parser/feature_pt.rb +1214 -0
  119. data/lib/cucumber/treetop_parser/feature_ru.rb +1214 -0
  120. data/lib/cucumber/treetop_parser/feature_se.rb +1214 -0
  121. data/lib/cucumber/version.rb +9 -0
  122. data/script/console +10 -0
  123. data/script/console.cmd +1 -0
  124. data/script/destroy +14 -0
  125. data/script/destroy.cmd +1 -0
  126. data/script/generate +14 -0
  127. data/script/generate.cmd +1 -0
  128. data/script/txt2html +74 -0
  129. data/script/txt2html.cmd +1 -0
  130. data/setup.rb +1585 -0
  131. data/spec/cucumber/cli_spec.rb +36 -0
  132. data/spec/cucumber/core_ext/proc_spec.rb +39 -0
  133. data/spec/cucumber/core_ext/string_spec.rb +34 -0
  134. data/spec/cucumber/executor_spec.rb +131 -0
  135. data/spec/cucumber/formatters/ansicolor_spec.rb +23 -0
  136. data/spec/cucumber/formatters/features.html +269 -0
  137. data/spec/cucumber/formatters/html_formatter_spec.rb +59 -0
  138. data/spec/cucumber/formatters/pretty_formatter_spec.rb +17 -0
  139. data/spec/cucumber/formatters/progress_formatter_spec.rb +44 -0
  140. data/spec/cucumber/sell_cucumbers.feature +9 -0
  141. data/spec/cucumber/step_mother_spec.rb +53 -0
  142. data/spec/cucumber/tree/scenario_spec.rb +15 -0
  143. data/spec/cucumber/treetop_parser/empty_feature.feature +4 -0
  144. data/spec/cucumber/treetop_parser/empty_scenario.feature +9 -0
  145. data/spec/cucumber/treetop_parser/feature_parser_spec.rb +73 -0
  146. data/spec/cucumber/treetop_parser/fit_scenario.feature +7 -0
  147. data/spec/cucumber/treetop_parser/given_scenario.feature +9 -0
  148. data/spec/cucumber/treetop_parser/multiple_tables.feature +27 -0
  149. data/spec/cucumber/treetop_parser/spaces.feature +10 -0
  150. data/spec/cucumber/treetop_parser/with_comments.feature +6 -0
  151. data/spec/spec.opts +2 -0
  152. data/spec/spec_helper.rb +23 -0
  153. metadata +259 -0
@@ -0,0 +1,23 @@
1
+ require 'cucumber/cli' # Needed in order to run the feature with ruby
2
+
3
+ Feature %|Addition
4
+ In order to avoid silly mistakes
5
+ As a math idiot
6
+ I want to be told the sum of two numbers| do
7
+
8
+ Scenario "Add two numbers" do
9
+ Given "I have entered 50 into the calculator"
10
+ And "I have entered 70 into the calculator"
11
+ When "I add"
12
+ Then "the result should be 120 on the screen"
13
+ And "the result class should be Float"
14
+ end
15
+
16
+ Table do |t|
17
+ t | "input_1" | "input_2" | "output" | "class" | t
18
+ # This is kind of dumb - but it illustrates how scenarios can be "generated" in code.
19
+ 10.times do |n|
20
+ t | n | n*2 | n*3 | Fixnum | t
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec'
2
+
3
+ class Calculator
4
+ def push(n)
5
+ @args ||= []
6
+ @args << n
7
+ end
8
+
9
+ def add
10
+ @args.inject(0){|n,sum| sum+=n}
11
+ end
12
+
13
+ def divide
14
+ @args[0].to_f / @args[1].to_f
15
+ end
16
+ end
17
+
18
+ Before do
19
+ @calc = Calculator.new
20
+ end
21
+
22
+ After do
23
+ end
24
+
25
+ Given /I have entered (\d+) into the calculator/ do |n|
26
+ @calc.push n.to_i
27
+ end
28
+
29
+ When 'I add' do
30
+ @result = @calc.add
31
+ end
32
+
33
+ When 'I divide' do
34
+ @result = @calc.divide
35
+ end
36
+
37
+ Then /the result should be (\d*) on the screen/ do |result|
38
+ @result.should == result.to_i
39
+ end
40
+
41
+ Then /the result class should be (\w*)/ do |class_name|
42
+ @result.class.name.should == class_name
43
+ end
@@ -0,0 +1,6 @@
1
+ $:.unshift(File.dirname(__FILE__) + '/../../lib')
2
+ require 'cucumber/rake/task'
3
+
4
+ Cucumber::Rake::Task.new do |t|
5
+ t.cucumber_opts = "--format pretty --language fr"
6
+ end
@@ -0,0 +1,13 @@
1
+ Fonction: Addition
2
+ Afin d'eviter des conneries
3
+ Etant un comptable
4
+ Je désire additionner deux chiffres
5
+
6
+ Scenario: 7 et 5
7
+ Soit que j'ai entré 5
8
+ Et que j'ai entré 7
9
+
10
+ Scenario: Additionner
11
+ SoitScenario: 7 et 5
12
+ Lorsque je tape additionner
13
+ Alors le reultat doit être 12
@@ -0,0 +1,31 @@
1
+ require 'spec'
2
+
3
+ class Calulatrice
4
+ def push(n)
5
+ @args ||= []
6
+ @args << n
7
+ end
8
+
9
+ def additionner
10
+ @args.inject(0){|n,sum| sum+=n}
11
+ end
12
+ end
13
+
14
+ Before do
15
+ @calc = Calulatrice.new
16
+ end
17
+
18
+ After do
19
+ end
20
+
21
+ Given /que j'ai entré (\d+)/ do |n|
22
+ @calc.push n.to_i
23
+ end
24
+
25
+ When 'je tape additionner' do
26
+ @result = @calc.additionner
27
+ end
28
+
29
+ Then /le reultat doit être (\d*)/ do |result|
30
+ @result.should == result.to_i
31
+ end
@@ -0,0 +1,22 @@
1
+ h1. Using Cucumber with Java
2
+
3
+ This directory contains code to demonstrate how Cucumber can be used to develop Java code.
4
+ You need JRuby 1.1.3 or higher installed and JRuby's bin directory on your PATH.
5
+
6
+ h2. Installing required gems
7
+
8
+ jruby -S gem install aslakhellesoy-cucumber
9
+ jruby -S gem install diff-lcs
10
+
11
+ h2. Running the scenarios
12
+
13
+ Open a shell in this directory (java) and execute the following command:
14
+
15
+ <pre><code>
16
+ jruby -S rake features
17
+ </code></pre>
18
+
19
+ This will compile the java code and package it in a jar file, and then run Cucumber against
20
+ that code.
21
+
22
+ There is a deliberate error. See if you can fix it!
@@ -0,0 +1,12 @@
1
+ $:.unshift(File.dirname(__FILE__) + '/../../lib')
2
+ require 'cucumber/rake/task'
3
+
4
+ Cucumber::Rake::Task.new(:features) do |t|
5
+ t.cucumber_opts = "--format pretty"
6
+ end
7
+
8
+ task :features => :compile
9
+
10
+ task :compile do
11
+ sh "csc /target:library /out:Cucumber.Demo.dll src\\Hello.cs"
12
+ end
@@ -0,0 +1,11 @@
1
+ Feature: Hello
2
+ In order to have more friends
3
+ I want to say hello
4
+
5
+ Scenario: Personal greeting
6
+ Given my name is Aslak
7
+ When I greet David
8
+ Then he should hear Hi, David. I'm Aslak.
9
+ And I should remember David as a friend
10
+ And I should get David's phone number
11
+
@@ -0,0 +1,25 @@
1
+ require 'spec' # so we can call .should
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../src') # so the jar is found
3
+ require 'dotnet'
4
+ loadLibrary 'Cucumber.Demo'
5
+
6
+ Given /my name is (\w+)/ do |name|
7
+ @hello = Hello.new # A .net object
8
+ @name = name
9
+ end
10
+
11
+ When /I greet (.*)/ do |someone|
12
+ @greeting = @hello.greet(someone, @name)
13
+ end
14
+
15
+ Then /he should hear (.*)\./ do |message|
16
+ @greeting.should == message
17
+ end
18
+
19
+ Then /I should remember (\w+) as a friend/ do |name|
20
+ @hello.isFriend(name).should == true
21
+ end
22
+
23
+ Then /I should get (\w+)'s phone number/ do |name|
24
+ @hello.getPhoneNumber(name).should_not == nil
25
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec'
2
+ require 'dotnet'
3
+
4
+ Given /I have an empty set/ do
5
+ @set = System.Collections.ArrayList.new
6
+ end
7
+
8
+ When /I add (\w+)/ do |s|
9
+ @set.add(s)
10
+ end
11
+
12
+ Then /the contents should be (.*)/ do |s|
13
+ @set.to_a.join(" ").should == s
14
+ end
@@ -0,0 +1,9 @@
1
+ Feature: Tree
2
+ In order to have more robust Java software
3
+ I want to use Cucumber against Java classes
4
+
5
+ Scenario: Use java.util.TreeSet
6
+ Given I have an empty set
7
+ When I add hello
8
+ And I add world
9
+ Then the contents should be hello world
@@ -0,0 +1,18 @@
1
+ using System;
2
+
3
+ namespace Cucumber.Demo {
4
+ public class Hello {
5
+ public string Greet(string who, string from) {
6
+ return "Hi, " + who + ". I'm " + from;
7
+ }
8
+
9
+ public bool IsFriend(string who) {
10
+ return true;
11
+ }
12
+
13
+ public string GetPhoneNumber(string who) {
14
+ return "99999";
15
+ //throw new Exception("My phone is secret!");
16
+ }
17
+ }
18
+ }
@@ -0,0 +1,6 @@
1
+ $:.unshift(File.dirname(__FILE__) + '/../../lib')
2
+ require 'cucumber/rake/task'
3
+
4
+ Cucumber::Rake::Task.new do |t|
5
+ t.cucumber_opts = "--format pretty --language da"
6
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec'
2
+ $:.unshift(File.dirname(__FILE__) + '/../../lib')
3
+ require 'kalkulator'
4
+
5
+ Before do
6
+ @calc = Kalkulator.new
7
+ end
8
+
9
+ After do
10
+ end
11
+
12
+ Given /at jeg har indtastet (\d+)/ do |n|
13
+ @calc.push n.to_i
14
+ end
15
+
16
+ When 'jeg summerer' do
17
+ @result = @calc.add
18
+ end
19
+
20
+ Then /skal resultatet være (\d*)/ do |result|
21
+ @result.should == result.to_i
22
+ end
@@ -0,0 +1,17 @@
1
+ Egenskab: Summering
2
+ For at slippe for at lave dumme fejl
3
+ Som en regnskabsfører
4
+ Vil jeg kunne lægge sammen
5
+
6
+ Scenarie: to tal
7
+ Givet at jeg har indtastet 5
8
+ Og at jeg har indtastet 7
9
+ Når jeg summerer
10
+ Så skal resultatet være 12
11
+
12
+ Scenarie: tre tal
13
+ Givet at jeg har indtastet 5
14
+ Og at jeg har indtastet 7
15
+ Og at jeg har indtastet 1
16
+ Når jeg summerer
17
+ Så skal resultatet være 14
@@ -0,0 +1,11 @@
1
+ class Kalkulator
2
+ def push(n)
3
+ @args ||= []
4
+ @args << n
5
+ end
6
+
7
+ def add
8
+ #@args[0] + @args[1]
9
+ @args.inject(0){|n,sum| sum+=n}
10
+ end
11
+ end
@@ -0,0 +1,6 @@
1
+ $:.unshift(File.dirname(__FILE__) + '/../../lib')
2
+ require 'cucumber/rake/task'
3
+
4
+ Cucumber::Rake::Task.new do |t|
5
+ t.cucumber_opts = "--format pretty --language et"
6
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec'
2
+
3
+ class Kalkulaator
4
+ def push(n)
5
+ @args ||= []
6
+ @args << n
7
+ end
8
+
9
+ def liida
10
+ @args.inject(0) {|n,sum| sum+n}
11
+ end
12
+ end
13
+
14
+ Before do
15
+ @calc = Kalkulaator.new
16
+ end
17
+
18
+ After do
19
+ end
20
+
21
+ Given /olen sisestanud kalkulaatorisse numbri (\d+)/ do |n|
22
+ @calc.push n.to_i
23
+ end
24
+
25
+ When /ma vajutan (.*)/ do |op|
26
+ @result = @calc.send op
27
+ end
28
+
29
+ Then /vastuseks peab ekraanil kuvatama (\d*)/ do |result|
30
+ @result.should == result.to_i
31
+ end
32
+
33
+ Then /vastuseklass peab olema tüüpi (\w*)/ do |class_name|
34
+ @result.class.name.should == class_name
35
+ end
@@ -0,0 +1,16 @@
1
+ Omadus: Liitmine
2
+ Selleks et vältida rumalaid vigu
3
+ Olles matemaatika-puupea
4
+ Tahan et mulle öeldaks kahe numbri summa
5
+
6
+ Stsenaarium: Liida kaks numbrit
7
+ Eeldades et olen sisestanud kalkulaatorisse numbri 50
8
+ Ja olen sisestanud kalkulaatorisse numbri 70
9
+ Kui ma vajutan liida
10
+ Siis vastuseks peab ekraanil kuvatama 120
11
+ Ja vastuseklass peab olema tüüpi Fixnum
12
+
13
+ | input_1 | input_2 | button | output | class |
14
+ | 20 | 30 | liida | 50 | Fixnum |
15
+ | 2 | 5 | liida | 7 | Fixnum |
16
+ | 0 | 40 | liida | 40 | Fixnum |
@@ -0,0 +1,22 @@
1
+ h1. Using Cucumber with Java
2
+
3
+ This directory contains code to demonstrate how Cucumber can be used to develop Java code.
4
+ You need JRuby 1.1.3 or higher installed and JRuby's bin directory on your PATH.
5
+
6
+ h2. Installing required gems
7
+
8
+ jruby -S gem install aslakhellesoy-cucumber
9
+ jruby -S gem install diff-lcs
10
+
11
+ h2. Running the scenarios
12
+
13
+ Open a shell in this directory (java) and execute the following command:
14
+
15
+ <pre><code>
16
+ jruby -S rake features
17
+ </code></pre>
18
+
19
+ This will compile the java code and package it in a jar file, and then run Cucumber against
20
+ that code.
21
+
22
+ There is a deliberate error. See if you can fix it!
@@ -0,0 +1,12 @@
1
+ $:.unshift(File.dirname(__FILE__) + '/../../lib')
2
+ require 'cucumber/rake/task'
3
+
4
+ Cucumber::Rake::Task.new(:features) do |t|
5
+ t.cucumber_opts = "--format pretty"
6
+ end
7
+
8
+ task :features => :compile
9
+
10
+ task :compile do
11
+ sh "javac src/cucumber/demo/Hello.java && jar cf src/cucumber_demo.jar -C src cucumber/demo/Hello.class"
12
+ end
@@ -0,0 +1,11 @@
1
+ Feature: Hello
2
+ In order to have more friends
3
+ I want to say hello
4
+
5
+ Scenario: Personal greeting
6
+ Given my name is Aslak
7
+ When I greet David
8
+ Then he should hear Hi, David. I'm Aslak.
9
+ And I should remember David as a friend
10
+ And I should get David's phone number
11
+
@@ -0,0 +1,25 @@
1
+ require 'spec' # so we can call .should
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../src') # so the jar is found
3
+ require 'cucumber_demo' # puts the jar on the classpath
4
+ include_class 'cucumber.demo.Hello'
5
+
6
+ Given /my name is (\w+)/ do |name|
7
+ @hello = Hello.new # A java object
8
+ @name = name
9
+ end
10
+
11
+ When /I greet (.*)/ do |someone|
12
+ @greeting = @hello.greet(someone, @name)
13
+ end
14
+
15
+ Then /he should hear (.*)\./ do |message|
16
+ @greeting.should == message
17
+ end
18
+
19
+ Then /I should remember (\w+) as a friend/ do |name|
20
+ @hello.friend?(name).should == true
21
+ end
22
+
23
+ Then /I should get (\w+)'s phone number/ do |name|
24
+ @hello.getPhoneNumber(name).should_not == nil
25
+ end