given_core 3.0.0.beta.1 → 3.0.0.beta.2

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -80,7 +80,6 @@ end
80
80
  desc "Run the examples in Minitest"
81
81
  task :mt_examples do
82
82
  puts "Running examples (with Minitest)"
83
- ENV['FRAMEWORK'] = 'Minitest'
84
83
  sh "ruby -Ilib:examples examples/loader.rb #{EXAMPLES}"
85
84
  end
86
85
 
@@ -0,0 +1,11 @@
1
+ require 'minitest/spec'
2
+ require 'given'
3
+
4
+ require 'given/minispec/before_extension'
5
+ require 'given/minispec/context_extension'
6
+ require 'given/minispec/framework'
7
+ require 'given/minispec/configure'
8
+
9
+ unless Minitest::Spec.instance_methods.include?(:assertions)
10
+ require 'given/minispec/new_assertions'
11
+ end
@@ -0,0 +1,36 @@
1
+
2
+ # The before blocks defined in Minitest are inadequate for our use.
3
+ # This before_extension file allows us to use real before blocks.
4
+
5
+ module Minitest
6
+ class Spec
7
+
8
+ # Redefine setup to trigger before chains
9
+ alias original_setup_without_given setup
10
+ def setup
11
+ original_setup_without_given
12
+ _gvn_establish_befores
13
+ end
14
+
15
+ # Establish the before blocks
16
+ def _gvn_establish_befores
17
+ return if defined?(@_gvn_ran_befores) && @_gvn_ran_befores
18
+ @_gvn_ran_befores = true
19
+ _gvn_contexts.each do |context|
20
+ context._Gvn_before_blocks.each do |before_block|
21
+ instance_eval(&before_block)
22
+ end
23
+ end
24
+ end
25
+
26
+ # Lazy accessor for Given's before blocks
27
+ def self._Gvn_before_blocks
28
+ @_Gvn_before_blocks ||= []
29
+ end
30
+
31
+ # Define a Given style before block
32
+ def self._Gvn_before(&block)
33
+ _Gvn_before_blocks << block
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,6 @@
1
+
2
+ # Configure Minitest to use the Given extensions.
3
+
4
+ Minitest::Spec.send(:extend, Given::ClassExtensions)
5
+ Minitest::Spec.send(:include, Given::FailureMethod)
6
+ Minitest::Spec.send(:include, Given::InstanceExtensions)
@@ -0,0 +1,3 @@
1
+
2
+ # Minitest Specs don't provide a context.
3
+ alias :context :describe
@@ -0,0 +1,37 @@
1
+
2
+ module Minitest
3
+ module Given
4
+
5
+ # Framework adapter for Minitest/Given
6
+ #
7
+ class Framework
8
+ def start_evaluation
9
+ @starting_assertion_count = example.assertions
10
+ end
11
+
12
+ def explicit_assertions?
13
+ example.assertions > @starting_assertion_count
14
+ end
15
+
16
+ def count_assertion
17
+ example.assertions += 1
18
+ end
19
+
20
+ def fail_with(*args)
21
+ raise Minitest::Assertion, args.join(" ")
22
+ end
23
+
24
+ def pending_error
25
+ Minitest::Skip
26
+ end
27
+
28
+ private
29
+
30
+ def example
31
+ Minitest::Spec.current
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ Given.framework = Minitest::Given::Framework.new
@@ -0,0 +1,22 @@
1
+
2
+ module Minitest
3
+ module Given
4
+
5
+ # If this version of Minitest does not support the #assertions and
6
+ # #assertions= methods, define a working version of them.
7
+ #
8
+ # This allows Minitest/Given to work with Minitest 4.x.
9
+ #
10
+ module NewAssertions
11
+ def assertions
12
+ _assertions
13
+ end
14
+
15
+ def assertions=(new_value)
16
+ self._assertions = new_value
17
+ end
18
+ end
19
+ end
20
+ end
21
+
22
+ Minitest::Spec.__send__(:include, Minitest::Given::NewAssertions)
@@ -0,0 +1,29 @@
1
+ require 'rspec'
2
+ require 'given'
3
+
4
+ module RSpec
5
+ module Given
6
+ end
7
+ end
8
+
9
+ if Given::NATURAL_ASSERTIONS_SUPPORTED
10
+ require 'given/rspec/monkey'
11
+ raise "Unsupported version of RSpec (unable to detect assertions)" unless RSpec::Given::MONKEY
12
+ end
13
+
14
+ require 'given/rspec/have_failed'
15
+ require 'given/rspec/before_extensions'
16
+ require 'given/rspec/framework'
17
+ require 'given/rspec/use_natural_assertions'
18
+ require 'given/rspec/configure'
19
+
20
+ module Given
21
+ def self.using_old_rspec?
22
+ defined?(Spec) &&
23
+ defined?(Spec::VERSION) &&
24
+ defined?(Spec::VERSION::SUMMARY) &&
25
+ Spec::VERSION::SUMMARY =~ /^rspec +1\./
26
+ end
27
+ end
28
+
29
+ raise "Unsupported version of RSpec" if Given.using_old_rspec?
@@ -0,0 +1,15 @@
1
+
2
+ module RSpec
3
+ module Given
4
+ module BeforeHack
5
+
6
+ # Some frameworks don't support a robust before block, so we
7
+ # always use this one. In RSpec, we just delegate to the real
8
+ # before block handler.
9
+ def _Gvn_before(*args, &block)
10
+ before(*args, &block)
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,19 @@
1
+ require 'rspec'
2
+ require 'rspec/given'
3
+
4
+ RSpec.configure do |c|
5
+ c.extend(Given::ClassExtensions)
6
+ c.include(Given::InstanceExtensions)
7
+ c.include(Given::Fuzzy)
8
+ c.include(Given::FailureMethod)
9
+ c.extend(RSpec::Given::BeforeHack)
10
+ c.include(RSpec::Given::HaveFailed)
11
+
12
+ if c.respond_to?(:backtrace_exclusion_patterns)
13
+ c.backtrace_exclusion_patterns << /lib\/rspec\/given/
14
+ else
15
+ c.backtrace_clean_patterns << /lib\/rspec\/given/
16
+ end
17
+
18
+ Given.detect_formatters(c)
19
+ end
@@ -0,0 +1,34 @@
1
+
2
+ module RSpec
3
+ module Given
4
+
5
+ # Framework interface for RSpec/Given.
6
+ #
7
+ class Framework
8
+ def start_evaluation
9
+ @matcher_called = false
10
+ end
11
+
12
+ def explicit_assertions?
13
+ @matcher_called
14
+ end
15
+
16
+ def count_assertion
17
+ end
18
+
19
+ def explicitly_asserted
20
+ @matcher_called = true
21
+ end
22
+
23
+ def fail_with(*args)
24
+ ::RSpec::Expectations.fail_with(*args)
25
+ end
26
+
27
+ def pending_error
28
+ RSpec::Core::Pending::PendingDeclaredInExample
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ Given.framework = RSpec::Given::Framework.new
@@ -0,0 +1,37 @@
1
+
2
+ # The implementation of RaiseError changed between RSpec 2.11 and 2.12.
3
+ if RSpec::Matchers::BuiltIn::RaiseError.instance_methods.include?(:does_not_match?)
4
+ require 'given/rspec/have_failed_212.rb'
5
+ else
6
+ require 'given/rspec/have_failed_pre212.rb'
7
+ end
8
+
9
+ module RSpec
10
+ module Given
11
+ module HaveFailed
12
+
13
+ # Specializes the RaiseError matcher to handle
14
+ # Failure/non-failure objects.
15
+
16
+ # Simular to raise_error(...), but reads a bit better when using
17
+ # a failure result from a when clause.
18
+ #
19
+ # Typical Usage:
20
+ #
21
+ # When(:result) { fail "OUCH" }
22
+ # Then { result.should have_failed(StandardError, /OUCH/) }
23
+ #
24
+ # When(:result) { good_code }
25
+ # Then { result.should_not have_failed }
26
+ #
27
+ # :call-seq:
28
+ # have_failed([exception_class [, message_pattern]])
29
+ # have_failed([exception_class [, message_pattern]]) { |ex| ... }
30
+ #
31
+ def have_failed(error=Exception, message=nil, &block)
32
+ HaveFailedMatcher.new(error, message, &block)
33
+ end
34
+ alias have_raised have_failed
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,30 @@
1
+ module RSpec
2
+ module Given
3
+ module HaveFailed
4
+
5
+ # The RSpec-2.12 and later version of the have_failed matcher
6
+
7
+ class HaveFailedMatcher < RSpec::Matchers::BuiltIn::RaiseError
8
+ def matches?(given_proc, negative_expectation = false)
9
+ if given_proc.is_a?(::Given::Failure)
10
+ super
11
+ else
12
+ super(lambda { }, negative_expectation)
13
+ end
14
+ end
15
+
16
+ def does_not_match?(given_proc)
17
+ if given_proc.is_a?(::Given::Failure)
18
+ super(given_proc)
19
+ else
20
+ super(lambda { })
21
+ end
22
+ end
23
+
24
+ def to_s
25
+ "<Failure matching #{@expected_error}: #{@expected_message.inspect}>"
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,22 @@
1
+ module RSpec
2
+ module Given
3
+ module HaveFailed
4
+
5
+ # The Pre-Rspec 2.12 version of the matcher
6
+
7
+ class HaveFailedMatcher < RSpec::Matchers::BuiltIn::RaiseError
8
+ def matches?(given_proc)
9
+ if given_proc.is_a?(::Given::Failure)
10
+ super
11
+ else
12
+ super(lambda { })
13
+ end
14
+ end
15
+
16
+ def to_s
17
+ "<FailureMatcher on #{@expected_error}: #{@expected_message.inspect}>"
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,41 @@
1
+ require 'rspec'
2
+ require 'given/module_methods'
3
+
4
+ # Monkey patch RSpec to detect matchers used in expectations.
5
+
6
+ unless defined?(RSpec::Given::MONKEY)
7
+
8
+ if defined?(RSpec::Expectations::PositiveExpectationHandler) &&
9
+ defined?(RSpec::Expectations::NegativeExpectationHandler)
10
+
11
+ RSpec::Given::MONKEY = true
12
+
13
+ module RSpec
14
+ module Expectations
15
+ class PositiveExpectationHandler
16
+ class << self
17
+ alias _gvn_rspec_original_handle_matcher handle_matcher
18
+ def handle_matcher(actual, matcher, message=nil, &block)
19
+ ::Given.framework.explicitly_asserted
20
+ _gvn_rspec_original_handle_matcher(actual, matcher, message, &block)
21
+ end
22
+ end
23
+ end
24
+
25
+ class NegativeExpectationHandler
26
+ class << self
27
+ alias _gvn_rspec_original_handle_matcher handle_matcher
28
+ def handle_matcher(actual, matcher, message=nil, &block)
29
+ ::Given.framework.explicitly_asserted
30
+ _gvn_rspec_original_handle_matcher(actual, matcher, message, &block)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ else
38
+ RSpec::Given::MONKEY = false
39
+ end
40
+
41
+ end
@@ -0,0 +1,10 @@
1
+
2
+ module RSpec
3
+ module Given
4
+
5
+ # Defined for backwards compatibility
6
+ def self.use_natural_assertions(*args)
7
+ ::Given.use_natural_assertions(*args)
8
+ end
9
+ end
10
+ end
data/lib/given/version.rb CHANGED
@@ -5,7 +5,7 @@ module Given
5
5
  VERSION_MINOR = 0,
6
6
  VERSION_BUILD = 0,
7
7
  BETA = 'beta',
8
- BETA_NUMBER = 1,
8
+ BETA_NUMBER = 2,
9
9
  ]
10
10
  VERSION = VERSION_NUMBERS.join(".")
11
11
  end
data/rakelib/gemspec.rake CHANGED
@@ -16,16 +16,19 @@ else
16
16
  ]
17
17
  PKG_FILES.exclude('TAGS')
18
18
  GIVEN_CORE_FILES = FileList[*PKG_FILES].
19
- exclude("lib/minitest/**/*").
19
+ exclude("lib/*-given.rb").
20
20
  exclude("lib/rspec/**/*").
21
+ exclude("lib/mini*/**/*").
21
22
  exclude("spec/**/*").
22
23
  exclude("examples/**/*")
23
24
  RSPEC_GIVEN_FILES = FileList[*PKG_FILES].
24
- exclude("lib/minitest/**/*").
25
+ exclude("lib/mini*/**/*").
26
+ exclude("lib/mini*-given.rb").
25
27
  exclude("lib/given/**/*")
26
- MINITEST_GIVEN_FILES = FileList[*PKG_FILES].
28
+ MINISPEC_GIVEN_FILES = FileList[*PKG_FILES].
27
29
  exclude("spec/**/*").
28
- exclude("lib/rspec/**/*").
30
+ exclude("lib/rspec-given.rb").
31
+ exclude("lib/rspec*/**/*").
29
32
  exclude("lib/given/**/*")
30
33
 
31
34
  RSPEC_GIVEN_SPEC = Gem::Specification.new do |s|
@@ -56,20 +59,20 @@ EOF
56
59
  s.rubyforge_project = "given"
57
60
  end
58
61
 
59
- MINITEST_GIVEN_SPEC = Gem::Specification.new do |s|
60
- s.name = 'minitest-given'
62
+ MINISPEC_GIVEN_SPEC = Gem::Specification.new do |s|
63
+ s.name = 'minispec-given'
61
64
  s.version = Given::VERSION
62
- s.summary = "Given/When/Then Specification Extensions for MiniTest::Spec."
65
+ s.summary = "Given/When/Then Specification Extensions for Minispec::Spec."
63
66
  s.description = <<EOF
64
67
  Given is a Minitest::Spec extension that allows the use of Given/When/Then
65
68
  terminology when defining specifications.
66
69
  EOF
67
- s.files = MINITEST_GIVEN_FILES.to_a
70
+ s.files = MINISPEC_GIVEN_FILES.to_a
68
71
  s.require_path = 'lib' # Use these for libraries.
69
72
  s.rdoc_options = [
70
73
  '--line-numbers', '--inline-source',
71
74
  '--main' , 'doc/main.rdoc',
72
- '--title', 'Minitest Given Extensions'
75
+ '--title', 'Minitest::Spec Given Extensions'
73
76
  ]
74
77
 
75
78
  s.add_dependency("given_core", "= #{Given::VERSION}")
@@ -89,8 +92,9 @@ EOF
89
92
  s.version = Given::VERSION
90
93
  s.summary = "Core engine for RSpec::Given and Minitest::Given."
91
94
  s.description = <<EOF
92
- Given is an RSpec/Minitest extension that allows the use of Given/When/Then
93
- terminology when defining specifications.
95
+ Given_core is the basic functionality behind rspec-given and minispec-given,
96
+ extensions that allow the use of Given/When/Then terminology when defining
97
+ specifications.
94
98
  EOF
95
99
  s.files = GIVEN_CORE_FILES.to_a
96
100
  s.require_path = 'lib' # Use these for libraries.
@@ -111,7 +115,7 @@ EOF
111
115
  s.rubyforge_project = "given"
112
116
  end
113
117
 
114
- Gem::PackageTask.new(MINITEST_GIVEN_SPEC) do |pkg|
118
+ Gem::PackageTask.new(MINISPEC_GIVEN_SPEC) do |pkg|
115
119
  pkg.need_zip = false
116
120
  pkg.need_tar = false
117
121
  end
@@ -131,9 +135,9 @@ EOF
131
135
  open(t.name, "w") { |f| f.puts RSPEC_GIVEN_SPEC.to_yaml }
132
136
  end
133
137
 
134
- file "minitest-given.gemspec" => ["rakelib/gemspec.rake"] do |t|
138
+ file "minispec-given.gemspec" => ["rakelib/gemspec.rake"] do |t|
135
139
  require 'yaml'
136
- open(t.name, "w") { |f| f.puts MINITEST_GIVEN_SPEC.to_yaml }
140
+ open(t.name, "w") { |f| f.puts MINISPEC_GIVEN_SPEC.to_yaml }
137
141
  end
138
142
 
139
143
  file "given_core.gemspec" => ["rakelib/gemspec.rake"] do |t|
@@ -142,7 +146,7 @@ EOF
142
146
  end
143
147
 
144
148
  desc "Create a stand-alone gemspec"
145
- task :gemspec => ["rspec-given.gemspec", "minitest-given.gemspec", "given_core.gemspec"]
149
+ task :gemspec => ["rspec-given.gemspec", "minispec-given.gemspec", "given_core.gemspec"]
146
150
 
147
151
  desc "Check Filelists"
148
152
  task :filelists do
@@ -151,7 +155,7 @@ EOF
151
155
  puts "==============="
152
156
  puts "RSPEC_GIVEN_FILES=#{RSPEC_GIVEN_FILES.inspect}"
153
157
  puts "==============="
154
- puts "MINITEST_GIVEN_FILES=#{MINITEST_GIVEN_FILES.inspect}"
158
+ puts "MINISPEC_GIVEN_FILES=#{MINISPEC_GIVEN_FILES.inspect}"
155
159
  puts "==============="
156
160
  end
157
161
  end