Exspec 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/bin/exspec CHANGED
@@ -1,14 +1,29 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "exspec"
3
+ ARG_PREFIX = "--"
4
+ DEBUG_ARG = "debug"
4
5
 
5
- if ARGV.empty?
6
+ spec_args = ARGV.take_while { |arg| !arg.start_with?(ARG_PREFIX) }
7
+ ARGV.shift spec_args.length
8
+ debug = ARGV.delete ARG_PREFIX + DEBUG_ARG
9
+
10
+ if debug
11
+ require_relative "../lib/exspec"
12
+ else
13
+ require "exspec"
14
+ end
15
+
16
+ if spec_args.empty?
17
+ Exspec::Extension.test_hook(:before_stack, nil)
18
+ Exspec::Extension.test_hook(:before, nil)
6
19
  started = Exspec::Extension.start_exspec
7
20
  Exspec::IrbExspec.start_irb unless started
21
+ Exspec::Extension.test_hook(:after, nil)
22
+ Exspec::Extension.test_hook(:after_stack, nil)
8
23
  else
9
24
  exspec = Exspec::Exspec.new
10
25
 
11
- spec_arg = ARGV.join " "
26
+ spec_arg = spec_args.join " "
12
27
  spec = exspec.spec spec_arg
13
28
 
14
29
  reporter = Exspec::REGRESSION_TEST_REPORTER.new
@@ -18,9 +33,7 @@ else
18
33
  specs = exspec.specs spec_arg, true
19
34
  specs.each do |spec|
20
35
  spec.stack.each do |parent|
21
- if parent != spec
22
- specs.delete(parent)
23
- end
36
+ specs.delete(parent) if parent != spec
24
37
  end
25
38
  end
26
39
  exspec.report_to(reporter) { exspec.run_specs specs }
data/lib/exspec.rb CHANGED
@@ -7,10 +7,11 @@ require_relative "exspec/logger"
7
7
  require_relative "exspec/spec_runner"
8
8
  require_relative "exspec/reporter"
9
9
  require_relative "exspec/regression_test_reporter"
10
- require_relative "exspec/helpers"
10
+ require_relative "exspec/helpers/helpers"
11
11
  require_relative "exspec/extensions/extension"
12
12
  require_relative "exspec/extensions/mocking"
13
13
  require_relative "exspec/extensions/rails"
14
+ require_relative "exspec/extensions/capybara"
14
15
  parent_dirs do |parent_dir|
15
16
  configured = false
16
17
  ["exspec.rb", "config/exspec.rb", "exspec/config.rb", "exspec/exspec.rb"].each do |file|
@@ -31,7 +32,7 @@ module Exspec
31
32
  :regression_test_reporter => RegressionTestReporter
32
33
  }
33
34
  Extension.config config
34
- config
35
+ @@config = config
35
36
  end
36
37
 
37
38
  TEST_DIR = File.expand_path(config[:test_dir])
@@ -52,6 +53,8 @@ module Exspec
52
53
  @logger = components[:logger] || Logger.new
53
54
  @runner = components[:runner] || SpecRunner.new(self)
54
55
  @reporter = components[:reporter] || Reporter.new
56
+ @execute_stack = []
57
+ Extension.initialized_exspec self
55
58
  end
56
59
 
57
60
  delegate :without_logging, :last_instruction, :erase_last_instruction, :log, :to => :@logger
@@ -68,17 +71,19 @@ module Exspec
68
71
  end
69
72
 
70
73
  def execute(instruction)
74
+ @execute_stack << false
71
75
  executor.eval instruction do |callbacks|
72
76
  callbacks.after do |command, params, value|
73
77
  context.last_exspec_value = value
74
78
  if command.nil?
75
79
  commit instruction, value
76
80
  end
77
- if last_exspec_value != last_value || command == "_" || command == ""
81
+ if @execute_stack.length == 1 && (last_exspec_value != last_value || command == "_" || command == "")
78
82
  puts "#{COMMAND_PREFIX}_: #{last_exspec_value.inspect}"
79
83
  end
80
84
  end
81
85
  end
86
+ @execute_stack.pop
82
87
  end
83
88
 
84
89
  def report_to(reporter=reporter)
@@ -96,15 +101,24 @@ module Exspec
96
101
 
97
102
  def save(description, comment=nil)
98
103
  comment(comment) unless comment.nil?
99
- spec_manager.save logger, description
104
+ spec = spec_manager.save logger, description
105
+ Extension.test_hook(:after, spec)
106
+ Extension.test_hook(:before, nil)
107
+ spec
100
108
  end
101
109
 
102
110
  def load(description)
111
+ Extension.test_hook(:after, nil)
112
+ Extension.test_hook(:after_stack, nil)
103
113
  reset
104
114
  spec = spec(description)
105
- return nil if spec.nil?
106
- without_logging { runner.run_stack spec }
107
- spec_manager.current_spec = spec
115
+ Extension.test_hook(:before_stack, nil)
116
+ unless spec.nil?
117
+ without_logging { runner.run_stack spec }
118
+ spec_manager.current_spec = spec
119
+ end
120
+ Extension.test_hook(:before, nil)
121
+ spec
108
122
  end
109
123
 
110
124
  def include(description)
@@ -118,6 +132,7 @@ module Exspec
118
132
  def retry
119
133
  instructions = logger.instructions
120
134
  load current_spec
135
+ Extension.test_hook(:before, nil)
121
136
  instructions.each do |instruction|
122
137
  execute instruction rescue nil
123
138
  end
@@ -143,11 +158,16 @@ module Exspec
143
158
  end
144
159
 
145
160
  def assert(statement=nil, comment=nil)
146
- val = without_logging { raw_eval statement }
147
- if val
148
- spec_succeeded "Successful: #{comment || statement}"
149
- else
150
- spec_failed "Failed: #{comment || statement}"
161
+ begin
162
+ val = without_logging { raw_eval statement }
163
+ if val
164
+ spec_succeeded "Successful: #{comment || statement}"
165
+ else
166
+ spec_failed "Failed: #{comment || statement}"
167
+ end
168
+ rescue Exception => e
169
+ val = e
170
+ spec_failed "Failed due to an exception: #{comment || statement} (#{e})"
151
171
  end
152
172
  commit "#{COMMAND_PREFIX}assert #{statement.strip}" + (comment ? " #{COMMENT_SIGN}#{comment}" : "")
153
173
  val
@@ -156,7 +176,7 @@ module Exspec
156
176
  def expect(statement=nil, comment=nil)
157
177
  return expect_inspect nil, comment if statement.nil?
158
178
  actual = last_value
159
- expect = without_logging { raw_eval statement }
179
+ expect = value_or_exception { without_logging { raw_eval statement } }
160
180
  if expect == actual
161
181
  spec_succeeded "Successful: #{comment || "value is #{prepare_output(expect)}"}"
162
182
  else
@@ -195,7 +215,12 @@ module Exspec
195
215
  last_value.is_a?(String) ? last_value : last_value.inspect
196
216
  end
197
217
 
218
+ def commited?
219
+ @execute_stack.last
220
+ end
221
+
198
222
  def commit(instruction, value=last_value)
223
+ @execute_stack[@execute_stack.length - 1] = true unless @execute_stack.empty?
199
224
  logger.log instruction, value
200
225
  return_spec value
201
226
  end
@@ -209,6 +234,15 @@ module Exspec
209
234
  return "\"#{value}\"" if value.is_a? String
210
235
  value
211
236
  end
237
+
238
+ def value_or_exception
239
+ begin
240
+ val = yield
241
+ rescue Exception => e
242
+ val = e
243
+ end
244
+ val
245
+ end
212
246
  end
213
247
  end
214
248
 
@@ -62,7 +62,11 @@ module Exspec
62
62
  def setup_global_context
63
63
  global_instance = global_eval "self"
64
64
  global_instance.instance_variable_set :@exspec, @exspec
65
- global_instance.class.send :attr_reader, :exspec
65
+ class << global_instance
66
+ def exspec
67
+ @exspec
68
+ end
69
+ end
66
70
  global_eval "_ = nil"
67
71
  Extension.setup_global_context self, global_instance
68
72
  end
@@ -6,7 +6,7 @@ module Exspec
6
6
  @exspec = exspec
7
7
  end
8
8
 
9
- delegate :puts, :print, :return_spec, :context, :commit, :to => :@exspec
9
+ delegate :puts, :print, :return_spec, :context, :commit, :commited?, :without_logging, :value_or_exception, :to => :@exspec
10
10
  attr_reader :exspec
11
11
 
12
12
  def eval(instruction, &callback_block)
@@ -22,7 +22,7 @@ module Exspec
22
22
  param_string = parts[1..-1].join " "
23
23
  eval = false
24
24
  val = Extension.execute_command self, command, param_string, callbacks
25
- if val.nil?
25
+ if val.nil? && !commited?
26
26
  val = case command
27
27
  when ""
28
28
  execute(command, parameters(param_string), callbacks) do
@@ -127,6 +127,10 @@ module Exspec
127
127
  when "reset", "clear"
128
128
  execute(command, callbacks) do
129
129
  exspec.reset
130
+ Extension.test_hook(:after, nil)
131
+ Extension.test_hook(:after_stack, nil)
132
+ Extension.test_hook(:before_stack, nil)
133
+ Extension.test_hook(:before, nil)
130
134
  end
131
135
  when "log", "instructions", "history"
132
136
  execute(command, callbacks) do
@@ -149,9 +153,11 @@ module Exspec
149
153
  end
150
154
  end
151
155
  when "no_log", "without_logging", "silent", "no_history"
152
- val = exspec.without_logging { exspec.execute param_string }
153
- return_spec exspec.logger.last_value
154
- val
156
+ execute(command, parameters(param_string), callbacks) do
157
+ val = without_logging { eval param_string }
158
+ return_spec exspec.logger.last_value
159
+ val
160
+ end
155
161
  when "log_off", "disable_log", "history_off", "disable_history"
156
162
  execute(command, callbacks) do
157
163
  exspec.logger.enabled = false
@@ -0,0 +1,76 @@
1
+ require 'capybara'
2
+ require 'capybara/dsl'
3
+
4
+ module Exspec::Capybara
5
+ extend Exspec::Extension
6
+
7
+ @@capybara = nil
8
+
9
+ class CapybaraDSL < ContextDelegator
10
+ include Capybara::DSL
11
+ end
12
+
13
+ def self.config
14
+ config = {
15
+ :driver => :selenium
16
+ }
17
+ Exspec::Extension.apply :capybara_config, nil, false, config
18
+ config
19
+ end
20
+
21
+ initialized_exspec do |exspec|
22
+ @@capybara = CapybaraDSL.new exspec.context
23
+ Exspec::Extension.apply :capybara_setup, Capybara, false, config
24
+ end
25
+
26
+ capybara_setup do |config|
27
+ self.current_driver = config[:driver]
28
+ end
29
+
30
+ setup_global_context do |global_instance|
31
+ class << global_instance
32
+ def capybara
33
+ @@capybara
34
+ end
35
+
36
+ def page
37
+ @@capybara.page
38
+ end
39
+ end
40
+ end
41
+
42
+ # for examples see the comments after the commands below
43
+ # returned values can be checked with Exspec's assertion commands
44
+ execute_command do |command, param_string, options|
45
+ case command
46
+ when "capybara", "!" # E.g. !! visit "http://www.github.com"
47
+ execute(command, parameters(param_string), options) do
48
+ val = value_or_exception do
49
+ @@capybara.instance_eval param_string
50
+ end
51
+ commit "!capybara #{param_string}", val
52
+ end
53
+ when "!$", "!find" # E.g. !!$ div.myCssClass
54
+ execute(command, parameters(param_string), options) do
55
+ val = value_or_exception do
56
+ @@capybara.instance_eval { page.find(param_string) }
57
+ end
58
+ commit "!capybara page.find(\"#{param_string.inspect[1..-2]}\")", val
59
+ end
60
+ when "!<", "!eval" # E.g. !!< $("input").text() (to read values from JavaScript)
61
+ execute(command, parameters(param_string), options) do
62
+ val = value_or_exception do
63
+ @@capybara.instance_eval { page.evaluate_script param_string }
64
+ end
65
+ commit "!capybara page.evaluate_script(\"#{param_string.inspect[1..-2]}\")", val
66
+ end
67
+ when "!>", "!exec" # E.g. !!> $(".button").click() (to execute JavaScript)
68
+ execute(command, parameters(param_string), options) do
69
+ val = value_or_exception do
70
+ @@capybara.instance_eval { page.execute_script param_string }
71
+ end
72
+ commit "!capybara page.execute_script(\"#{param_string.inspect[1..-2]}\")"
73
+ end
74
+ end
75
+ end
76
+ end
@@ -1,70 +1,82 @@
1
- module Exspec::Extension
2
- @@module = self
3
- @@extensions = {}
1
+ module Exspec
2
+ module Extension
3
+ @@module = self
4
+ @@extensions = {}
4
5
 
5
- def self.loaded
6
- apply :loaded
7
- end
6
+ def self.loaded
7
+ apply :loaded
8
+ end
8
9
 
9
- def self.config(config)
10
- apply :config, nil, false, config
11
- end
10
+ def self.config(config)
11
+ apply :config, nil, false, config
12
+ end
12
13
 
13
- def self.start_exspec
14
- apply :start_exspec, nil, true
15
- end
14
+ def self.start_exspec
15
+ apply :start_exspec, nil, true
16
+ end
16
17
 
17
- def self.set_execute_callbacks(options)
18
- apply :set_execute_callbacks, nil, false, options
19
- end
18
+ def self.set_execute_callbacks(options)
19
+ apply :set_execute_callbacks, nil, false, options
20
+ end
20
21
 
21
- def self.initialize_exspec(exspec, components)
22
- apply :initialize_exspec, exspec, false, components
23
- end
22
+ def self.initialize_exspec(exspec, components)
23
+ apply :initialize_exspec, exspec, false, components
24
+ end
24
25
 
25
- def self.execute_command(executor, command, param_string, options)
26
- apply :execute_command, executor, true, command, param_string, options
27
- end
26
+ def self.initialized_exspec(exspec)
27
+ apply :initialized_exspec, nil, false, exspec
28
+ end
28
29
 
29
- def self.setup_context(context_manager)
30
- apply :setup_context, context_manager
31
- end
30
+ def self.execute_command(executor, command, param_string, options)
31
+ apply :execute_command, executor, true, command, param_string, options
32
+ end
32
33
 
33
- def self.setup_global_context(context_manager, global_instance)
34
- apply :setup_global_context, context_manager, false, global_instance
35
- end
34
+ def self.setup_context(context_manager)
35
+ apply :setup_context, context_manager
36
+ end
36
37
 
37
- def self.setup_exspec_context(context_manager)
38
- apply :setup_exspec_context, context_manager
39
- end
38
+ def self.setup_global_context(context_manager, global_instance)
39
+ apply :setup_global_context, context_manager, false, global_instance
40
+ end
40
41
 
41
- def self.apply(extension_point, extended_instance=nil, return_first=false, *args)
42
- extensions(extension_point).each do |extension|
43
- val = if extended_instance
44
- extended_instance.instance_exec *args, &extension
45
- else
46
- extension.call *args
47
- end
48
- return val if return_first && !val.nil?
42
+ def self.setup_exspec_context(context_manager)
43
+ apply :setup_exspec_context, context_manager
49
44
  end
50
- return nil
51
- end
52
45
 
53
- def self.extensions(extension_point)
54
- extension_point = extension_point.to_sym
55
- extensions = (@@extensions[extension_point] = []) unless extensions = @@extensions[extension_point]
56
- extensions
57
- end
46
+ def self.test_hook(hook, spec)
47
+ apply extension_point(:test_hook, hook), nil, false, spec
48
+ end
58
49
 
59
- def method_missing(method, *args, &block)
60
- def_extension method, block
61
- end
50
+ def self.apply(extension_point, extended_instance=nil, return_first=false, *args)
51
+ extensions(extension_point).each do |extension|
52
+ val = if extended_instance
53
+ extended_instance.instance_exec *args, &extension
54
+ else
55
+ extension.call *args
56
+ end
57
+ return val if return_first && !val.nil?
58
+ end
59
+ return nil
60
+ end
62
61
 
63
- def extensions(extension_point)
64
- @@module.extensions extension_point
65
- end
62
+ def self.extension_point(name, *args)
63
+ args.unshift(name).map(&:to_s).join(":").to_sym
64
+ end
65
+
66
+ def self.extensions(extension_point)
67
+ @@extensions[extension_point.to_sym] ||= []
68
+ end
69
+
70
+ def method_missing(method, *args, &block)
71
+ def_extension @@module.extension_point(method, *args), block
72
+ end
73
+
74
+ def extensions(extension_point)
75
+ @@module.extensions extension_point
76
+ end
66
77
 
67
- def def_extension(extension_point, block)
68
- extensions(extension_point.to_sym) << block
78
+ def def_extension(extension_point, block)
79
+ extensions(extension_point.to_sym) << block
80
+ end
69
81
  end
70
82
  end
@@ -0,0 +1,38 @@
1
+ class ContextDelegator
2
+ def initialize(context_manager)
3
+ @_context = context_manager
4
+ @_args = []
5
+ @_blocks = []
6
+ end
7
+
8
+ def _args(index)
9
+ @_args[index].call
10
+ end
11
+
12
+ def _block(index)
13
+ @_blocks[index].call
14
+ end
15
+
16
+ def method_missing(method, *args, &block)
17
+ args_params = []
18
+ args.each do |argument|
19
+ args_index = @_args.length
20
+ @_args << argument
21
+ args_params << "capybara._args(#{args_index})"
22
+ end
23
+ block_param = ""
24
+ if block_given?
25
+ block_index = @_blocks.length
26
+ @_blocks << block
27
+ block_param = ", " unless args.empty?
28
+ block_param << "&capybara._block(#{block_index})"
29
+ end
30
+ params = "#{args_params.join ", "}#{block_param}"
31
+ call = method.to_s
32
+ call << "(#{params})" unless params.empty?
33
+ val = @_context.raw_eval call
34
+ @_args.pop args.length
35
+ @_blocks.pop if block_given?
36
+ val
37
+ end
38
+ end
@@ -0,0 +1,12 @@
1
+ require_relative "context_delegator"
2
+
3
+ def parent_dirs
4
+ root = File.expand_path "/"
5
+ level = 0
6
+ begin
7
+ relative = "../" * level
8
+ path = File.expand_path relative
9
+ yield path
10
+ level += 1
11
+ end until path == root
12
+ end
@@ -64,7 +64,7 @@ module Exspec
64
64
  print_indented "."
65
65
  end
66
66
 
67
- def skip_signal
67
+ def skip_signal(breaking)
68
68
  raise SkipSignal
69
69
  end
70
70
 
@@ -81,9 +81,7 @@ module Exspec
81
81
  end
82
82
 
83
83
  def exception(exception)
84
- if exception.is_a?(SpecFailedError)
85
- raise exception
86
- end
84
+ raise exception if exception.is_a? SpecFailedError
87
85
  end
88
86
 
89
87
  def show_comment(text)
@@ -8,7 +8,10 @@ module Exspec
8
8
  def executed_instruction(instruction, index, line); end
9
9
  def exception(exception); end
10
10
  def skip_signal(breaking); end
11
- def show_comment(text); end
11
+
12
+ def show_comment(text)
13
+ puts text
14
+ end
12
15
 
13
16
  def puts(text)
14
17
  Kernel.puts text
data/lib/exspec/spec.rb CHANGED
@@ -4,7 +4,7 @@ class Spec
4
4
  def self.name(description)
5
5
  name = File.basename(description, File.extname(description))
6
6
  name = name.split(".").last.strip
7
- name.gsub(/ +/, "_").underscore
7
+ name.underscore.gsub(/[\W_]+/, "_")
8
8
  end
9
9
 
10
10
  def initialize(spec_manager, name, file, parent=nil)
@@ -51,8 +51,8 @@ module Exspec
51
51
  def specs(parent=current_spec, recursive=false)
52
52
  parent = "" if parent.nil?
53
53
  if parent.is_a?(String)
54
- parent = parent.strip
55
- relative_directory = current_spec.nil? ? TEST_DIR : current_spec.directory
54
+ parent.strip!
55
+ relative_directory = parent.start_with?(SPEC_SEPARATOR) || current_spec.nil? ? TEST_DIR : current_spec.directory
56
56
  parent_directory = File.expand_path(parent, relative_directory)
57
57
  return find_specs(parent_directory, recursive) if File.directory?(parent_directory)
58
58
  end
@@ -84,7 +84,7 @@ module Exspec
84
84
  if File.directory? file
85
85
  specs.push(*find_specs(file, recursively)) if recursively
86
86
  elsif file.end_with? SPEC_EXTENSION
87
- specs << create_spec(file)
87
+ specs << create_spec(file, nil)
88
88
  end
89
89
  end
90
90
  specs
@@ -2,9 +2,10 @@ module Exspec
2
2
  class SpecRunner
3
3
  def initialize(exspec)
4
4
  @exspec = exspec
5
+ @break_on_skip_signal = false
5
6
  end
6
7
 
7
- delegate :reporter, :to => :@exspec
8
+ delegate :reporter, :commit, :without_logging, :to => :@exspec
8
9
 
9
10
  attr_accessor :break_on_skip_signal
10
11
 
@@ -16,12 +17,14 @@ module Exspec
16
17
  spec.for_instructions do |instruction, index, line|
17
18
  reporter.execute_instruction instruction, index, line
18
19
  begin
19
- val = @exspec.execute instruction
20
+ val = without_logging { @exspec.execute instruction }
21
+ commit instruction, val
20
22
  rescue SkipSignal
21
23
  reporter.skip_signal break_on_skip_signal
22
24
  break if break_on_skip_signal
23
25
  rescue Exception => e
24
26
  reporter.exception e
27
+ commit instruction, e
25
28
  ensure
26
29
  reporter.executed_instruction instruction, index, line
27
30
  end
@@ -36,9 +39,12 @@ module Exspec
36
39
  reporter.start_stack spec
37
40
  spec.stack.each do |spec|
38
41
  begin
42
+ Extension.test_hook(:before, spec)
39
43
  run spec
40
44
  rescue
41
45
  break
46
+ ensure
47
+ Extension.test_hook(:after, spec)
42
48
  end
43
49
  end
44
50
  ensure
@@ -48,7 +54,9 @@ module Exspec
48
54
  def run_specs(specs)
49
55
  specs.each do |spec|
50
56
  @exspec.reset
57
+ Extension.test_hook(:before_stack, spec)
51
58
  run_stack(spec)
59
+ Extension.test_hook(:after_stack, spec)
52
60
  end
53
61
  end
54
62
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Exspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-10 00:00:00.000000000 Z
12
+ date: 2013-03-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -27,6 +27,38 @@ dependencies:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: capybara
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: capybara-webkit
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
30
62
  description: Don't write specs anymore, just save 'em while testing your code interactively.
31
63
  Specs will become a byproduct.
32
64
  email: helgeho@invelop.de
@@ -38,9 +70,12 @@ files:
38
70
  - lib/exspec/context_manager.rb
39
71
  - lib/exspec/execute_callbacks.rb
40
72
  - lib/exspec/executor.rb
73
+ - lib/exspec/extensions/capybara.rb
41
74
  - lib/exspec/extensions/extension.rb
42
75
  - lib/exspec/extensions/mocking.rb
43
76
  - lib/exspec/extensions/rails.rb
77
+ - lib/exspec/helpers/context_delegator.rb
78
+ - lib/exspec/helpers/helpers.rb
44
79
  - lib/exspec/helpers.rb
45
80
  - lib/exspec/irb/irb_context_manager.rb
46
81
  - lib/exspec/irb/irb_exspec.rb