on 0.2.1 → 0.3.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.
data/README.rdoc CHANGED
@@ -53,6 +53,40 @@ Syntatic sugar for creating an +on+ callback from Proc.
53
53
  end
54
54
  end
55
55
 
56
+ == Testing with On::TestHelper
57
+
58
+ require 'minitest/autorun'
59
+ require 'on'
60
+ require 'on/test_helper'
61
+
62
+ class SomeTest < MiniTest::Spec
63
+ include On::TestHelper
64
+
65
+ let(:recorder) { On::TestHelper::Recorder.new }
66
+
67
+ it "records everything" do
68
+ on = On.new(:success, :failure, &recorder)
69
+ on.call :success, :some, :args
70
+ assert_callback recorder, :success, :some, :args
71
+ end
72
+
73
+ it "calls nothing" do
74
+ on = On.new(:success, :failure, &recorder)
75
+ # nothing called
76
+ refute_callbacks recorder
77
+ end
78
+
79
+ it "records everything manually" do
80
+ on = On.new(:success, :failure) do |result|
81
+ recorder.record_block
82
+ recorder.record_callback(result, :success, :failure)
83
+ end
84
+ on.call :success, :some, :args
85
+ assert_callback recorder, :success, :some, :args
86
+ end
87
+ end
88
+
89
+
56
90
  == Installation
57
91
 
58
92
  Add this line to your application's Gemfile:
@@ -0,0 +1,115 @@
1
+ class On
2
+ # Helper for testing On callbacks.
3
+ #
4
+ # == Example
5
+ #
6
+ # require 'minitest/autorun'
7
+ # require 'on'
8
+ # require 'on/test_helper'
9
+ #
10
+ # class SomeTest < MiniTest::Spec
11
+ # include On::TestHelper
12
+ #
13
+ # let(:recorder) { On::TestHelper::Recorder.new }
14
+ #
15
+ # it "records everything" do
16
+ # on = On.new(:success, :failure, &recorder)
17
+ # on.call :success, :some, :args
18
+ # assert_callback recorder, :success, :some, :args
19
+ # end
20
+ #
21
+ # it "calls nothing" do
22
+ # on = On.new(:success, :failure, &recorder)
23
+ # # nothing called
24
+ # refute_callbacks recorder
25
+ # end
26
+ #
27
+ # it "records everything manually" do
28
+ # on = On.new(:success, :failure) do |result|
29
+ # recorder.record_block
30
+ # recorder.record_callback(result, :success, :failure)
31
+ # end
32
+ # on.call :success, :some, :args
33
+ # assert_callback recorder, :success, :some, :args
34
+ # end
35
+ # end
36
+ module TestHelper
37
+ # Asserts that a certain callbacks has been recorded by +recorder+.
38
+ #
39
+ # == Example
40
+ #
41
+ # assert_callback recorder, :success, "some", "args"
42
+ #
43
+ def assert_callback(recorder, name, *args)
44
+ callback = recorder.last_record
45
+ assert callback, "No callbacks found"
46
+ assert_equal name, callback.name, "Callback was #{callback}"
47
+ assert_equal args, callback.args, "Callback was #{callback}"
48
+ end
49
+
50
+ # Asserts that *no* callbacks has been recorder by +recorder+.
51
+ def refute_callbacks(recorder)
52
+ assert recorder.empty?, "Something has been recorded #{recorder.inspect}"
53
+ end
54
+
55
+ # Record callbacks.
56
+ class Recorder
57
+ Callback = Struct.new(:name, :args)
58
+
59
+ def initialize
60
+ @block = false
61
+ @callbacks = []
62
+ end
63
+
64
+ def block_called?
65
+ @block
66
+ end
67
+
68
+ def empty?
69
+ @callbacks.empty?
70
+ end
71
+
72
+ # Pops the last recorded recorded.
73
+ def last_record
74
+ @callbacks.pop
75
+ end
76
+
77
+ # Records block and all defined callbacks.
78
+ def record_all
79
+ proc do |on|
80
+ record_block
81
+ record_callback(on, *on.callbacks)
82
+ end
83
+ end
84
+
85
+ # Records a block.
86
+ #
87
+ # recorder = Recorder.new
88
+ # On.new(:success) do |callback|
89
+ # recorder.record_block
90
+ # callback.on :success do
91
+ # # assert...
92
+ # end
93
+ # end
94
+ #
95
+ # assert recorder.block_called?
96
+ def record_block
97
+ @block = true
98
+ end
99
+
100
+ # Records a single callback.
101
+ def record_callback(on, *names)
102
+ names.each do |name|
103
+ on.on name do |*args|
104
+ @callbacks << Callback.new(name, args)
105
+ end
106
+ end
107
+ end
108
+
109
+ # Short-hand for &+recorder.record_all+.
110
+ def to_proc
111
+ record_all
112
+ end
113
+ end
114
+ end
115
+ end
data/lib/on/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class On
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
data/test/helper.rb CHANGED
@@ -1,22 +1,10 @@
1
1
  require 'minitest/autorun'
2
2
  require 'testem'
3
3
 
4
- class Testem
5
- let(:called) { [] }
6
-
7
- setup do
8
- called.clear
9
- end
4
+ require 'on/test_helper'
10
5
 
11
- def called!(*args)
12
- called << args
13
- end
14
-
15
- def assert_called(*args)
16
- assert_equal called, args
17
- end
6
+ class Testem
7
+ include On::TestHelper
18
8
 
19
- def assert_nothing_called
20
- assert_called
21
- end
9
+ let(:recorder) { On::TestHelper::Recorder.new }
22
10
  end
@@ -14,53 +14,30 @@ class IntegrationTest < Testem
14
14
  end
15
15
 
16
16
  test "it calls success" do
17
- tweet "Sir, hello world" do |callback|
18
- called! :method
19
- callback.on :success do |message|
20
- called! :success, message
21
- end
22
- callback.on :failure do |message|
23
- called! :failure, message
24
- end
25
- end
26
-
27
- assert_called [ :method ], [ :success, "Sir, hello world" ]
17
+ tweet "Sir, hello world", &recorder
18
+ assert_callback recorder, :success, "Sir, hello world"
28
19
  end
29
20
 
30
21
  test "it calls failure" do
31
- tweet nil do |callback|
32
- called! :method
33
- callback.on :success do |message|
34
- called! :success, message
35
- end
36
- callback.on :failure do |message|
37
- called! :failure, message
38
- end
39
- end
40
-
41
- assert_called [ :method ], [ :failure, "blank" ]
22
+ tweet nil, &recorder
23
+ assert_callback recorder, :failure, "blank"
42
24
  end
43
25
 
44
26
  test "no callback called" do
45
- tweet "you're such a fool" do |callback|
46
- called! :method
47
- end
48
-
49
- assert_called
27
+ tweet "you're such a fool", &recorder
28
+ refute_callbacks recorder
29
+ refute recorder.block_called?
50
30
  end
51
31
 
52
32
  test "invalid callback name" do
53
33
  e = assert_raises On::InvalidCallback do
54
34
  tweet "Sir, hi" do |callback|
55
- called! :method
56
-
57
- callback.on :invalid do
58
- called! :invalid
59
- end
35
+ recorder.record_block
36
+ callback.on(:invalid) {}
60
37
  end
61
38
  end
62
39
  assert_equal "Invalid callback :invalid", e.message
63
-
64
- assert_called [:method]
40
+ assert recorder.block_called?
41
+ refute_callbacks recorder
65
42
  end
66
43
  end
data/test/on_proc_test.rb CHANGED
@@ -12,22 +12,11 @@ class OnProcTest < Testem
12
12
  end
13
13
  end
14
14
 
15
- def verify(number)
16
- oddeven(number) do |callback|
17
- called! :block, number
18
- callback.on :odd do
19
- called! :odd
20
- end
21
- callback.on :even do
22
- called! :even
23
- end
24
- end
25
- end
26
-
27
15
  test "call proc" do
28
- verify(1)
29
- verify(2)
16
+ oddeven(1, &recorder)
17
+ assert_callback recorder, :odd
30
18
 
31
- assert_called [ :block, 1 ], [ :odd ], [ :block, 2 ], [ :even ]
19
+ oddeven(2, &recorder)
20
+ assert_callback recorder, :even
32
21
  end
33
22
  end
data/test/on_test.rb CHANGED
@@ -20,10 +20,6 @@ class OnTest < Testem
20
20
  end
21
21
 
22
22
  context "with an instance" do
23
- before do
24
- called.clear
25
- end
26
-
27
23
  test "returns a list of supported callback names" do
28
24
  on = On.new(:success, :failure) {}
29
25
  assert_equal 2, on.callbacks.size
@@ -32,27 +28,20 @@ class OnTest < Testem
32
28
  end
33
29
 
34
30
  test "calls callback w/o args" do
35
- on = On.new(:success) do |callback|
36
- called! :block
37
- callback.on :success do |*args|
38
- called! :success, *args
39
- end
40
- end
31
+ on = On.new(:success, &recorder)
41
32
  on.call :success
42
33
 
43
- assert_called [ :block ], [ :success ]
34
+ assert recorder.block_called?
35
+ assert_callback recorder, :success
44
36
  end
45
37
 
46
38
  test "calls callback with args" do
47
- on = On.new(:success) do |callback|
48
- called! :block
49
- callback.on :success do |*args|
50
- called! :success, *args
51
- end
52
- end
39
+ on = On.new(:success, &recorder)
53
40
  on.call :success, :foo, :bar
54
41
 
55
- assert_called [ :block ], [ :success, :foo, :bar ]
42
+ assert recorder.block_called?
43
+ assert_callback recorder, :success, :foo, :bar
44
+
56
45
  assert on.callback
57
46
  assert_equal :success, on.callback.name
58
47
  end
@@ -68,26 +57,20 @@ class OnTest < Testem
68
57
 
69
58
  test "handles invalid callback" do
70
59
  on = On.new(:correct) do |callback|
71
- called! :block
72
60
  callback.on :wrong
73
61
  end
74
62
  e = assert_raises On::InvalidCallback do
75
63
  on.call :correct
76
64
  end
77
-
78
65
  assert_equal "Invalid callback :wrong", e.message
79
- assert_called [ :block ]
80
66
  end
81
67
 
82
68
  test "does not explode when nothing called" do
83
- on = On.new(:something) do
84
- called! :block
85
- end
86
- on.on :something do
87
- called! :something
88
- end
69
+ on = On.new(:something, &recorder)
70
+
71
+ refute_callbacks recorder
72
+ refute recorder.block_called?
89
73
 
90
- assert_nothing_called
91
74
  assert_nil on.callback
92
75
  end
93
76
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: 'on'
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-01 00:00:00.000000000 Z
12
+ date: 2012-12-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -89,6 +89,7 @@ files:
89
89
  - Rakefile
90
90
  - lib/on.rb
91
91
  - lib/on/proc.rb
92
+ - lib/on/test_helper.rb
92
93
  - lib/on/version.rb
93
94
  - on.gemspec
94
95
  - on.rb
@@ -110,7 +111,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
110
111
  version: '0'
111
112
  segments:
112
113
  - 0
113
- hash: -2576027221997955073
114
+ hash: -2276299258964583998
114
115
  required_rubygems_version: !ruby/object:Gem::Requirement
115
116
  none: false
116
117
  requirements:
@@ -119,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
119
120
  version: '0'
120
121
  segments:
121
122
  - 0
122
- hash: -2576027221997955073
123
+ hash: -2276299258964583998
123
124
  requirements: []
124
125
  rubyforge_project:
125
126
  rubygems_version: 1.8.24