cucumber-tcl 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,29 @@
1
+ ## Running tests
2
+
3
+ gem install bundler
4
+ bundle install
5
+ bundle exec rake
6
+
7
+ This runs tests on both the Ruby and Tcl code.
8
+
9
+ ## Release Process
10
+
11
+ * Bump the version number in `lib/cucumber/tcl/version`.
12
+
13
+ Now release it
14
+
15
+ bundle update && bundle exec rake # check all tests are passing
16
+ git commit -m "Release `cat lib/cucumber/tcl/version`"
17
+ rake release
18
+
19
+ ## Gaining Release Karma
20
+
21
+ To become a release manager, create a pull request adding your name to the list below, and include your [Rubygems email address](https://rubygems.org/sign_up) in the ticket. One of the existing Release managers will then add you.
22
+
23
+ Current release managers:
24
+ * [Matt Wynne](https://rubygems.org/profiles/mattwynne)
25
+ * [Jonathan Owers](https://rubygems.org/profiles/jowers)
26
+
27
+ To grant release karma, issue the following command:
28
+
29
+ gem owner cucumber-tcl --add <NEW OWNER RUBYGEMS EMAIL>
data/README.md CHANGED
@@ -12,7 +12,6 @@ You'll need the following:
12
12
 
13
13
  * tcl8.5 and dev libraries
14
14
  * ruby > 1.9.1 along with its dev libraries
15
- * [Cucumber-Ruby](https://github.com/cucumber/cucumber)
16
15
 
17
16
  How to use
18
17
  ----------
@@ -53,3 +52,39 @@ If your regular expression captures any matches, you should provide a list of va
53
52
  puts "$quantity cucumbers bought. Price was $price"
54
53
  }
55
54
 
55
+ You can use basic tables in your scenarios. The data from the table s made available to your step definition, via the last variable name you pass into the capture list. For example, if you had the following step in your feature:
56
+
57
+ Given I have added the following products to my shopping cart:
58
+ | apple | £2.00 |
59
+ | orange | £3.00 |
60
+ | banana | £1.50 |
61
+
62
+ I could write the step definition for the Given step as:
63
+
64
+ Given {^I have added the following products to my shopping cart:$} {table_data} {
65
+ puts "$table_data"
66
+ }
67
+
68
+ The data in the table is provided as a list of lists, so in the above example, table data would look like:
69
+
70
+ {"apple" "£2.00"} {"orange" "£3.00"} {"banana" "£1.50"}
71
+
72
+ meaning you can access each element using `lindex`, e.g.
73
+
74
+ puts [lindex [lindex $table_data 0] 0]
75
+ apple
76
+
77
+ If your step definition captures a match in the step definition as well as has a table, the table variable will always be last, e.g.
78
+
79
+ When I buy the following items from Tesco:
80
+ | cabbage |
81
+ | potato |
82
+ | onion |
83
+
84
+ and in your step definition, you might have
85
+
86
+ Given {^I buy the following items from (\w+):$} {store items} {
87
+ puts "I've been shopping at $store"
88
+ puts "The first item I bought was [lindex $items 0]"
89
+ }
90
+
@@ -0,0 +1,27 @@
1
+ Feature: DataTables
2
+
3
+ @wip
4
+ Scenario: Match a step with a DataTable
5
+ Given a file named "features/test.feature" with:
6
+ """
7
+ Feature:
8
+ Scenario:
9
+ Given passing with a DataTable:
10
+ | a | b |
11
+ | c | d |
12
+ """
13
+ And a file named "features/support/env.rb" with:
14
+ """
15
+ require 'cucumber/tcl'
16
+ """
17
+ And a file named "features/step_defintions/steps.tcl" with:
18
+ """
19
+ Given {^passing with a DataTable:$} {content} {
20
+ puts $content
21
+ }
22
+ """
23
+ When I run `cucumber`
24
+ Then it should pass with:
25
+ """
26
+ {{a} {b}} {{c} {d}}
27
+ """
@@ -0,0 +1,37 @@
1
+ Feature: Reset state
2
+
3
+ In order to keep state from leaking between scenarios, by default,
4
+ we create a new Tcl interpreter for each test case.
5
+
6
+ Scenario: Set a global variable in one scenario and access it in another
7
+ Given a file named "features/test.feature" with:
8
+ """
9
+ Feature:
10
+ Scenario:
11
+ Given I set a global variable
12
+ When I print the global variable
13
+
14
+ Scenario:
15
+ When I print the global variable
16
+ """
17
+ And a file named "features/step_definitions/steps.tcl" with:
18
+ """
19
+ global g
20
+
21
+ Given {^I set a global variable$} {
22
+ set ::g value
23
+ }
24
+
25
+ When {^I print the global variable$} {
26
+ puts $::g
27
+ }
28
+ """
29
+ And a file named "features/support/env.rb" with:
30
+ """
31
+ require 'cucumber/tcl'
32
+ """
33
+ When I run `cucumber`
34
+ Then it should fail with:
35
+ """
36
+ can't read "::g": no such variable
37
+ """
data/lib/cucumber/tcl.rb CHANGED
@@ -3,7 +3,9 @@ require 'cucumber/tcl/step_definitions'
3
3
 
4
4
  if respond_to?(:AfterConfiguration)
5
5
  AfterConfiguration do |config|
6
- step_definitions = Cucumber::Tcl::StepDefinitions.new(File.dirname(__FILE__) + '/tcl/framework.tcl')
7
- config.filters << Cucumber::Tcl::ActivateSteps.new(step_definitions)
6
+ create_step_definitions = lambda {
7
+ Cucumber::Tcl::StepDefinitions.new(File.dirname(__FILE__) + '/tcl/framework.tcl')
8
+ }
9
+ config.filters << Cucumber::Tcl::ActivateSteps.new(create_step_definitions)
8
10
  end
9
11
  end
@@ -3,19 +3,23 @@ require 'cucumber/core/filter'
3
3
  module Cucumber
4
4
  module Tcl
5
5
 
6
- ActivateSteps = Cucumber::Core::Filter.new(:step_definitions) do
6
+ ActivateSteps = Cucumber::Core::Filter.new(:create_step_definitions) do
7
7
  def test_case(test_case)
8
8
  activated_steps = test_case.test_steps.map do |test_step|
9
- attempt_to_activate(test_step)
9
+ step_definitions.attempt_to_activate(test_step)
10
10
  end
11
11
  test_case.with_steps(activated_steps).describe_to receiver
12
+ reset_step_definitons
12
13
  end
13
14
 
14
15
  private
15
16
 
16
- def attempt_to_activate(test_step)
17
- return test_step unless step_definitions.match?(test_step)
18
- test_step.with_action &step_definitions.action_for(test_step)
17
+ def reset_step_definitons
18
+ @step_definitions = nil
19
+ end
20
+
21
+ def step_definitions
22
+ @step_definitions ||= create_step_definitions.call
19
23
  end
20
24
  end
21
25
 
@@ -0,0 +1,24 @@
1
+ module Cucumber
2
+ module Tcl
3
+
4
+ # Wraps the Cucumber DataTable so that when passed through to tcl, its
5
+ # string representation is easy to parse into a tcl list.
6
+ class DataTable
7
+ def initialize(original)
8
+ @raw = original.raw
9
+ end
10
+
11
+ def to_s
12
+ to_tcl_list(@raw.map { |row| to_tcl_list(row) })
13
+ end
14
+
15
+ private
16
+
17
+ def to_tcl_list(array)
18
+ array.map { |element| "{" + element + "}" }.join(" ")
19
+ end
20
+ end
21
+
22
+ end
23
+ end
24
+
@@ -57,7 +57,6 @@ proc step_definition_exists { step_name } {
57
57
 
58
58
 
59
59
  proc execute_step_definition { step_name {multiline_args {}} } {
60
- # TODO: handle parameters in the regexp
61
60
  set res [_search_steps $step_name 1 $multiline_args]
62
61
  return $res
63
62
 
@@ -1,4 +1,5 @@
1
1
  require 'tcl'
2
+ require 'cucumber/tcl/data_table'
2
3
 
3
4
  module Cucumber
4
5
  module Tcl
@@ -9,6 +10,13 @@ module Cucumber
9
10
  @tcl = ::Tcl::Interp.load_from_file(path)
10
11
  end
11
12
 
13
+ def attempt_to_activate(test_step)
14
+ return test_step unless match?(test_step)
15
+ test_step.with_action &action_for(test_step)
16
+ end
17
+
18
+ private
19
+
12
20
  def match?(test_step)
13
21
  step_name = test_step.name
14
22
  @tcl.proc('step_definition_exists').call(step_name) == "1"
@@ -30,6 +38,10 @@ module Cucumber
30
38
  @arguments << arg.content
31
39
  end
32
40
 
41
+ def data_table(arg)
42
+ @arguments << DataTable.new(arg)
43
+ end
44
+
33
45
  def to_a
34
46
  @arguments
35
47
  end
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
@@ -0,0 +1,13 @@
1
+ require 'cucumber/tcl/data_table'
2
+ require 'cucumber/core/ast/data_table'
3
+
4
+ module Cucumber::Tcl
5
+ describe DataTable do
6
+ it "#to_s converts to Tcl list of lists" do
7
+ raw = [["a", "b"], ["c", "d"]]
8
+ original = Cucumber::Core::Ast::DataTable.new(raw, Cucumber::Core::Ast::Location.new(__FILE__, 8))
9
+ table = DataTable.new(original)
10
+ expect(table.to_s).to eq '{{a} {b}} {{c} {d}}'
11
+ end
12
+ end
13
+ end
@@ -1,3 +1,6 @@
1
+ proc execute_step_definition { step_name } {
2
+ }
3
+
1
4
  proc step_definition_exists { step_name } {
2
5
  return 1
3
6
  }
@@ -1,18 +1,16 @@
1
1
  require 'cucumber/tcl'
2
2
  require 'cucumber/core/ast'
3
+ require 'cucumber/core/test/step'
3
4
 
4
5
  module Cucumber::Tcl
5
6
  describe StepDefinitions do
6
- it "can query for a step definition" do
7
- step_definitions = StepDefinitions.new(File.dirname(__FILE__) + '/fixtures/everything_is_defined.tcl')
8
- expect(step_definitions.match?(double(name: 'passing'))).to be_truthy
9
- end
10
7
 
11
8
  it "can activate a passing tcl step" do
12
- step_definitions = StepDefinitions.new(File.dirname(__FILE__) + '/fixtures/everything_passes.tcl')
13
- ast_step = double(multiline_arg: Cucumber::Core::Ast::EmptyMultilineArgument.new)
14
- test_step = double(name: "a step", source: [ ast_step ])
15
- expect { step_definitions.action_for(test_step).call }.not_to raise_error
9
+ step_definitions = StepDefinitions.new(File.dirname(__FILE__) + '/fixtures/everything_ok.tcl')
10
+ location = double
11
+ ast_step = double(name: double, location: location, multiline_arg: Cucumber::Core::Ast::EmptyMultilineArgument.new)
12
+ test_step = Cucumber::Core::Test::Step.new([ ast_step ])
13
+ expect(step_definitions.attempt_to_activate(test_step).location).to eq location
16
14
  end
17
15
  end
18
16
  end
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cucumber-tcl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Matt Wynne
@@ -10,11 +11,12 @@ authors:
10
11
  autorequire:
11
12
  bindir: bin
12
13
  cert_chain: []
13
- date: 2015-02-18 00:00:00.000000000 Z
14
+ date: 2015-03-02 00:00:00.000000000 Z
14
15
  dependencies:
15
16
  - !ruby/object:Gem::Dependency
16
17
  name: ruby-tcl
17
18
  requirement: !ruby/object:Gem::Requirement
19
+ none: false
18
20
  requirements:
19
21
  - - ~>
20
22
  - !ruby/object:Gem::Version
@@ -22,6 +24,7 @@ dependencies:
22
24
  type: :runtime
23
25
  prerelease: false
24
26
  version_requirements: !ruby/object:Gem::Requirement
27
+ none: false
25
28
  requirements:
26
29
  - - ~>
27
30
  - !ruby/object:Gem::Version
@@ -29,6 +32,7 @@ dependencies:
29
32
  - !ruby/object:Gem::Dependency
30
33
  name: cucumber
31
34
  requirement: !ruby/object:Gem::Requirement
35
+ none: false
32
36
  requirements:
33
37
  - - ~>
34
38
  - !ruby/object:Gem::Version
@@ -36,6 +40,7 @@ dependencies:
36
40
  type: :runtime
37
41
  prerelease: false
38
42
  version_requirements: !ruby/object:Gem::Requirement
43
+ none: false
39
44
  requirements:
40
45
  - - ~>
41
46
  - !ruby/object:Gem::Version
@@ -43,6 +48,7 @@ dependencies:
43
48
  - !ruby/object:Gem::Dependency
44
49
  name: rspec
45
50
  requirement: !ruby/object:Gem::Requirement
51
+ none: false
46
52
  requirements:
47
53
  - - ~>
48
54
  - !ruby/object:Gem::Version
@@ -50,6 +56,7 @@ dependencies:
50
56
  type: :development
51
57
  prerelease: false
52
58
  version_requirements: !ruby/object:Gem::Requirement
59
+ none: false
53
60
  requirements:
54
61
  - - ~>
55
62
  - !ruby/object:Gem::Version
@@ -57,6 +64,7 @@ dependencies:
57
64
  - !ruby/object:Gem::Dependency
58
65
  name: aruba
59
66
  requirement: !ruby/object:Gem::Requirement
67
+ none: false
60
68
  requirements:
61
69
  - - ~>
62
70
  - !ruby/object:Gem::Version
@@ -64,6 +72,7 @@ dependencies:
64
72
  type: :development
65
73
  prerelease: false
66
74
  version_requirements: !ruby/object:Gem::Requirement
75
+ none: false
67
76
  requirements:
68
77
  - - ~>
69
78
  - !ruby/object:Gem::Version
@@ -71,6 +80,7 @@ dependencies:
71
80
  - !ruby/object:Gem::Dependency
72
81
  name: yard
73
82
  requirement: !ruby/object:Gem::Requirement
83
+ none: false
74
84
  requirements:
75
85
  - - ~>
76
86
  - !ruby/object:Gem::Version
@@ -78,6 +88,7 @@ dependencies:
78
88
  type: :development
79
89
  prerelease: false
80
90
  version_requirements: !ruby/object:Gem::Requirement
91
+ none: false
81
92
  requirements:
82
93
  - - ~>
83
94
  - !ruby/object:Gem::Version
@@ -85,6 +96,7 @@ dependencies:
85
96
  - !ruby/object:Gem::Dependency
86
97
  name: rake
87
98
  requirement: !ruby/object:Gem::Requirement
99
+ none: false
88
100
  requirements:
89
101
  - - ~>
90
102
  - !ruby/object:Gem::Version
@@ -92,6 +104,7 @@ dependencies:
92
104
  type: :development
93
105
  prerelease: false
94
106
  version_requirements: !ruby/object:Gem::Requirement
107
+ none: false
95
108
  requirements:
96
109
  - - ~>
97
110
  - !ruby/object:Gem::Version
@@ -103,53 +116,52 @@ extensions: []
103
116
  extra_rdoc_files: []
104
117
  files:
105
118
  - .rspec
119
+ - CONTRIBUTING.md
106
120
  - Gemfile
107
121
  - README.md
108
122
  - Rakefile
109
123
  - circle.yml
110
124
  - cucumber-tcl.gemspec
125
+ - features/data_tables.feature
111
126
  - features/define_a_step.feature
112
127
  - features/doc_strings.feature
128
+ - features/reset_state.feature
113
129
  - features/support/aruba.rb
114
130
  - lib/cucumber/tcl.rb
115
131
  - lib/cucumber/tcl/activate_steps.rb
132
+ - lib/cucumber/tcl/data_table.rb
116
133
  - lib/cucumber/tcl/framework.tcl
117
134
  - lib/cucumber/tcl/step_definitions.rb
118
135
  - lib/cucumber/tcl/test/test_framework.tcl
119
136
  - lib/cucumber/tcl/version
120
- - spec/cucumber/tcl/fixtures/everything_is_defined.tcl
121
- - spec/cucumber/tcl/fixtures/everything_passes.tcl
137
+ - spec/cucumber/tcl/data_table_spec.rb
138
+ - spec/cucumber/tcl/fixtures/everything_ok.tcl
122
139
  - spec/cucumber/tcl/step_definitions_spec.rb
123
140
  homepage: https://github.com/cucumber/cucumber-ruby-tcl
124
141
  licenses:
125
142
  - MIT
126
- metadata: {}
127
143
  post_install_message:
128
144
  rdoc_options:
129
145
  - --charset=UTF-8
130
146
  require_paths:
131
147
  - lib
132
148
  required_ruby_version: !ruby/object:Gem::Requirement
149
+ none: false
133
150
  requirements:
134
- - - '>='
151
+ - - ! '>='
135
152
  - !ruby/object:Gem::Version
136
153
  version: 1.9.3
137
154
  required_rubygems_version: !ruby/object:Gem::Requirement
155
+ none: false
138
156
  requirements:
139
- - - '>='
157
+ - - ! '>='
140
158
  - !ruby/object:Gem::Version
141
159
  version: '0'
142
160
  requirements: []
143
161
  rubyforge_project:
144
- rubygems_version: 2.0.14
162
+ rubygems_version: 1.8.23
145
163
  signing_key:
146
- specification_version: 4
147
- summary: cucumber-tcl-0.0.3
148
- test_files:
149
- - features/define_a_step.feature
150
- - features/doc_strings.feature
151
- - features/support/aruba.rb
152
- - spec/cucumber/tcl/fixtures/everything_is_defined.tcl
153
- - spec/cucumber/tcl/fixtures/everything_passes.tcl
154
- - spec/cucumber/tcl/step_definitions_spec.rb
164
+ specification_version: 3
165
+ summary: cucumber-tcl-0.0.4
166
+ test_files: []
155
167
  has_rdoc:
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: defc8ca2dc36af1dbba2a7401d5d29166fe4e717
4
- data.tar.gz: 565ada350e542eac6379c4fe5b018694b8160f86
5
- SHA512:
6
- metadata.gz: d614a61d2673340c6aeaa4802f869d98c9d999900a4c0ca295d91a79de7a30aaff1d08ac74d8280c3d135e32ae4f5901b2d8535c5e256fd0d671bc5d3770c5f6
7
- data.tar.gz: 8853b3a1ad2474a20f4fdd4dea049b3f047990721f64afcb17fd1ebf2786287526154af9cb33c8bf997132d3d8fd44dfc1c89a5dd37652d5fe3cd1e31da9336d
@@ -1,3 +0,0 @@
1
- proc execute_step_definition { step_name } {
2
- return 0
3
- }