shoulda-context 1.1.6 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,19 +1,4 @@
1
- begin
2
- # if present, load and set base_test_case
3
- ActiveSupport::TestCase
4
- if defined?([ActiveSupport::TestCase, MiniTest::Unit::TestCase]) &&
5
- (ActiveSupport::TestCase.ancestors.include?(MiniTest::Unit::TestCase))
6
- base_test_case = MiniTest::Unit::TestCase
7
- end
8
- rescue
9
- end
10
-
11
- # no base_test_case set, using Test:Unit:TestCase
12
- unless base_test_case
13
- require 'test/unit/testcase' unless defined?(Test::Unit::TestCase)
14
- base_test_case = Test::Unit::TestCase
15
- end
16
-
1
+ require 'shoulda/context/test_framework_detection'
17
2
  require 'shoulda/context/version'
18
3
  require 'shoulda/context/proc_extensions'
19
4
  require 'shoulda/context/assertions'
@@ -30,4 +15,6 @@ module ShouldaContextLoadable
30
15
  end
31
16
  end
32
17
 
33
- base_test_case.class_eval { include ShouldaContextLoadable }
18
+ Shoulda::Context.test_framework_test_cases.each do |test_case|
19
+ test_case.class_eval { include ShouldaContextLoadable }
20
+ end
@@ -387,7 +387,7 @@ module Shoulda
387
387
  end
388
388
 
389
389
  def create_test_from_should_hash(should)
390
- test_name = ["test:", full_name, "should", "#{should[:name]}. "].flatten.join(' ').to_sym
390
+ test_name = [test_name_prefix, full_name, "should", "#{should[:name]}. "].flatten.join(' ').to_sym
391
391
 
392
392
  if test_methods[test_unit_class][test_name.to_s] then
393
393
  raise DuplicateTestError, "'#{test_name}' is defined more than once."
@@ -470,10 +470,17 @@ module Shoulda
470
470
  print_should_eventuallys
471
471
  end
472
472
 
473
+ def test_name_prefix
474
+ if defined?(Minitest) || defined?(MiniTest)
475
+ 'test_:'
476
+ else
477
+ 'test:'
478
+ end
479
+ end
480
+
473
481
  def method_missing(method, *args, &blk)
474
482
  test_unit_class.send(method, *args, &blk)
475
483
  end
476
-
477
484
  end
478
485
  end
479
486
  end
@@ -0,0 +1,34 @@
1
+ module Shoulda
2
+ module Context
3
+ module TestFrameworkDetection
4
+ def self.possible_test_frameworks
5
+ [
6
+ -> { ActiveSupport::TestCase },
7
+ -> { Minitest::Test },
8
+ -> { MiniTest::Unit::TestCase },
9
+ -> { Test::Unit::TestCase }
10
+ ]
11
+ end
12
+
13
+ def self.resolve_framework(future_framework)
14
+ future_framework.call
15
+ rescue NameError
16
+ nil
17
+ end
18
+
19
+ def self.detected_test_framework_test_cases
20
+ possible_test_frameworks.
21
+ map { |future_framework| resolve_framework(future_framework) }.
22
+ compact
23
+ end
24
+
25
+ def self.test_framework_test_cases
26
+ @_test_framework_test_case ||= detected_test_framework_test_cases
27
+ end
28
+ end
29
+
30
+ def self.test_framework_test_cases
31
+ TestFrameworkDetection.test_framework_test_cases
32
+ end
33
+ end
34
+ end
@@ -1,5 +1,5 @@
1
1
  module Shoulda
2
2
  module Context
3
- VERSION = '1.1.6'.freeze
3
+ VERSION = '1.2.0'.freeze
4
4
  end
5
5
  end
@@ -0,0 +1,154 @@
1
+ require 'test_helper'
2
+ require 'tempfile'
3
+
4
+ class TestFrameworkDetectionTest < Test::Unit::TestCase
5
+ if CURRENT_APPRAISAL_NAME == 'rails_4_1'
6
+ should 'detect Minitest 5.x w/ Rails 4.1' do
7
+ assert_integration_with_rails_and 'Minitest::Test', 'Minitest::Unit::TestCase'
8
+ end
9
+ end
10
+
11
+ if CURRENT_APPRAISAL_NAME == 'rails_4_0'
12
+ should 'detect ActiveSupport::TestCase and Minitest 4.x w/ Rails 4.0' do
13
+ assert_integration_with_rails_and 'MiniTest::Unit::TestCase'
14
+ end
15
+ end
16
+
17
+ if CURRENT_APPRAISAL_NAME == 'rails_3_2'
18
+ should 'detect ActiveSupport::TestCase and Test::Unit::TestCase w/ Rails 3.2' do
19
+ assert_integration_with_rails_and 'Test::Unit::TestCase'
20
+ end
21
+ end
22
+
23
+ if CURRENT_APPRAISAL_NAME == 'rails_3_1'
24
+ should 'detect ActiveSupport::TestCase and Test::Unit::TestCase w/ Rails 3.1' do
25
+ assert_integration_with_rails_and 'Test::Unit::TestCase'
26
+ end
27
+ end
28
+
29
+ if CURRENT_APPRAISAL_NAME == 'rails_3_0'
30
+ should 'detect ActiveSupport::TestCase and Test::Unit::TestCase w/ Rails 3.0' do
31
+ assert_integration_with_rails_and 'Test::Unit::TestCase'
32
+ end
33
+ end
34
+
35
+ if CURRENT_APPRAISAL_NAME == 'minitest_5_x'
36
+ should 'detect Minitest 5.x when it is loaded standalone' do
37
+ assert_integration_with 'Minitest::Test', 'Minitest::Unit::TestCase',
38
+ setup: <<-RUBY
39
+ require 'minitest/autorun'
40
+ RUBY
41
+ end
42
+ end
43
+
44
+ if CURRENT_APPRAISAL_NAME == 'minitest_4_x'
45
+ should 'detect Minitest 4.x when it is loaded standalone' do
46
+ assert_integration_with 'MiniTest::Unit::TestCase',
47
+ setup: <<-RUBY
48
+ require 'minitest/autorun'
49
+ RUBY
50
+ end
51
+ end
52
+
53
+ if CURRENT_APPRAISAL_NAME == 'test_unit'
54
+ should 'detect the test-unit gem when it is loaded standalone' do
55
+ assert_integration_with 'Test::Unit::TestCase',
56
+ setup: <<-RUBY
57
+ require 'test/unit'
58
+ RUBY
59
+ end
60
+ end
61
+
62
+ def assert_integration_with(*test_cases)
63
+ assert_test_cases_are_detected(*test_cases)
64
+ assert_our_api_is_available_in_test_cases(*test_cases)
65
+ end
66
+
67
+ def assert_integration_with_rails_and(*test_cases)
68
+ test_cases = ['ActiveSupport::TestCase'] | test_cases
69
+ options = test_cases.last.is_a?(Hash) ? test_cases.pop : {}
70
+ options[:setup] = <<-RUBY
71
+ require 'rails/all'
72
+ require 'rails/test_help'
73
+ ActiveRecord::Base.establish_connection(
74
+ adapter: 'sqlite3',
75
+ database: ':memory:'
76
+ )
77
+ RUBY
78
+ args = test_cases + [options]
79
+
80
+ assert_integration_with(*args)
81
+ end
82
+
83
+ def assert_test_cases_are_detected(*expected_test_cases)
84
+ options = expected_test_cases.last.is_a?(Hash) ? expected_test_cases.pop : {}
85
+ setup = options[:setup] || ''
86
+ output = execute(file_that_detects_test_framework_test_cases([setup]))
87
+ actual_test_cases = output.split("\n").first.split(', ')
88
+ assert_equal expected_test_cases, actual_test_cases
89
+ end
90
+
91
+ def file_that_detects_test_framework_test_cases(mixins)
92
+ <<-RUBY
93
+ #{require_gems(mixins)}
94
+ require 'yaml'
95
+ test_cases = Shoulda::Context.test_framework_test_cases.map { |test_case| test_case.to_s }
96
+ puts test_cases.join(', ')
97
+ RUBY
98
+ end
99
+
100
+ def require_gems(mixins)
101
+ <<-RUBY
102
+ ENV['BUNDLE_GEMFILE'] = "#{PROJECT_DIR}/gemfiles/#{CURRENT_APPRAISAL_NAME}.gemfile"
103
+ require 'bundler'
104
+ Bundler.setup
105
+ #{mixins.join("\n")}
106
+ require 'shoulda-context'
107
+ RUBY
108
+ end
109
+
110
+ def assert_our_api_is_available_in_test_cases(*test_cases)
111
+ options = test_cases.last.is_a?(Hash) ? test_cases.pop : {}
112
+ setup = options[:setup] || ''
113
+
114
+ test_cases.each do |test_case|
115
+ output = execute(file_that_runs_a_test_within_test_case(test_case, [setup]))
116
+ assert_match /1 (tests|runs)/, output
117
+ assert_match /1 assertions/, output
118
+ assert_match /0 failures/, output
119
+ assert_match /0 errors/, output
120
+ end
121
+ end
122
+
123
+ def file_that_runs_a_test_within_test_case(test_case, mixins)
124
+ <<-RUBY
125
+ #{require_gems(mixins)}
126
+
127
+ class FrameworkIntegrationTest < #{test_case}
128
+ context 'a context' do
129
+ should 'have a test' do
130
+ assert_equal true, true
131
+ end
132
+ end
133
+ end
134
+ RUBY
135
+ end
136
+
137
+ def execute(code)
138
+ tempfile = Tempfile.new('shoulda-context-test')
139
+ tempfile.write(code)
140
+ tempfile.close
141
+
142
+ if ENV['DEBUG']
143
+ puts 'Code:'
144
+ puts code
145
+ end
146
+
147
+ output = `RUBYOPT='' ruby #{tempfile.path} 2>&1`
148
+ if ENV['DEBUG']
149
+ puts 'Output:'
150
+ puts output
151
+ end
152
+ output
153
+ end
154
+ end
data/test/test_helper.rb CHANGED
@@ -2,10 +2,15 @@ require 'fileutils'
2
2
  require 'test/unit'
3
3
  require 'mocha'
4
4
 
5
- shoulda_path = File.join(File.dirname(__FILE__), '..', 'lib')
6
- $LOAD_PATH << shoulda_path
7
- require "shoulda/context"
5
+ if ENV['BUNDLE_GEMFILE'].to_s.empty?
6
+ raise "No Appraisal is specified. Please re-run your tests with BUNDLE_GEMFILE set."
7
+ end
8
+
9
+ PROJECT_DIR = File.expand_path('../..', __FILE__)
10
+ CURRENT_APPRAISAL_NAME = File.basename(ENV['BUNDLE_GEMFILE'], '.gemfile')
11
+
12
+ $LOAD_PATH << File.join(PROJECT_DIR, 'lib')
13
+ require 'shoulda/context'
8
14
 
9
15
  Shoulda.autoload_macros File.join(File.dirname(__FILE__), 'fake_rails_root'),
10
16
  File.join("vendor", "{plugins,gems}", "*")
11
-
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shoulda-context
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.6
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - thoughtbot, inc.
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2013-11-04 00:00:00.000000000 Z
16
+ date: 2014-03-31 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: appraisal
@@ -102,14 +102,22 @@ files:
102
102
  - README.md
103
103
  - Rakefile
104
104
  - bin/convert_to_should_syntax
105
- - gemfiles/3.0.gemfile
106
- - gemfiles/3.0.gemfile.lock
107
- - gemfiles/3.1.gemfile
108
- - gemfiles/3.1.gemfile.lock
109
- - gemfiles/3.2.gemfile
110
- - gemfiles/3.2.gemfile.lock
111
- - gemfiles/4.0.gemfile
112
- - gemfiles/4.0.gemfile.lock
105
+ - gemfiles/minitest_4_x.gemfile
106
+ - gemfiles/minitest_4_x.gemfile.lock
107
+ - gemfiles/minitest_5_x.gemfile
108
+ - gemfiles/minitest_5_x.gemfile.lock
109
+ - gemfiles/rails_3_0.gemfile
110
+ - gemfiles/rails_3_0.gemfile.lock
111
+ - gemfiles/rails_3_1.gemfile
112
+ - gemfiles/rails_3_1.gemfile.lock
113
+ - gemfiles/rails_3_2.gemfile
114
+ - gemfiles/rails_3_2.gemfile.lock
115
+ - gemfiles/rails_4_0.gemfile
116
+ - gemfiles/rails_4_0.gemfile.lock
117
+ - gemfiles/rails_4_1.gemfile
118
+ - gemfiles/rails_4_1.gemfile.lock
119
+ - gemfiles/test_unit.gemfile
120
+ - gemfiles/test_unit.gemfile.lock
113
121
  - init.rb
114
122
  - lib/shoulda-context.rb
115
123
  - lib/shoulda/context.rb
@@ -120,6 +128,7 @@ files:
120
128
  - lib/shoulda/context/tasks.rb
121
129
  - lib/shoulda/context/tasks/list_tests.rake
122
130
  - lib/shoulda/context/tasks/yaml_to_shoulda.rake
131
+ - lib/shoulda/context/test_framework_detection.rb
123
132
  - lib/shoulda/context/version.rb
124
133
  - rails/init.rb
125
134
  - shoulda-context.gemspec
@@ -133,6 +142,7 @@ files:
133
142
  - test/shoulda/convert_to_should_syntax_test.rb
134
143
  - test/shoulda/helpers_test.rb
135
144
  - test/shoulda/should_test.rb
145
+ - test/shoulda/test_framework_detection_test.rb
136
146
  - test/test_helper.rb
137
147
  homepage: http://thoughtbot.com/community/
138
148
  licenses:
@@ -168,4 +178,5 @@ test_files:
168
178
  - test/shoulda/convert_to_should_syntax_test.rb
169
179
  - test/shoulda/helpers_test.rb
170
180
  - test/shoulda/should_test.rb
181
+ - test/shoulda/test_framework_detection_test.rb
171
182
  - test/test_helper.rb
@@ -1,107 +0,0 @@
1
- PATH
2
- remote: /Users/rmcgeary/work/oss/shoulda-context
3
- specs:
4
- shoulda-context (1.1.1)
5
-
6
- GEM
7
- remote: http://rubygems.org/
8
- specs:
9
- actionmailer (4.0.0.rc1)
10
- actionpack (= 4.0.0.rc1)
11
- mail (~> 2.5.3)
12
- actionpack (4.0.0.rc1)
13
- activesupport (= 4.0.0.rc1)
14
- builder (~> 3.1.0)
15
- erubis (~> 2.7.0)
16
- rack (~> 1.5.2)
17
- rack-test (~> 0.6.2)
18
- activemodel (4.0.0.rc1)
19
- activesupport (= 4.0.0.rc1)
20
- builder (~> 3.1.0)
21
- activerecord (4.0.0.rc1)
22
- activemodel (= 4.0.0.rc1)
23
- activerecord-deprecated_finders (~> 1.0.2)
24
- activesupport (= 4.0.0.rc1)
25
- arel (~> 4.0.0)
26
- activerecord-deprecated_finders (1.0.2)
27
- activesupport (4.0.0.rc1)
28
- i18n (~> 0.6, >= 0.6.4)
29
- minitest (~> 4.2)
30
- multi_json (~> 1.3)
31
- thread_safe (~> 0.1)
32
- tzinfo (~> 0.3.37)
33
- appraisal (0.5.2)
34
- bundler
35
- rake
36
- arel (4.0.0)
37
- atomic (1.1.9)
38
- builder (3.1.4)
39
- erubis (2.7.0)
40
- hike (1.2.2)
41
- i18n (0.6.4)
42
- jquery-rails (2.2.1)
43
- railties (>= 3.0, < 5.0)
44
- thor (>= 0.14, < 2.0)
45
- mail (2.5.3)
46
- i18n (>= 0.4.0)
47
- mime-types (~> 1.16)
48
- treetop (~> 1.4.8)
49
- mime-types (1.23)
50
- minitest (4.7.4)
51
- mocha (0.9.12)
52
- multi_json (1.7.3)
53
- polyglot (0.3.3)
54
- rack (1.5.2)
55
- rack-test (0.6.2)
56
- rack (>= 1.0)
57
- rails (4.0.0.rc1)
58
- actionmailer (= 4.0.0.rc1)
59
- actionpack (= 4.0.0.rc1)
60
- activerecord (= 4.0.0.rc1)
61
- activesupport (= 4.0.0.rc1)
62
- bundler (>= 1.3.0, < 2.0)
63
- railties (= 4.0.0.rc1)
64
- sprockets-rails (~> 2.0.0.rc4)
65
- railties (4.0.0.rc1)
66
- actionpack (= 4.0.0.rc1)
67
- activesupport (= 4.0.0.rc1)
68
- rake (>= 0.8.7)
69
- thor (>= 0.18.1, < 2.0)
70
- rake (10.0.4)
71
- sass (3.2.9)
72
- sass-rails (4.0.0.rc1)
73
- railties (>= 4.0.0.beta, < 5.0)
74
- sass (>= 3.1.10)
75
- sprockets-rails (~> 2.0.0.rc0)
76
- tilt (~> 1.3)
77
- sprockets (2.9.3)
78
- hike (~> 1.2)
79
- multi_json (~> 1.0)
80
- rack (~> 1.0)
81
- tilt (~> 1.1, != 1.3.0)
82
- sprockets-rails (2.0.0.rc4)
83
- actionpack (>= 3.0)
84
- activesupport (>= 3.0)
85
- sprockets (~> 2.8)
86
- test-unit (2.1.2)
87
- thor (0.18.1)
88
- thread_safe (0.1.0)
89
- atomic
90
- tilt (1.4.1)
91
- treetop (1.4.12)
92
- polyglot
93
- polyglot (>= 0.3.1)
94
- tzinfo (0.3.37)
95
-
96
- PLATFORMS
97
- ruby
98
-
99
- DEPENDENCIES
100
- appraisal (~> 0.5)
101
- jquery-rails
102
- mocha (~> 0.9.10)
103
- rails (= 4.0.0.rc1)
104
- rake
105
- sass-rails (= 4.0.0.rc1)
106
- shoulda-context!
107
- test-unit (~> 2.1.0)