minitest-stately 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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