wisper-minitest 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 96b41c064896a906422c64e0078fcfbfd944c87a
4
+ data.tar.gz: a3b5288fffdf58d4e8a92e2d8f4c6839f05b6337
5
+ SHA512:
6
+ metadata.gz: 4d16b0e5bdce500bad21e9c22f59c3e56945036cb28c5e2f2bc951688c15e23194f36b5ec6042362aa7dde23935a6adaa4afd407e554e5f9157400266a324a2a
7
+ data.tar.gz: 413789ece547ffef5c877f7c5e5ba35e3ccd6a1e955df945a62a0a232b630d0efd3733510917bfaa003c2709557bfe5d57b1a0794742cd9c0cfa0fd63ebb7042
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
@@ -0,0 +1 @@
1
+ 2.3.1
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - '1.9.3'
5
+ - '2.1.5'
6
+ - '2.2.0'
@@ -0,0 +1,3 @@
1
+ 0.0.1 (05/Jun/2015)
2
+
3
+ * `assert_broadcast` assertion ported from [wisper-rspec](https://github.com/krisleech/wisper-rspec)
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,28 @@
1
+ The MIT License (MIT)
2
+
3
+ Some work is Copyright (c) 2014 Kris Leech under the same license :
4
+ * The Wisper::Minitest::EventRecorder class, with some modifications from
5
+ Digital Cuisine
6
+ * Tests have been ported from wisper-rspec — when possible the original code
7
+ has been kept.
8
+
9
+ All the rest is Copyright (c) 2015 Digital Cuisine
10
+
11
+ Permission is hereby granted, free of charge, to any person obtaining a copy
12
+ of this software and associated documentation files (the "Software"), to deal
13
+ in the Software without restriction, including without limitation the rights
14
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15
+ copies of the Software, and to permit persons to whom the Software is
16
+ furnished to do so, subject to the following conditions:
17
+
18
+ The above copyright notice and this permission notice shall be included in all
19
+ copies or substantial portions of the Software.
20
+
21
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27
+ SOFTWARE.
28
+
@@ -0,0 +1,56 @@
1
+ # Wisper::MiniTest
2
+
3
+ MiniTest assertions/expectations and stubbing for [Wisper](https://github.com/krisleech/wisper).
4
+ Based on @krisleech work and his own [wisper-rspec](https://github.com/krisleech/wisper-rspec) gem.
5
+
6
+ [![Gem Version](https://img.shields.io/gem/v/wisper-minitest.svg)](https://rubygems.org/gems/wisper-minitest)
7
+ [![Build Status](https://img.shields.io/travis/digitalcuisine/wisper-minitest.svg)](https://travis-ci.org/digitalcuisine/wisper-minitest)
8
+
9
+ ## Installation
10
+
11
+ ```ruby
12
+ gem 'wisper-minitest', require: false
13
+ ```
14
+
15
+ ## Usage
16
+
17
+ ### Broadcast assertion
18
+
19
+ In `test_helper`
20
+
21
+ ```ruby
22
+ require 'wisper/minitest/assertions'
23
+ ```
24
+
25
+ In your tests:
26
+ ```ruby
27
+ assert_broadcast(:an_event) { publisher.execute }
28
+ ```
29
+ This will match both `broadcast(:an_event)` and `broadcast(:an_event, :arg_1)`.
30
+
31
+
32
+ ```ruby
33
+ # with optional arguments
34
+ assert_broadcast(:another_event, :arg1, :arg2) { publisher.execute }
35
+ ```
36
+
37
+ With event arguments, it matches only if the event is broadcast with those
38
+ arguments. This assertion matches `broadcast(:another_event, :arg1, :arg2)` but
39
+ not `broadcast(:another_event)`.
40
+
41
+
42
+
43
+ ## Todo
44
+
45
+ The [wisper-rspec](https://github.com/krisleech/wisper-rspec) gem is not fully
46
+ ported yet. Here's what's missing:
47
+
48
+ - [x] Convert `broadcast` expectation to `assert_broadcast` assertion
49
+ - [x] Add a `refute_broadcast` assertion
50
+ - [x] Make those available as Minitest expectations too
51
+ - [ ] Document or implement a way to assert that a listener is receiving events
52
+ - [ ] Port publisher stub feature
53
+
54
+ ## Contributing
55
+
56
+ Any contribution is welcome! Open an issue or send a pull request to get started.
@@ -0,0 +1,9 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs << 'test'
6
+ t.pattern = 'test/*_test.rb'
7
+ end
8
+
9
+ task default: :test
@@ -0,0 +1 @@
1
+ require 'wisper/minitest/version'
@@ -0,0 +1,72 @@
1
+ require 'minitest/unit'
2
+ require 'wisper/minitest/event_recorder'
3
+
4
+ module Minitest::Assertions
5
+
6
+ module Messages
7
+
8
+ def self.assertion_failure(event_recorder)
9
+ msg = "expected publisher to broadcast #{event_recorder.event_name} event"
10
+ if event_recorder.args.size == 0
11
+ if event_recorder.broadcast_events.any?
12
+ msg += " (not included in #{event_recorder.broadcast_events.map(&:first).join(', ')})"
13
+ else
14
+ msg += ' (no events broadcast)'
15
+ end
16
+ end
17
+ msg += " with args: #{event_recorder.args.inspect}" if event_recorder.args.size > 0
18
+ msg
19
+ end
20
+
21
+ def self.refutation_failure(event_recorder)
22
+ msg = "expected publisher not to broadcast #{event_recorder.event_name} event"
23
+ if event_recorder.args.size == 0
24
+ if event_recorder.broadcast_events.count > 1
25
+ msg += " (included in #{event_recorder.broadcast_events.map(&:first).join(', ')})"
26
+ end
27
+ end
28
+ msg += " with args: #{event_recorder.args.inspect}" if event_recorder.args.size > 0
29
+ msg
30
+ end
31
+ end
32
+
33
+ def assert_broadcast(*args)
34
+ event = args.shift
35
+ blk = args.first.respond_to?(:call) ? args.shift : nil
36
+ event_recorder = Wisper::Minitest::EventRecorder.new
37
+
38
+ # Call the given block within a temporary global subscriber
39
+ Wisper.subscribe(event_recorder) do
40
+ if block_given?
41
+ yield
42
+ elsif blk.respond_to?(:call)
43
+ blk.call
44
+ end
45
+ end
46
+
47
+ test = event_recorder.broadcast?(event, *args)
48
+
49
+ # Check that given event has been broadcast
50
+ assert test, Messages.assertion_failure(event_recorder)
51
+ end
52
+
53
+ def refute_broadcast(*args)
54
+ event = args.shift
55
+ blk = args.first.respond_to?(:call) ? args.shift : nil
56
+ event_recorder = Wisper::Minitest::EventRecorder.new
57
+
58
+ # Call the given block within a temporary global subscriber
59
+ Wisper.subscribe(event_recorder) do
60
+ if block_given?
61
+ yield
62
+ elsif blk.respond_to?(:call)
63
+ blk.call
64
+ end
65
+ end
66
+
67
+ test = event_recorder.broadcast?(event, *args)
68
+
69
+ # Check that given event has not been broadcast
70
+ refute test, Messages.refutation_failure(event_recorder)
71
+ end
72
+ end
@@ -0,0 +1,32 @@
1
+ module Wisper
2
+ module Minitest
3
+ class EventRecorder
4
+ attr_reader :broadcast_events
5
+ attr_reader :event_name
6
+ attr_reader :args
7
+
8
+ def initialize
9
+ @broadcast_events = []
10
+ end
11
+
12
+ def respond_to?(method_name)
13
+ true
14
+ end
15
+
16
+ def method_missing(method_name, *args, &block)
17
+ @broadcast_events << [method_name.to_s, *args]
18
+ end
19
+
20
+ def broadcast?(event_name, *args)
21
+ @event_name = event_name
22
+ @args = args
23
+
24
+ if args.size > 0
25
+ @broadcast_events.include?([event_name.to_s, *args])
26
+ else
27
+ @broadcast_events.map(&:first).include?(event_name.to_s)
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,8 @@
1
+ require 'minitest/unit'
2
+ require 'minitest/spec'
3
+ require 'wisper/minitest/assertions'
4
+
5
+ module Minitest::Expectations
6
+ infect_an_assertion :assert_broadcast, :must_broadcast
7
+ infect_an_assertion :refute_broadcast, :wont_broadcast
8
+ end
@@ -0,0 +1,5 @@
1
+ module Wisper
2
+ module Minitest
3
+ VERSION = '0.0.3'
4
+ end
5
+ end
@@ -0,0 +1,78 @@
1
+ require 'test_helper'
2
+ require 'wisper/minitest/assertions'
3
+
4
+ class TestAssertBroadcast < Minitest::Test
5
+
6
+ extend Minitest::Spec::DSL
7
+
8
+ let(:event_name) { 'it_happened' }
9
+
10
+ let(:broadcaster) do
11
+ Class.new do
12
+ include Wisper::Publisher
13
+ public :broadcast
14
+ end.new
15
+ end
16
+
17
+ let(:event1) { 'trololo' }
18
+ let(:event2) { 'u mad?' }
19
+
20
+ let(:non_matching_broadcast) do
21
+ Proc.new do
22
+ broadcaster.broadcast(event1)
23
+ broadcaster.broadcast(event2)
24
+ end
25
+ end
26
+
27
+
28
+ def test_passes_with_matching_event
29
+ assert_broadcast(event_name) { broadcaster.broadcast(event_name) }
30
+ end
31
+
32
+ def test_fails_with_non_matching_event
33
+ assert_raises Minitest::Assertion do
34
+ assert_broadcast(event_name, &non_matching_broadcast)
35
+ end
36
+ end
37
+
38
+ def test_fails_with_descriptive_failure_message_on_non_matching_event
39
+ exp = assert_raises MiniTest::Assertion do
40
+ assert_broadcast(event_name, &non_matching_broadcast)
41
+ end
42
+
43
+ assert_equal exp.message, "expected publisher to broadcast #{event_name} event (not included in #{event1}, #{event2})"
44
+ end
45
+
46
+ def test_fails_with_no_broadcast
47
+ assert_raises Minitest::Assertion do
48
+ assert_broadcast(event_name) { }
49
+ end
50
+ end
51
+
52
+ def test_fails_with_descriptive_failure_message_on_no_event
53
+ exp = assert_raises Minitest::Assertion do
54
+ assert_broadcast(event_name) { }
55
+ end
56
+
57
+ assert_equal exp.message, "expected publisher to broadcast #{event_name} event (no events broadcast)"
58
+ end
59
+
60
+ def test_passes_with_matching_event_and_arguments
61
+ assert_broadcast(event_name, :arg1, :arg2) { broadcaster.broadcast(event_name, :arg1, :arg2) }
62
+ end
63
+
64
+ def test_fails_with_non_matching_arguments
65
+ assert_raises Minitest::Assertion do
66
+ assert_broadcast(event_name, :arg1, :arg2, &non_matching_broadcast)
67
+ end
68
+ end
69
+
70
+ def test_fails_with_descriptive_failure_message_on_non_matching_arguments
71
+ exp = assert_raises Minitest::Assertion do
72
+ assert_broadcast(event_name, :arg1, :arg2, &non_matching_broadcast)
73
+ end
74
+
75
+ assert_equal exp.message, "expected publisher to broadcast #{event_name} event with args: [:arg1, :arg2]"
76
+ end
77
+
78
+ end
@@ -0,0 +1,33 @@
1
+ require 'test_helper'
2
+ require 'wisper/minitest/expectations'
3
+
4
+ class TestExpectations < Minitest::Test
5
+ extend Minitest::Spec::DSL
6
+
7
+ let(:event_name) { 'it_happened' }
8
+
9
+ let(:broadcaster) do
10
+ Class.new do
11
+ include Wisper::Publisher
12
+ public :broadcast
13
+ end.new
14
+ end
15
+
16
+ def test_must_broadcast_no_args
17
+ proc{ broadcaster.broadcast(event_name) }.must_broadcast(event_name)
18
+ end
19
+
20
+ def test_must_broadcast_with_args
21
+ proc{ broadcaster.broadcast(event_name, :arg1) }.must_broadcast(event_name, :arg1)
22
+ proc{ broadcaster.broadcast(event_name, :arg1) }.must_broadcast(event_name)
23
+ end
24
+
25
+ def test_wont_broadcast_no_args
26
+ proc{ }.wont_broadcast(event_name)
27
+ proc{ }.wont_broadcast(event_name, :arg1)
28
+ end
29
+
30
+ def test_wont_broadcast_with_args
31
+ proc{ broadcaster.broadcast(event_name) }.wont_broadcast(event_name, :arg1)
32
+ end
33
+ end
@@ -0,0 +1,66 @@
1
+ require 'test_helper'
2
+ require 'wisper/minitest/assertions'
3
+
4
+ class TestRefuteBroadcast < Minitest::Test
5
+ extend Minitest::Spec::DSL
6
+
7
+ let(:event_name) { 'it_happened' }
8
+
9
+ let(:broadcaster) do
10
+ Class.new do
11
+ include Wisper::Publisher
12
+ public :broadcast
13
+ end.new
14
+ end
15
+
16
+ let(:event1) { 'trololo' }
17
+ let(:event2) { 'u mad?' }
18
+
19
+ let(:non_matching_broadcast) do
20
+ Proc.new do
21
+ broadcaster.broadcast(event1)
22
+ broadcaster.broadcast(event2)
23
+ end
24
+ end
25
+
26
+ def test_passes_with_non_matching_event
27
+ refute_broadcast(event_name, &non_matching_broadcast)
28
+ end
29
+
30
+ def test_passes_with_no_broadcast
31
+ refute_broadcast(event_name) { }
32
+ end
33
+
34
+ def test_passes_with_non_matching_arguments
35
+ refute_broadcast(event_name, :arg1, :arg2, &non_matching_broadcast)
36
+ end
37
+
38
+ def test_fails_on_matching_event
39
+ assert_raises Minitest::Assertion do
40
+ refute_broadcast(event_name) { broadcaster.broadcast(event_name) }
41
+ end
42
+ end
43
+
44
+ def test_fails_with_descriptive_failure_message_on_matching_event
45
+ exp = assert_raises Minitest::Assertion do
46
+ refute_broadcast(event_name) { broadcaster.broadcast(event_name) }
47
+ end
48
+
49
+ assert_equal exp.message, "expected publisher not to broadcast #{event_name} event"
50
+ end
51
+
52
+ def test_fails_with_matching_event_and_arguments
53
+ assert_raises Minitest::Assertion do
54
+ refute_broadcast(event_name, :arg1, :arg2) { broadcaster.broadcast(event_name, :arg1, :arg2) }
55
+ end
56
+ end
57
+
58
+ def test_fails_with_descriptive_failure_message_on_matching_event_and_arguments
59
+ exp = assert_raises Minitest::Assertion do
60
+ refute_broadcast(event_name, :arg1, :arg2) { broadcaster.broadcast(event_name, :arg1, :arg2) }
61
+ end
62
+
63
+ assert_equal exp.message, "expected publisher not to broadcast #{event_name} event with args: [:arg1, :arg2]"
64
+ end
65
+
66
+ end
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+ gem 'minitest'
3
+
4
+ require 'minitest/autorun'
5
+ require 'minitest/pride'
6
+
7
+ require 'wisper'
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'wisper/minitest/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'wisper-minitest'
8
+ spec.version = Wisper::Minitest::VERSION
9
+ spec.authors = ['Olivier Lance @ Digital Cuisine']
10
+ spec.email = ["olivier@digitalcuisine.fr"]
11
+ spec.summary = 'MiniTest assertions/expectations and stubbing for Wisper'
12
+ spec.description = 'MiniTest assertions/expectations and stubbing for Wisper'
13
+ spec.homepage = 'https://github.com/digitalcuisine/wisper-minitest'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_development_dependency 'wisper'
22
+ spec.add_development_dependency 'bundler'
23
+ spec.add_development_dependency 'rake'
24
+ spec.add_development_dependency 'minitest'
25
+ end
metadata ADDED
@@ -0,0 +1,122 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wisper-minitest
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Olivier Lance @ Digital Cuisine
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-05-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: wisper
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: MiniTest assertions/expectations and stubbing for Wisper
70
+ email:
71
+ - olivier@digitalcuisine.fr
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - ".gitignore"
77
+ - ".ruby-version"
78
+ - ".travis.yml"
79
+ - CHANGELOG.md
80
+ - Gemfile
81
+ - LICENSE
82
+ - README.md
83
+ - Rakefile
84
+ - lib/wisper/minitest.rb
85
+ - lib/wisper/minitest/assertions.rb
86
+ - lib/wisper/minitest/event_recorder.rb
87
+ - lib/wisper/minitest/expectations.rb
88
+ - lib/wisper/minitest/version.rb
89
+ - test/assert_broadcast_test.rb
90
+ - test/expectations_test.rb
91
+ - test/refute_broadcast_test.rb
92
+ - test/test_helper.rb
93
+ - wisper-minitest.gemspec
94
+ homepage: https://github.com/digitalcuisine/wisper-minitest
95
+ licenses:
96
+ - MIT
97
+ metadata: {}
98
+ post_install_message:
99
+ rdoc_options: []
100
+ require_paths:
101
+ - lib
102
+ required_ruby_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ required_rubygems_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ requirements: []
113
+ rubyforge_project:
114
+ rubygems_version: 2.5.1
115
+ signing_key:
116
+ specification_version: 4
117
+ summary: MiniTest assertions/expectations and stubbing for Wisper
118
+ test_files:
119
+ - test/assert_broadcast_test.rb
120
+ - test/expectations_test.rb
121
+ - test/refute_broadcast_test.rb
122
+ - test/test_helper.rb