suhyo 0.0.3 → 0.0.5

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/.document CHANGED
@@ -1,5 +1,5 @@
1
- README.rdoc
2
- lib/**/*.rb
3
- bin/*
4
- features/**/*.feature
5
- LICENSE
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.gitignore CHANGED
@@ -1,21 +1,21 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
-
21
- ## PROJECT::SPECIFIC
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
data/LICENSE CHANGED
@@ -1,20 +1,20 @@
1
- Copyright (c) 2009 jarrett
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1
+ Copyright (c) 2009 jarrett
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.markdown CHANGED
@@ -1,4 +1,4 @@
1
- Suhyo
2
- =====
3
-
1
+ Suhyo
2
+ =====
3
+
4
4
  Suhyo is an extension to RSpec and Webrat. It provides commonly-needed matchers for web applications. The matchers are documented with RDoc in their respective files in the `lib` directory.
data/Rakefile CHANGED
@@ -1,46 +1,47 @@
1
- require 'rubygems'
2
- require 'rake'
3
-
4
- begin
5
- require 'jeweler'
6
- Jeweler::Tasks.new do |gem|
7
- gem.name = "suhyo"
8
- gem.summary = 'Matchers for web app specs'
9
- gem.description = 'Matchers built on Webrat to address some common needs in web app testing'
10
- gem.email = 'jarrett@uchicago.edu'
11
- gem.homepage = 'http://github.com/jarrett/suhyo'
12
- gem.authors = ['jarrett']
13
- gem.add_dependency 'rspec', '>= 1.2.9'
14
- gem.add_dependency 'webrat', '>= 0.7.0'
15
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
16
- end
17
- Jeweler::GemcutterTasks.new
18
- rescue LoadError
19
- puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
20
- end
21
-
22
- require 'spec/rake/spectask'
23
- Spec::Rake::SpecTask.new(:spec) do |spec|
24
- spec.libs << 'lib' << 'spec'
25
- spec.spec_files = FileList['spec/**/*_spec.rb']
26
- end
27
-
28
- Spec::Rake::SpecTask.new(:rcov) do |spec|
29
- spec.libs << 'lib' << 'spec'
30
- spec.pattern = 'spec/**/*_spec.rb'
31
- spec.rcov = true
32
- end
33
-
34
- task :spec => :check_dependencies
35
-
36
- task :default => :spec
37
-
38
- require 'rake/rdoctask'
39
- Rake::RDocTask.new do |rdoc|
40
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
41
-
42
- rdoc.rdoc_dir = 'rdoc'
43
- rdoc.title = "suhyo #{version}"
44
- rdoc.rdoc_files.include('README*')
45
- rdoc.rdoc_files.include('lib/**/*.rb')
46
- end
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "suhyo"
8
+ gem.summary = 'Matchers for web app specs'
9
+ gem.description = 'Matchers built on Webrat to address some common needs in web app testing'
10
+ gem.email = 'jarrett@uchicago.edu'
11
+ gem.homepage = 'http://github.com/jarrett/suhyo'
12
+ gem.authors = ['jarrett']
13
+ gem.add_dependency 'rspec', '>= 1.2.9'
14
+ gem.add_dependency 'webrat', '>= 0.7.0'
15
+ gem.add_development_dependency 'cuke-test'
16
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
17
+ end
18
+ Jeweler::GemcutterTasks.new
19
+ rescue LoadError
20
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
21
+ end
22
+
23
+ require 'spec/rake/spectask'
24
+ Spec::Rake::SpecTask.new(:spec) do |spec|
25
+ spec.libs << 'lib' << 'spec'
26
+ spec.spec_files = FileList['spec/**/*_spec.rb']
27
+ end
28
+
29
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
30
+ spec.libs << 'lib' << 'spec'
31
+ spec.pattern = 'spec/**/*_spec.rb'
32
+ spec.rcov = true
33
+ end
34
+
35
+ task :spec => :check_dependencies
36
+
37
+ task :default => :spec
38
+
39
+ require 'rake/rdoctask'
40
+ Rake::RDocTask.new do |rdoc|
41
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
42
+
43
+ rdoc.rdoc_dir = 'rdoc'
44
+ rdoc.title = "suhyo #{version}"
45
+ rdoc.rdoc_files.include('README*')
46
+ rdoc.rdoc_files.include('lib/**/*.rb')
47
+ end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.5
@@ -1,38 +1,38 @@
1
- module Suhyo
2
- module ControllerMatchers
3
- class DenyAccess
4
- def matches?(response)
5
- @response = response
6
- @response.status.split(' ').first == '403' or (@response.redirect? and response.redirect_url == Suhyo.config.access_denied_url)
7
- end
8
-
9
- def failure_message
10
- if @response.redirect?
11
- "expected response to deny access (403 or 302 to #{Suhyo.config.access_denied_url}). Status was #{@response.status} with redirect to #{@response.redirect_url}."
12
- else
13
- "expected response to deny access (403 or 302 to #{Suhyo.config.access_denied_url}). Status was #{@response.status}."
14
- end
15
- end
16
-
17
- def negative_failure_message
18
- 'expected response not to deny access'
19
- end
20
- end
21
-
22
- # Looks for either of two things:
23
- #
24
- # 1. HTTP status code 403 Forbidden
25
- # 2. Redirect to a certain access denied URL.
26
- #
27
- # The access denied URL is determined by +Suhyo.config.access_denied_url+,
28
- # which defaults to +http://test.host/login+.
29
- #
30
- # Usage:
31
- #
32
- # get :some_restricted_action
33
- # response.should deny_access
34
- def deny_access
35
- DenyAccess.new
36
- end
37
- end
1
+ module Suhyo
2
+ module ControllerMatchers
3
+ class DenyAccess
4
+ def matches?(response)
5
+ @response = response
6
+ @response.status.split(' ').first == '403' or (@response.redirect? and response.redirect_url == Suhyo.config.access_denied_url)
7
+ end
8
+
9
+ def failure_message
10
+ if @response.redirect?
11
+ "expected response to deny access (403 or 302 to #{Suhyo.config.access_denied_url}). Status was #{@response.status} with redirect to #{@response.redirect_url}."
12
+ else
13
+ "expected response to deny access (403 or 302 to #{Suhyo.config.access_denied_url}). Status was #{@response.status}."
14
+ end
15
+ end
16
+
17
+ def negative_failure_message
18
+ 'expected response not to deny access'
19
+ end
20
+ end
21
+
22
+ # Looks for either of two things:
23
+ #
24
+ # 1. HTTP status code 403 Forbidden
25
+ # 2. Redirect to a certain access denied URL.
26
+ #
27
+ # The access denied URL is determined by +Suhyo.config.access_denied_url+,
28
+ # which defaults to +http://test.host/login+.
29
+ #
30
+ # Usage:
31
+ #
32
+ # get :some_restricted_action
33
+ # response.should deny_access
34
+ def deny_access
35
+ DenyAccess.new
36
+ end
37
+ end
38
38
  end
@@ -0,0 +1,27 @@
1
+ module Suhyo::HashMatchers
2
+ class IncludeHash
3
+ def initialize(hash)
4
+ @hash = hash
5
+ end
6
+
7
+ def matches?(target)
8
+ @target = target
9
+ @hash.each do |key, value|
10
+ return false unless target[key] == value
11
+ end
12
+ true
13
+ end
14
+
15
+ def failure_message
16
+ "Expected hash to include #{@hash.inspect} but got #{@target.inspect}"
17
+ end
18
+
19
+ def negative_failure_message
20
+ "Expected hash not to include #{@hash.inspect} but got #{@target.inspect}"
21
+ end
22
+ end
23
+
24
+ def include_hash(hash)
25
+ IncludeHash.new(hash)
26
+ end
27
+ end
@@ -2,6 +2,15 @@ module Suhyo
2
2
  module ViewMatchers
3
3
  include Webrat::Matchers
4
4
 
5
+ # A simple wrapper around +have_selector+. Usage:
6
+ #
7
+ # response.should have_button(:text => 'Submit')
8
+ def have_button(options = {})
9
+ options[:type] = 'button'
10
+ options[:value] = options.delete(:text) if options.has_key?(:text)
11
+ have_selector('input', options)
12
+ end
13
+
5
14
  class HaveOrderedContent < ::Webrat::Matchers::HasContent
6
15
  def initialize(content, options = {})
7
16
  @content = content
@@ -36,26 +45,28 @@ module Suhyo
36
45
  end
37
46
 
38
47
  def failure_message
39
- "expected the following element's content to #{content_message}:\n#{squeeze_space(@element)} #{order_message}"
48
+ "expected the following element's content to #{content_message}#{order_message}:\n\n#{squeeze_space(@element)}"
40
49
  end
41
50
 
42
51
  def negative_failure_message
43
- "expected the following element's content to not #{content_message}:\n#{squeeze_space(@element)} #{order_message}"
52
+ "expected the following element's content to not #{content_message}#{order_message}:\n\n#{squeeze_space(@element)}"
44
53
  end
45
54
 
46
55
  def order_message
47
56
  if @options.has_key?(:before)
48
- str = "before #{@options[:before]}"
57
+ str = %Q{ before "#{@options[:before]}"}
49
58
  if @other_content_index.nil?
50
- str << " but #{@options[:before]} was not foudn"
59
+ str << %Q{ but "#{@options[:before]}" was not found}
51
60
  end
61
+ return str
52
62
  elsif @options.has_key?(:after)
53
- str = "after #{@options[:after]}"
63
+ str = %Q{ after "#{@options[:after]}"}
54
64
  if @other_content_index.nil?
55
- str << " but #{@options[:after]} was not foudn"
65
+ str << %Q{ but "#{@options[:after]}" was not found}
56
66
  end
67
+ return str
57
68
  else
58
- nil
69
+ return nil
59
70
  end
60
71
  end
61
72
  end
@@ -0,0 +1,85 @@
1
+ require 'webrat'
2
+ require 'suhyo'
3
+
4
+ World(Webrat::Matchers)
5
+
6
+ include Suhyo::ViewMatchers
7
+ include Suhyo::HashMatchers
8
+
9
+ # The form class can be something like "user search," which will find form.user_search
10
+ When /^I press "([^\"]*)" in the "([^\"]*)" form$/ do |button, form_class|
11
+ within '.' + form_class.downcase.gsub(' ', '_') do |scope|
12
+ scope.click_button(button)
13
+ end
14
+ end
15
+
16
+ Then /^I should see a link that says "([^\"]*)"$/ do |text|
17
+ response.should have_link(:text => text)
18
+ end
19
+
20
+ Then /^I should not see a link that says "([^\"]*)"$/ do |text|
21
+ response.should_not have_link(:text => text)
22
+ end
23
+
24
+ Then /^I should see a link to "([^\"]*)"$/ do |url|
25
+ response.should have_link(:url => url)
26
+ end
27
+
28
+ Then /^I should not see a link to "([^\"]*)"$/ do |url|
29
+ response.should_not have_link(:url => url)
30
+ end
31
+
32
+ Then /^I should see a button that says "([^\"]*)"$/ do |text|
33
+ response.should have_button(:text => text)
34
+ end
35
+
36
+ Then /^I should not see a button that says "([^\"]*)"$/ do |text|
37
+ response.should_not have_button(:text => text)
38
+ end
39
+
40
+ Then /^the page title should be "([^\"]*)"$/ do |title|
41
+ if Suhyo.config.site_title_ends_in
42
+ title = title + Suhyo.config.site_title_ends_in
43
+ end
44
+ response.should have_selector('title', :content => title)
45
+ end
46
+
47
+ Then /^I should see "([^\"]*)" before "([^\"]*)"$/ do |first, second|
48
+ response.should contain_in_order(first, :before => second)
49
+ end
50
+
51
+ Then /^I should see "([^\"]*)" after "([^\"]*)"$/ do |second, first|
52
+ response.should contain_in_order(second, :after => first)
53
+ end
54
+
55
+ module Suhyo
56
+ module ParseQueryHelper
57
+ def parse_query_string(str)
58
+ str.split('&').inject({}) do |hash, pair|
59
+ key, value = pair.split('=')
60
+ hash[key] = value
61
+ hash
62
+ end
63
+ end
64
+ end
65
+ end
66
+
67
+ World(::Suhyo::ParseQueryHelper)
68
+
69
+ # "At" instead of "on" because "on" would create an ambiguous match
70
+
71
+ Then /^I should be at (.+) with the query string "([^\"]*)"$/ do |page_name, query_string|
72
+ uri = URI.parse(current_url)
73
+ uri.path.should == path_to(page_name)
74
+ expected_query_hash = parse_query_string(query_string)
75
+ actual_query_hash = parse_query_string(uri.query)
76
+ actual_query_hash.should == expected_query_hash
77
+ end
78
+
79
+ Then /^I should be at (.+) with the query string including "([^\"]*)"$/ do |page_name, query_string|
80
+ uri = URI.parse(current_url)
81
+ uri.path.should == path_to(page_name)
82
+ expected_query_hash = parse_query_string(query_string)
83
+ actual_query_hash = parse_query_string(uri.query)
84
+ actual_query_hash.should include_hash(expected_query_hash)
85
+ end
data/lib/suhyo.rb CHANGED
@@ -5,4 +5,5 @@ $: << File.expand_path(File.dirname(__FILE__))
5
5
 
6
6
  require 'suhyo/view_matchers'
7
7
  require 'suhyo/controller_matchers'
8
+ require 'suhyo/hash_matchers'
8
9
  require 'suhyo/config'
@@ -0,0 +1 @@
1
+ The feature files in this directory are invoked from RSpec examples that hook into the Cucumber library. They are not meant to be run from the Cucumber executable.
@@ -0,0 +1,32 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', '..', 'lib'))
2
+ require File.expand_path(File.dirname(__FILE__) + '../../../lib/suhyo/webrat_steps.rb')
3
+
4
+ module Suhyo
5
+ module WebratMocks
6
+ # Mock out some of the methods from Webrat
7
+
8
+ def response
9
+ @mock_response
10
+ end
11
+
12
+ def path_to(page_name)
13
+ '/path'
14
+ end
15
+
16
+ def current_url
17
+ @mock_current_url
18
+ end
19
+ end
20
+ end
21
+
22
+
23
+
24
+ World(Suhyo::WebratMocks)
25
+
26
+ Given /^the response is (.+)$/ do |str|
27
+ @mock_response = str
28
+ end
29
+
30
+ Given /^the current path is (.+)$/ do |str|
31
+ @mock_current_url = 'http://test.host/' + str
32
+ end
@@ -0,0 +1,98 @@
1
+ Feature: webrat
2
+ This feature file is used by RSpec to test Suhyo's library of step definitions.
3
+
4
+ Scenario: link text expected, found
5
+ Given the response is <a href="http://example.com">Correct Text</a>
6
+ Then I should see a link that says "Correct Text"
7
+
8
+ Scenario: link text expected, not found
9
+ Given the response is <a href="http://example.com">Wrong Text</a>
10
+ Then I should see a link that says "Correct Text"
11
+
12
+ Scenario: link text not expected, not found
13
+ Given the response is <a href="http://example.com">Wrong Text</a>
14
+ Then I should not see a link that says "Correct Text"
15
+
16
+ Scenario: link text not expected, found
17
+ Given the response is <a href="http://example.com">Correct Text</a>
18
+ Then I should not see a link that says "Correct Text"
19
+
20
+ Scenario: link URL expected, found
21
+ Given the response is <a href="http://correct.com">Text</a>
22
+ Then I should see a link to "http://correct.com"
23
+
24
+ Scenario: link URL expected, not found
25
+ Given the response is <a href="http://wrong.com">Text</a>
26
+ Then I should see a link to "http://correct.com"
27
+
28
+ Scenario: link URL not expected, not found
29
+ Given the response is <a href="http://wrong.com">Text</a>
30
+ Then I should not see a link to "http://correct.com"
31
+
32
+ Scenario: link URL not expected, found
33
+ Given the response is <a href="http://correct.com">Text</a>
34
+ Then I should not see a link to "http://correct.com"
35
+
36
+ Scenario: button text expected, found
37
+ Given the response is <input type="button" value="Correct Text"/>
38
+ Then I should see a button that says "Correct Text"
39
+
40
+ Scenario: button text expected, not found
41
+ Given the response is <input type="button" value="Wrong Text"/>
42
+ Then I should see a button that says "Correct Text"
43
+
44
+ Scenario: button text not expected, not found
45
+ Given the response is <input type="button" value="Wrong Text"/>
46
+ Then I should not see a button that says "Correct Text"
47
+
48
+ Scenario: button text not expected, found
49
+ Given the response is <input type="button" value="Correct Text"/>
50
+ Then I should not see a button that says "Correct Text"
51
+
52
+ Scenario: page title correct
53
+ Given the response is <head><title>Correct Title</title></head>
54
+ Then the page title should be "Correct Title"
55
+
56
+ Scenario: page title wrong
57
+ Given the response is <head><title>Wrong Title</title></head>
58
+ Then the page title should be "Correct Title"
59
+
60
+ Scenario: content expected before, found before
61
+ Given the response is <p>First</p><p>Second</p>
62
+ Then I should see "First" before "Second"
63
+
64
+ Scenario: content expected before, found after
65
+ Given the response is <p>Second</p><p>First</p>
66
+ Then I should see "First" before "Second"
67
+
68
+ Scenario: content expected after, found after
69
+ Given the response is <p>First</p><p>Second</p>
70
+ Then I should see "Second" after "First"
71
+
72
+ Scenario: content expected after, found before
73
+ Given the response is <p>Second</p><p>First</p>
74
+ Then I should see "Second" after "First"
75
+
76
+ Scenario: query string expected, found
77
+ Given the current path is path?a=alpha&b=beta
78
+ Then I should be at a page with the query string "a=alpha&b=beta"
79
+
80
+ Scenario: query string expected, not found
81
+ Given the current path is path?a=alpha
82
+ Then I should be at a page with the query string "a=alpha&b=beta"
83
+
84
+ Scenario: query string expected, path wrong
85
+ Given the current path is wrong_path?a=alpha&b=beta
86
+ Then I should be at a page with the query string "a=alpha&b=beta"
87
+
88
+ Scenario: partial query string expected, found
89
+ Given the current path is path?a=alpha&b=beta&z=omega
90
+ Then I should be at a page with the query string including "a=alpha&b=beta"
91
+
92
+ Scenario: partial query string expected, not found
93
+ Given the current path is path?a=alpha&z=omega
94
+ Then I should be at a page with the query string including "a=alpha&b=beta"
95
+
96
+ Scenario: partial query string expected, path wrong
97
+ Given the current path is wrong_path?a=alpha&b=beta&z=omega
98
+ Then I should be at a page with the query string including "a=alpha&b=beta"
@@ -0,0 +1,15 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe Suhyo::HashMatchers do
4
+ include Suhyo::HashMatchers
5
+
6
+ describe '#include_hash' do
7
+ it 'matches if the target hash includes each pair in the expected hash' do
8
+ {:a => 1, :b => 2, :c => 3, :d => 4}.should include_hash(:a => 1, :c => 3)
9
+ end
10
+
11
+ it 'does not match if the target hash is missing one of the pairs in the expected hash' do
12
+ {:a => 1, :b => 2, :c => 3, :d => 4}.should_not include_hash(:a => 2, :c => 3)
13
+ end
14
+ end
15
+ end
data/spec/spec.opts CHANGED
@@ -1 +1 @@
1
- --color
1
+ --color
data/spec/spec_helper.rb CHANGED
@@ -1,9 +1,12 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__))
2
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
- require 'suhyo'
4
- require 'spec'
5
- require 'spec/autorun'
6
-
7
- Spec::Runner.configure do |config|
8
-
9
- end
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'suhyo'
4
+ require 'spec'
5
+ require 'spec/autorun'
6
+ require 'cuke-test'
7
+ # Require the matchers
8
+ Dir[File.expand_path(File.join(File.dirname(__FILE__), 'matchers', '**', '*.rb'))].each { |f| require f }
9
+
10
+ Spec::Runner.configure do |config|
11
+
12
+ end