minitest-stately 0.1.0 → 0.2.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: 8a4c3d450336f7408db315d24711c8fef8817c1e
4
- data.tar.gz: 650c0031d535b36c429ba5988406ce07e3a36306
3
+ metadata.gz: 12d3996442703d16e374be803829c02fb3a49509
4
+ data.tar.gz: 1408bb41ba72f4578647327a970b31ba3ed2f086
5
5
  SHA512:
6
- metadata.gz: 37b34454ad059078bd7215b2ac23e651dc9617e3962effc15daa091412e4f16d3b924844ce597ba75379676fa8b71a99edc82b09d55c54581f6e45024e7df282
7
- data.tar.gz: 09bb894ba6d9350194625a86090987979f1a5d6946a6262e28f6f7c9377ab2a47e97d9fdde2076ef32c65ac4a62b585f5a8c204c22b9a6c106db4706d525ff81
6
+ metadata.gz: 003e6b9131129781909fd63c65f763e7be08eb41d6963dd19da5b0f2970f87612770522bc2ea97ae0c91dfa85e5bf92046a0d46e995c72eec9e7192c90a25471
7
+ data.tar.gz: 5f9c984ec2b43e75ee8f810c49f7a302fe37983882e9000f5a7a31baad101fc99cb886cf34f03243919dc9cc32d5dad58cb91cda01fad17509342a8f4d7b3855
data/README.md CHANGED
@@ -21,14 +21,15 @@ Ruby 1.8.7 and REE are not supported. Sorry retro-Ruby fans!
21
21
  ## Usage
22
22
 
23
23
  ### Minitest::Stately.watch
24
- Early in your test run (typically from `test_helper.rb`), call to set up the
25
- conditions to watch for changes in. The condition block is run immediately to
26
- set a default value, and then run and compared after each test executes to look
27
- for changes.
24
+ Early in your test run (typically from `test_helper.rb`), set up the condition
25
+ blocks you want to watch for changes. The condition blocks run immediately to
26
+ set default values, and then after each test the blocks are executed again and
27
+ compared for changes. The name provided to watch is used strictly for output
28
+ in the final change report.
28
29
 
29
30
  ```
30
31
  # Watch for freshly started threads
31
- Minitest::Stately.watch("condition name") do
32
+ Minitest::Stately.watch("thread count") do
32
33
  Thread.list.count
33
34
  end
34
35
  ```
@@ -40,11 +41,10 @@ like the following:
40
41
  ******************************
41
42
  Minitest::Stately Changes!!!
42
43
  ******************************
43
- Minitest::StatelyPluginTest#test_again: $boo changed from '0' to '1'
44
- Minitest::StatelyPluginTest#test_defined: $boo changed from '1' to '2'
44
+ Minitest::StatelyPluginTest#test_again: thread count changed from '1' to '2'
45
+ Minitest::StatelyPluginTest#test_defined: thread count changed from '2' to '3'
45
46
  ```
46
47
 
47
-
48
48
  ### Minitest::Stately.run
49
49
  Minitest::Stately can also register `run` blocks to be executed after each
50
50
  test. This can be useful for clearing out leaked state between all tests in a
@@ -56,9 +56,28 @@ Minitest::Stately.run do
56
56
  end
57
57
  ```
58
58
 
59
+ ### Minitest::Stately.fail_if
60
+ Minitest::Stately also allows you to write conditions which will globally fail
61
+ any test if they become true.
62
+
63
+ ```
64
+ # Fail if we get too many threads
65
+ Minitest::Stately.fail_if("so many threads") do
66
+ Thread.list.count > 10
67
+ end
68
+ ```
69
+
70
+ If this condition was violated, you'd see a test failure like:
71
+
72
+ ```
73
+ 1) Failure:
74
+ Minitest::StatelyPluginTest#test_again [.../watcher.rb:54]:
75
+ so many threads
76
+ ```
77
+
59
78
  ## Contributing
60
79
 
61
- 1. Fork it ( https://github.com/[my-github-username]/minitest-stately/fork )
80
+ 1. Fork it ( https://github.com/jasonrclark/minitest-stately/fork )
62
81
  2. Create your feature branch (`git checkout -b my-new-feature`)
63
82
  3. Commit your changes (`git commit -am 'Add some feature'`)
64
83
  4. Push to the branch (`git push origin my-new-feature`)
@@ -0,0 +1,9 @@
1
+ module Minitest
2
+ module Stately
3
+ module AfterTeardown
4
+ def after_teardown
5
+ Minitest::Stately.watcher.record(self)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -5,10 +5,6 @@ module Minitest
5
5
  super(options.delete(:io) || $stdout, options)
6
6
  end
7
7
 
8
- def record(result)
9
- Minitest::Stately.watcher.record(result)
10
- end
11
-
12
8
  def report
13
9
  io.puts(Minitest::Stately.watcher.report)
14
10
  end
@@ -1,5 +1,5 @@
1
1
  module Minitest
2
2
  module Stately
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
@@ -2,34 +2,40 @@ module Minitest
2
2
  module Stately
3
3
  class Watcher
4
4
  def initialize
5
- @watch = {}
6
- @run = []
5
+ @watch = {}
6
+ @run = []
7
+ @failures = {}
7
8
 
8
9
  @results = {}
9
10
  @report = []
10
11
  end
11
12
 
12
13
  def watch(name, &blk)
13
- @watch[name] = blk
14
- @results[blk] = blk.call
14
+ @watch[name] = blk
15
+ @results[name] = blk.call(nil)
15
16
  end
16
17
 
17
18
  def run(&blk)
18
19
  @run << blk
19
20
  end
20
21
 
22
+ def fail_if(name,&blk)
23
+ @failures[name] = blk
24
+ end
25
+
21
26
  def record(result)
22
27
  record_changes(result)
23
28
  run_blocks()
29
+ check_failures(result)
24
30
  end
25
31
 
26
32
  def record_changes(result)
27
33
  @watch.each do |name, blk|
28
- value = blk.call
29
- if value_changed?(blk, value)
30
- @report << message(result, name, blk, value)
34
+ value = blk.call(result)
35
+ if value_changed?(name, value)
36
+ @report << message(result, name, value)
31
37
  end
32
- @results[blk] = value
38
+ @results[name] = value
33
39
  end
34
40
  end
35
41
 
@@ -39,12 +45,21 @@ module Minitest
39
45
  end
40
46
  end
41
47
 
42
- def value_changed?(blk, value)
43
- @results[blk] != value
48
+ def check_failures(result)
49
+ failed = []
50
+ @failures.each do |name, blk|
51
+ failed << name if blk.call
52
+ end
53
+
54
+ result.flunk("#{failed.join(",")}") if failed.any?
55
+ end
56
+
57
+ def value_changed?(name, value)
58
+ @results[name] != value
44
59
  end
45
60
 
46
- def message(result, name, blk, value)
47
- "#{result.class.name}\##{result.name}: #{name} changed from '#{@results[blk]}' to '#{value}'"
61
+ def message(result, name, value)
62
+ "#{result.class.name}\##{result.name}: #{name} changed from #{@results[name].inspect} to #{value.inspect}"
48
63
  end
49
64
 
50
65
  HEADER = <<-EOS
@@ -1,3 +1,4 @@
1
+ require 'minitest/stately/after_teardown'
1
2
  require 'minitest/stately/reporter'
2
3
  require 'minitest/stately/watcher'
3
4
 
@@ -16,6 +17,14 @@ module Minitest
16
17
  def self.run(&blk)
17
18
  @watcher.run(&blk)
18
19
  end
20
+
21
+ def self.fail_if(name, &blk)
22
+ @watcher.fail_if(name, &blk)
23
+ end
24
+ end
25
+
26
+ class ::Minitest::Test
27
+ include Minitest::Stately::AfterTeardown
19
28
  end
20
29
 
21
30
  def self.plugin_stately_init(options)
@@ -46,6 +46,22 @@ module Minitest
46
46
  assert_changes(name, 2, 3)
47
47
  end
48
48
 
49
+ def test_multiple_watches_last_one_wins
50
+ first = 0
51
+ second = 0
52
+
53
+ @watcher.watch("hey") { first += 1 }
54
+ @watcher.watch("hey") { second += 1 }
55
+
56
+ # Reset before we record so initial defaulting is wiped
57
+ first = 0
58
+ second = 0
59
+ @watcher.record(self)
60
+
61
+ assert_equal(0, first)
62
+ assert_equal(1, second)
63
+ end
64
+
49
65
  def test_run
50
66
  @boo = 1
51
67
  @watcher.run do
@@ -56,9 +72,32 @@ module Minitest
56
72
  assert_nil @boo
57
73
  end
58
74
 
75
+ def test_fail_if
76
+ @watcher.fail_if("true") do
77
+ true
78
+ end
79
+
80
+ result = Minitest::Mock.new
81
+ result.expect(:flunk, nil, [String])
82
+ @watcher.record(result)
83
+
84
+ result.verify
85
+ end
86
+
87
+ def test_doesnt_fail
88
+ @watcher.fail_if("won't fail") do
89
+ false
90
+ end
91
+
92
+ result = Minitest::Mock.new
93
+ @watcher.record(result)
94
+
95
+ result.verify
96
+ end
97
+
59
98
  def assert_changes(name, old, new)
60
99
  assert_includes @watcher.report, name
61
- assert_includes @watcher.report, "'#{old}' to '#{new}'"
100
+ assert_includes @watcher.report, "#{old.inspect} to #{new.inspect}"
62
101
  end
63
102
  end
64
103
  end
@@ -10,6 +10,11 @@ Minitest::Stately.run do
10
10
  $clear_me = nil
11
11
  end
12
12
 
13
+ Minitest::Stately.fail_if("too false to fail") do
14
+ # This condition should never fail
15
+ false
16
+ end
17
+
13
18
  class Minitest::StatelyPluginTest < Minitest::Test
14
19
  def test_defined
15
20
  assert_nil $clear_me
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minitest-stately
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason R. Clark
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-12 00:00:00.000000000 Z
11
+ date: 2014-06-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -85,6 +85,7 @@ files:
85
85
  - LICENSE.txt
86
86
  - README.md
87
87
  - Rakefile
88
+ - lib/minitest/stately/after_teardown.rb
88
89
  - lib/minitest/stately/reporter.rb
89
90
  - lib/minitest/stately/version.rb
90
91
  - lib/minitest/stately/watcher.rb