minitest-hooks 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7e8da883d698b9dd844a6ade834d4cc1caa51b53
4
- data.tar.gz: 9453d5c0815b26d38bc061aafcf891a74c7ba1cb
3
+ metadata.gz: bc5ab13e6ee044a2863034efc3ac937a421a4db7
4
+ data.tar.gz: 51b6c4ea85b9eb707f89b781e686ccd9cee60fda
5
5
  SHA512:
6
- metadata.gz: 0f4e94de8f4254c4b608beed79ba0e0de5dd0e62cdc87b53509352fcee4234d991b91d7f5734a8487881d9546fa75cb016e057e5e1692aa9b1380c130963e6e4
7
- data.tar.gz: aeb69ca1c500fc8e8139855da189a6d06ba4e4bd35fa899c7978d84e8b481d026c493db2f9d0d4398c48b2aa788801cbe60b53658a1e3c68110a442d23a6d591
6
+ metadata.gz: f7574f8634e17b8d0cfb0c44afd963d075263edfce9f0773be50e3b9f7614c6f13787f4b78203b3fde86c045bcb5bb2f968ccb35b8ab734d4169f6c2e40771b3
7
+ data.tar.gz: 059e6099981202bcc989e42c5f9cee7f02d3fc3af4670a044dbd7f552229e2b3a43943e08aa0e3f4ac8cb4cae05b1799e15dfa729dadb81a8f5c03713487df42
data/CHANGELOG CHANGED
@@ -1,3 +1,13 @@
1
+ === 1.1.0 (2015-05-11)
2
+
3
+ * Remove unnecessary module inclusion (jeremyevans)
4
+
5
+ * Add block-based around and around(:all) support (jeremyevans)
6
+
7
+ === 1.0.1 (2015-04-26)
8
+
9
+ * Fix homepage in gemspec (jeremyevans)
10
+
1
11
  === 1.0.0 (2015-04-26)
2
12
 
3
13
  * Initial Public Release
data/README.rdoc CHANGED
@@ -13,9 +13,9 @@ significantly speed up testing for specs that share expensive database setup cod
13
13
 
14
14
  Source code is available on GitHub at https://github.com/jeremyevans/minitest-hooks
15
15
 
16
- = Usage
16
+ = Usage
17
17
 
18
- == Using the library
18
+ == In Specs (Minitest::Spec)
19
19
 
20
20
  === For all specs
21
21
 
@@ -27,7 +27,7 @@ First, you need to require the library.
27
27
 
28
28
  require 'minitest/hooks'
29
29
 
30
- Or you can set the default for some specs to be <tt>Minitest::HooksSpec</tt>:
30
+ You can set the default for some specs to be <tt>Minitest::HooksSpec</tt>:
31
31
 
32
32
  MiniTest::Spec.register_spec_type(/something/, Minitest::HooksSpec)
33
33
 
@@ -37,10 +37,7 @@ Alternatively, you can include <tt>Minitest::Hooks</tt> in a specific spec class
37
37
  include Minitest::Hooks
38
38
  end
39
39
 
40
- But if you do this, you need to make sure that any +around+ and +around_all+
41
- methods defined in the class itself call +yield+ instead of +super+.
42
-
43
- == before_all Hooks
40
+ === before_all Hooks
44
41
 
45
42
  To run code before any specs in the suite are executed, pass +:all+ to +before+:
46
43
 
@@ -50,7 +47,7 @@ To run code before any specs in the suite are executed, pass +:all+ to +before+:
50
47
  end
51
48
  end
52
49
 
53
- == after_all Hooks
50
+ === after_all Hooks
54
51
 
55
52
  To run code after all specs in the suite are executed, pass +:all+ to +after+:
56
53
 
@@ -60,25 +57,65 @@ To run code after all specs in the suite are executed, pass +:all+ to +after+:
60
57
  end
61
58
  end
62
59
 
63
- == around Hooks
60
+ === around Hooks
64
61
 
65
- To run code around each spec in a suite, define the +around+ method and have it
62
+ To run code around each spec in a suite, call +around+ with a block, and have the block
66
63
  call +super+:
67
64
 
68
65
  describe 'something' do
69
- def around
66
+ around do |&block|
70
67
  DB.transaction(:rollback=>:always, :savepoint=>true, :auto_savepoint=>true) do
71
- super
68
+ super(&block)
72
69
  end
73
70
  end
74
71
  end
75
72
 
76
- == around_all Hooks
73
+ === around_all Hooks
77
74
 
78
- To run code around all specs in a suite, define the +around_all+ method and have
79
- it call +super+:
75
+ To run code around all specs in a suite, call <tt>around(:all)</tt> with a block,
76
+ and have the block call +super+:
80
77
 
81
78
  describe 'something' do
79
+ around(:all) do |&block|
80
+ DB.transaction(:rollback=>:always) do
81
+ super(&block)
82
+ end
83
+ end
84
+ end
85
+
86
+ === In Tests (Minitest::Test)
87
+
88
+ Create a subclass of <tt>Minitest::Test</tt> and include <tt>Minitest::Hooks</tt>,
89
+ and have your test classes subclass from that subclass:
90
+
91
+ require 'minitest/hooks'
92
+ class MyTest < Minitest::Test
93
+ include Minitest::Hooks
94
+ end
95
+
96
+ class TestSuite1 < MyTest
97
+ end
98
+
99
+ You can just define the +before_all+, +after_all+, +around+, and +around_all+ methods,
100
+ instead of using the spec DSL. Make sure to call super when overriding the methods.
101
+
102
+ class TestSuite1 < MyTest
103
+ def before_all
104
+ super
105
+ DB[:table].insert(:column=>1)
106
+ end
107
+
108
+ def after_all
109
+ DB[:table].delete
110
+ super
111
+ end
112
+
113
+ def around
114
+ DB.transaction(:rollback=>:always, :savepoint=>true, :auto_savepoint=>true) do
115
+ super
116
+ end
117
+ end
118
+
82
119
  def around_all
83
120
  DB.transaction(:rollback=>:always) do
84
121
  super
data/Rakefile CHANGED
@@ -1,6 +1,5 @@
1
1
  require "rake"
2
2
  require "rake/clean"
3
- require 'rake/testtask'
4
3
 
5
4
  CLEAN.include ["minitest-hooks-*.gem", "rdoc", "coverage"]
6
5
 
@@ -13,7 +12,7 @@ end
13
12
 
14
13
  desc "Run specs"
15
14
  task :spec do
16
- sh %{#{FileUtils::RUBY} -I lib spec/minitest_hooks_spec.rb}
15
+ sh %{#{FileUtils::RUBY} -I lib -e 'ARGV.each{|f| require f}' ./spec/*.rb}
17
16
  end
18
17
 
19
18
  task :default=>:spec
@@ -9,7 +9,6 @@ module Minitest::Hooks
9
9
  def self.included(mod)
10
10
  super
11
11
  mod.instance_exec do
12
- include(@hooks_module ||= Module.new)
13
12
  extend(Minitest::Hooks::ClassMethods)
14
13
  end
15
14
  end
@@ -74,10 +73,16 @@ module Minitest::Hooks::ClassMethods
74
73
  r
75
74
  end
76
75
 
76
+ # If type is :all, set the around_all hook, otherwise set the around hook.
77
+ def around(type=nil, &block)
78
+ meth = type == :all ? :around_all : :around
79
+ define_method(meth, &block)
80
+ end
81
+
77
82
  # If type is :all, set the before_all hook instead of the before hook.
78
83
  def before(type=nil, &block)
79
84
  if type == :all
80
- (defined?(@hooks_module) ? @hooks_module : self).send(:define_method, :before_all) do
85
+ define_method(:before_all) do
81
86
  super()
82
87
  instance_exec(&block)
83
88
  end
@@ -90,7 +95,7 @@ module Minitest::Hooks::ClassMethods
90
95
  # If type is :all, set the after_all hook instead of the after hook.
91
96
  def after(type=nil, &block)
92
97
  if type == :all
93
- (defined?(@hooks_module) ? @hooks_module : self).send(:define_method, :after_all) do
98
+ define_method(:after_all) do
94
99
  instance_exec(&block)
95
100
  super()
96
101
  end
@@ -0,0 +1,117 @@
1
+ require 'rubygems'
2
+ require 'sequel'
3
+ gem 'minitest'
4
+ require 'minitest/autorun'
5
+ require 'minitest/hooks'
6
+ require 'logger'
7
+
8
+ NDB = Sequel.connect(ENV['DATABASE_URL'] || 'sqlite:/')
9
+
10
+ MiniTest::Spec.register_spec_type(/no_default/, Minitest::Spec)
11
+
12
+ describe 'Minitest::Hooks with transactions/savepoints no_default' do
13
+ include Minitest::Hooks
14
+
15
+ before(:all) do
16
+ @ds_ba = @ds_aa
17
+ @ds_ba.count.must_equal 1 + @i
18
+ end
19
+ before do
20
+ @ds_be = @ds_ae
21
+ @ds_be.count.must_equal 2 + @i * 2
22
+ end
23
+ after do
24
+ @ds_be.count.must_equal 2 + @i * 2
25
+ end
26
+ after(:all) do
27
+ @ds_ba.count.must_equal 1 + @i
28
+ end
29
+ around do |&block|
30
+ @ds_aa.count.must_equal 1 + @i
31
+ NDB.transaction(:rollback=>:always, :savepoint=>true, :auto_savepoint=>true) do
32
+ @ds_ae = @ds_aa
33
+ @ds_ae.insert(1)
34
+ super(&block)
35
+ end
36
+ @ds_aa.count.must_equal 1 + @i
37
+ end
38
+ around(:all) do |&block|
39
+ @i ||= 0
40
+ NDB.transaction(:rollback=>:always) do
41
+ NDB.create_table(:a){Integer :a}
42
+ @ds_aa = NDB[:a]
43
+ @ds_aa.count.must_equal 0
44
+ @ds_aa.insert(1)
45
+ super(&block)
46
+ end
47
+ NDB.table_exists?(:a).must_equal false
48
+ end
49
+
50
+ 3.times do |i|
51
+ it "should work try #{i}" do
52
+ @ds_aa.count.must_equal 2
53
+ @ds_ae.count.must_equal 2
54
+ @ds_ba.count.must_equal 2
55
+ @ds_be.count.must_equal 2
56
+ end
57
+ end
58
+
59
+ describe "in nested describe" do
60
+ before(:all) do
61
+ @ds_ba3 = @ds_ba
62
+ @ds_ba2 = @ds_aa2
63
+ @ds_ba2.count.must_equal 2
64
+ end
65
+ before do
66
+ @ds_be3 = @ds_be
67
+ @ds_be2 = @ds_ae2
68
+ @ds_be2.count.must_equal 4
69
+ end
70
+ after do
71
+ @ds_be2.count.must_equal 4
72
+ end
73
+ after(:all) do
74
+ @ds_ba2.count.must_equal 2
75
+ end
76
+ around do |&block|
77
+ @ds_aa.count.must_equal 2
78
+ super() do
79
+ @ds_aa.count.must_equal 3
80
+ @ds_ae3 = @ds_ae
81
+ @ds_ae2 = @ds_aa2
82
+ @ds_ae2.insert(1)
83
+ block.call
84
+ @ds_aa.count.must_equal 4
85
+ end
86
+ @ds_aa.count.must_equal 2
87
+ end
88
+ around(:all) do |&block|
89
+ @i ||= 1
90
+ super() do
91
+ @ds_aa.count.must_equal 1
92
+ @ds_aa2 = @ds_aa
93
+ @ds_aa2.insert(1)
94
+ block.call
95
+ @ds_aa.count.must_equal 2
96
+ end
97
+ NDB.table_exists?(:a).must_equal false
98
+ end
99
+
100
+ 3.times do |i|
101
+ it "should work try #{i}" do
102
+ @ds_aa.count.must_equal 4
103
+ @ds_ae.count.must_equal 4
104
+ @ds_ba.count.must_equal 4
105
+ @ds_be.count.must_equal 4
106
+ @ds_aa2.count.must_equal 4
107
+ @ds_ae2.count.must_equal 4
108
+ @ds_ba2.count.must_equal 4
109
+ @ds_be2.count.must_equal 4
110
+ @ds_ae3.count.must_equal 4
111
+ @ds_ba3.count.must_equal 4
112
+ @ds_be3.count.must_equal 4
113
+ end
114
+ end
115
+ end
116
+ end
117
+
@@ -1,5 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'sequel'
3
+ gem 'minitest'
3
4
  require 'minitest/autorun'
4
5
  require 'minitest/hooks/default'
5
6
  require 'logger'
@@ -21,23 +22,23 @@ describe 'Minitest::Hooks with transactions/savepoints' do
21
22
  after(:all) do
22
23
  @ds_ba.count.must_equal 1 + @i
23
24
  end
24
- def around
25
+ around do |&block|
25
26
  @ds_aa.count.must_equal 1 + @i
26
27
  DB.transaction(:rollback=>:always, :savepoint=>true, :auto_savepoint=>true) do
27
28
  @ds_ae = @ds_aa
28
29
  @ds_ae.insert(1)
29
- super
30
+ super(&block)
30
31
  end
31
32
  @ds_aa.count.must_equal 1 + @i
32
33
  end
33
- def around_all
34
+ around(:all) do |&block|
34
35
  @i ||= 0
35
36
  DB.transaction(:rollback=>:always) do
36
37
  DB.create_table(:a){Integer :a}
37
38
  @ds_aa = DB[:a]
38
39
  @ds_aa.count.must_equal 0
39
40
  @ds_aa.insert(1)
40
- super
41
+ super(&block)
41
42
  end
42
43
  DB.table_exists?(:a).must_equal false
43
44
  end
@@ -68,25 +69,25 @@ describe 'Minitest::Hooks with transactions/savepoints' do
68
69
  after(:all) do
69
70
  @ds_ba2.count.must_equal 2
70
71
  end
71
- def around
72
+ around do |&block|
72
73
  @ds_aa.count.must_equal 2
73
- super do
74
+ super() do
74
75
  @ds_aa.count.must_equal 3
75
76
  @ds_ae3 = @ds_ae
76
77
  @ds_ae2 = @ds_aa2
77
78
  @ds_ae2.insert(1)
78
- yield
79
+ block.call
79
80
  @ds_aa.count.must_equal 4
80
81
  end
81
82
  @ds_aa.count.must_equal 2
82
83
  end
83
- def around_all
84
+ around(:all) do |&block|
84
85
  @i ||= 1
85
- super do
86
+ super() do
86
87
  @ds_aa.count.must_equal 1
87
88
  @ds_aa2 = @ds_aa
88
89
  @ds_aa2.insert(1)
89
- yield
90
+ block.call
90
91
  @ds_aa.count.must_equal 2
91
92
  end
92
93
  DB.table_exists?(:a).must_equal false
@@ -0,0 +1,125 @@
1
+ require 'rubygems'
2
+ require 'sequel'
3
+ gem 'minitest'
4
+ require 'minitest/autorun'
5
+ require 'minitest/hooks'
6
+ require 'logger'
7
+
8
+
9
+ class MyTest < Minitest::Test
10
+ include Minitest::Hooks
11
+ end
12
+
13
+ class TestMinitestHooks < MyTest
14
+ DB = Sequel.connect(ENV['DATABASE_URL'] || 'sqlite:/')
15
+
16
+ def before_all
17
+ super
18
+ @ds_ba = @ds_aa
19
+ assert_equal @ds_ba.count, 1 + @i
20
+ end
21
+ def setup
22
+ super
23
+ @ds_be = @ds_ae
24
+ assert_equal @ds_be.count, 2 + @i * 2
25
+ end
26
+ def teardown
27
+ assert_equal @ds_be.count, 2 + @i * 2
28
+ super
29
+ end
30
+ def after_all
31
+ assert_equal @ds_ba.count, 1 + @i
32
+ super
33
+ end
34
+ def around
35
+ assert_equal @ds_aa.count, 1 + @i
36
+ DB.transaction(:rollback=>:always, :savepoint=>true, :auto_savepoint=>true) do
37
+ @ds_ae = @ds_aa
38
+ @ds_ae.insert(1)
39
+ super
40
+ end
41
+ assert_equal @ds_aa.count, 1 + @i
42
+ end
43
+ def around_all
44
+ @i ||= 0
45
+ DB.transaction(:rollback=>:always) do
46
+ DB.create_table(:a){Integer :a}
47
+ @ds_aa = DB[:a]
48
+ assert_equal @ds_aa.count, 0
49
+ @ds_aa.insert(1)
50
+ super
51
+ end
52
+ assert_equal DB.table_exists?(:a), false
53
+ end
54
+
55
+ 3.times do |i|
56
+ define_method(:"test_should_work_#{i}") do
57
+ assert_equal @ds_aa.count, 2
58
+ assert_equal @ds_ae.count, 2
59
+ assert_equal @ds_ba.count, 2
60
+ assert_equal @ds_be.count, 2
61
+ end
62
+ end
63
+
64
+ class TestMinitestHooks2 < self
65
+ def before_all
66
+ super
67
+ @ds_ba3 = @ds_ba
68
+ @ds_ba2 = @ds_aa2
69
+ assert_equal @ds_ba2.count, 2
70
+ end
71
+ def setup
72
+ super
73
+ @ds_be3 = @ds_be
74
+ @ds_be2 = @ds_ae2
75
+ assert_equal @ds_be2.count, 4
76
+ end
77
+ def teardown
78
+ assert_equal @ds_be2.count, 4
79
+ super
80
+ end
81
+ def after_all
82
+ assert_equal @ds_ba2.count, 2
83
+ super
84
+ end
85
+ def around
86
+ assert_equal @ds_aa.count, 2
87
+ super do
88
+ assert_equal @ds_aa.count, 3
89
+ @ds_ae3 = @ds_ae
90
+ @ds_ae2 = @ds_aa2
91
+ @ds_ae2.insert(1)
92
+ yield
93
+ assert_equal @ds_aa.count, 4
94
+ end
95
+ assert_equal @ds_aa.count, 2
96
+ end
97
+ def around_all
98
+ @i ||= 1
99
+ super do
100
+ assert_equal @ds_aa.count, 1
101
+ @ds_aa2 = @ds_aa
102
+ @ds_aa2.insert(1)
103
+ yield
104
+ assert_equal @ds_aa.count, 2
105
+ end
106
+ assert_equal DB.table_exists?(:a), false
107
+ end
108
+
109
+ 3.times do |i|
110
+ define_method(:"test_should_work_#{i}") do
111
+ assert_equal @ds_aa.count, 4
112
+ assert_equal @ds_ae.count, 4
113
+ assert_equal @ds_ba.count, 4
114
+ assert_equal @ds_be.count, 4
115
+ assert_equal @ds_aa2.count, 4
116
+ assert_equal @ds_ae2.count, 4
117
+ assert_equal @ds_ba2.count, 4
118
+ assert_equal @ds_be2.count, 4
119
+ assert_equal @ds_ae3.count, 4
120
+ assert_equal @ds_ba3.count, 4
121
+ assert_equal @ds_be3.count, 4
122
+ end
123
+ end
124
+ end
125
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minitest-hooks
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Evans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-27 00:00:00.000000000 Z
11
+ date: 2015-05-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -71,7 +71,9 @@ files:
71
71
  - Rakefile
72
72
  - lib/minitest/hooks.rb
73
73
  - lib/minitest/hooks/default.rb
74
+ - spec/minitest_hooks_direct_spec.rb
74
75
  - spec/minitest_hooks_spec.rb
76
+ - spec/minitest_hooks_test.rb
75
77
  homepage: http://github.com/jeremyevans/minitest-hooks
76
78
  licenses:
77
79
  - MIT