cinch-test 0.0.2 → 0.0.3
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/.gitignore +17 -0
- data/.travis.yml +4 -0
- data/Gemfile +0 -5
- data/README.md +15 -0
- data/Rakefile +9 -0
- data/cinch-test.gemspec +26 -14
- data/lib/cinch/test.rb +21 -11
- data/lib/cinch/test/version.rb +1 -3
- data/spec/cinch_test_spec.rb +84 -0
- data/spec/spec_helper.rb +11 -0
- metadata +132 -10
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/README.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Cinch::Test
|
|
2
|
+
|
|
3
|
+
[](http://badge.fury.io/rb/cinch-test)
|
|
4
|
+
[](https://gemnasium.com/bhaberer/cinch-test)
|
|
5
|
+
[](https://travis-ci.org/bhaberer/cinch-test)
|
|
6
|
+
[](https://coveralls.io/r/bhaberer/cinch-test?branch=master)
|
|
7
|
+
[](https://codeclimate.com/github/bhaberer/cinch-test)
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
1. `require 'cinch/test'` and include the module `Cinch::Test` in your test scope
|
|
12
|
+
2. Make a bot with `make_bot(plugin, plugin_opts)` (you can pass a block to further configure the bot)
|
|
13
|
+
3. Make a message with `make_message(bot, 'message text')`
|
|
14
|
+
4. Stub things out on the message as you like, then collect all the replies
|
|
15
|
+
with `get_replies(message)`
|
data/Rakefile
ADDED
data/cinch-test.gemspec
CHANGED
|
@@ -1,17 +1,29 @@
|
|
|
1
|
-
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
+
require 'cinch/test/version'
|
|
2
5
|
|
|
3
|
-
Gem::Specification.new do |
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
desc
|
|
12
|
-
s.homepage = "http://github.com/jayferd/cinch-test"
|
|
13
|
-
s.rubyforge_project = "cinch-test"
|
|
14
|
-
s.files = Dir['Gemfile', 'cinch-test.gemspec', 'lib/**/*.rb']
|
|
6
|
+
Gem::Specification.new do |gem|
|
|
7
|
+
gem.name = "cinch-test"
|
|
8
|
+
gem.version = Cinch::Test::VERSION
|
|
9
|
+
gem.authors = ["Jay Adkisson", "Brian Haberer"]
|
|
10
|
+
gem.email = ["jay@jayferd.us"]
|
|
11
|
+
gem.summary = %q{Helpers for testing Cinch Plugins}
|
|
12
|
+
gem.description = %q{A collection of utility methods, mocks and methods for testing Cinch plugins}
|
|
13
|
+
gem.homepage = "http://github.com/jayferd/cinch-test"
|
|
15
14
|
|
|
16
|
-
|
|
15
|
+
gem.files = `git ls-files`.split($/)
|
|
16
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
|
17
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
|
18
|
+
gem.require_paths = ["lib"]
|
|
19
|
+
|
|
20
|
+
gem.add_development_dependency 'rake'
|
|
21
|
+
gem.add_development_dependency 'coveralls'
|
|
22
|
+
gem.add_development_dependency 'minitest'
|
|
23
|
+
gem.add_development_dependency 'wrong'
|
|
24
|
+
gem.add_development_dependency 'rake'
|
|
25
|
+
gem.add_development_dependency 'rr'
|
|
26
|
+
gem.add_development_dependency 'debugger'
|
|
27
|
+
|
|
28
|
+
gem.add_dependency 'cinch', '~> 2.0.0'
|
|
17
29
|
end
|
data/lib/cinch/test.rb
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
require 'cinch'
|
|
2
|
-
|
|
3
2
|
require 'pathname'
|
|
4
3
|
require 'thread'
|
|
5
4
|
|
|
6
|
-
load Pathname.new(__FILE__).dirname.join('test/version.rb')
|
|
7
|
-
|
|
8
5
|
module Cinch
|
|
9
6
|
module Test
|
|
10
7
|
class MockIRC < Cinch::IRC
|
|
@@ -41,19 +38,19 @@ module Cinch
|
|
|
41
38
|
# override the message-parsing stuff
|
|
42
39
|
super(nil, bot)
|
|
43
40
|
@message = msg
|
|
44
|
-
|
|
45
|
-
@
|
|
41
|
+
@user = Cinch::User.new(opts.delete(:nick) { 'test' }, bot)
|
|
42
|
+
@channel = Cinch::Channel.new(opts.delete(:channel), bot) if opts.key?(:channel)
|
|
46
43
|
|
|
47
|
-
@
|
|
44
|
+
@bot.user_list.find_ensured(nil, @user.nick, nil)
|
|
48
45
|
end
|
|
49
46
|
end
|
|
50
47
|
|
|
51
|
-
def make_bot(plugin, opts, &b)
|
|
48
|
+
def make_bot(plugin, opts = {}, &b)
|
|
52
49
|
MockBot.new do
|
|
53
50
|
configure do |c|
|
|
54
51
|
c.nick = 'testbot'
|
|
55
52
|
c.server = nil
|
|
56
|
-
c.channels = []
|
|
53
|
+
c.channels = ['foo']
|
|
57
54
|
c.plugins.plugins = [plugin]
|
|
58
55
|
c.plugins.options[plugin] = opts
|
|
59
56
|
c.reconnect = false
|
|
@@ -67,9 +64,21 @@ module Cinch
|
|
|
67
64
|
MockMessage.new(text, bot, opts)
|
|
68
65
|
end
|
|
69
66
|
|
|
70
|
-
def send_message(message, event
|
|
67
|
+
def send_message(message, event = :message)
|
|
71
68
|
handlers = message.bot.handlers
|
|
72
|
-
|
|
69
|
+
|
|
70
|
+
# Deal with secondary event types
|
|
71
|
+
# See http://rubydoc.info/github/cinchrb/cinch/file/docs/events.md
|
|
72
|
+
events = [:catchall, event]
|
|
73
|
+
|
|
74
|
+
# If the message has a channel add the :channel event
|
|
75
|
+
events << :channel unless message.channel.nil?
|
|
76
|
+
|
|
77
|
+
# If the message is :private also trigger :message
|
|
78
|
+
events << :message if events.include?(:private)
|
|
79
|
+
|
|
80
|
+
# Dispatch each of the events to the handlers
|
|
81
|
+
events.each { |e| handlers.dispatch(e, message) }
|
|
73
82
|
|
|
74
83
|
# join all of the freaking threads, like seriously
|
|
75
84
|
# why is there no option to dispatch synchronously
|
|
@@ -84,7 +93,8 @@ module Cinch
|
|
|
84
93
|
replies = []
|
|
85
94
|
|
|
86
95
|
(class << message; self; end).class_eval do
|
|
87
|
-
define_method :reply do |r|
|
|
96
|
+
define_method :reply do |r, prefix = false|
|
|
97
|
+
r = [self.user.nick, r].join(': ') if prefix
|
|
88
98
|
mutex.synchronize { replies << r }
|
|
89
99
|
end
|
|
90
100
|
end
|
data/lib/cinch/test/version.rb
CHANGED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Cinch::Test do
|
|
4
|
+
class MyPlugin
|
|
5
|
+
include Cinch::Plugin
|
|
6
|
+
|
|
7
|
+
attr_reader :foo
|
|
8
|
+
def initialize(*)
|
|
9
|
+
super
|
|
10
|
+
@foo = config[:foo]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
match /foo/, :method => :foo
|
|
14
|
+
def foo(m)
|
|
15
|
+
m.reply "foo: #{@foo}"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
match /bar/, :method => :bar
|
|
19
|
+
def bar(m)
|
|
20
|
+
m.reply 'bar reply'
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
match /baz/, :method => :baz
|
|
24
|
+
def baz(m)
|
|
25
|
+
m.reply 'baz reply', true
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
listen_to :channel
|
|
29
|
+
def listen(m)
|
|
30
|
+
m.reply 'I listen'
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
match /trout/, :method => :action, :react_on => :action
|
|
34
|
+
def action(m)
|
|
35
|
+
m.reply 'I hate fish'
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
include Cinch::Test
|
|
40
|
+
|
|
41
|
+
it 'makes a test bot without a config' do
|
|
42
|
+
bot = make_bot(MyPlugin)
|
|
43
|
+
assert bot.is_a?(Cinch::Bot)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
let(:bot) { make_bot(MyPlugin, :foo => 'foo_value') }
|
|
47
|
+
|
|
48
|
+
it 'makes a test bot with a config' do
|
|
49
|
+
assert bot.is_a?(Cinch::Bot)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'makes a bot with config values available to the plugin' do
|
|
53
|
+
message = make_message(bot, '!foo')
|
|
54
|
+
replies = get_replies(message)
|
|
55
|
+
assert replies == ['foo: foo_value']
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
describe '#make_message' do
|
|
59
|
+
let(:message) { make_message(bot, '!bar') }
|
|
60
|
+
|
|
61
|
+
it 'messages a test bot and gets a reply' do
|
|
62
|
+
replies = get_replies(message)
|
|
63
|
+
assert replies == ['bar reply']
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
describe '#make_message with reply' do
|
|
68
|
+
let(:message) { make_message(bot, '!baz') }
|
|
69
|
+
|
|
70
|
+
it 'messages a test bot and gets a prefixed reply' do
|
|
71
|
+
replies = get_replies(message)
|
|
72
|
+
assert replies == ['test: baz reply']
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
describe 'listeners' do
|
|
77
|
+
let(:message) { make_message(bot, 'blah blah blah', :channel => 'test') }
|
|
78
|
+
|
|
79
|
+
it 'messages a test bot and gets a prefixed reply' do
|
|
80
|
+
replies = get_replies(message)
|
|
81
|
+
assert replies == ['I listen']
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
|
@@ -1,25 +1,122 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: cinch-test
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.3
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
8
8
|
- Jay Adkisson
|
|
9
|
+
- Brian Haberer
|
|
9
10
|
autorequire:
|
|
10
11
|
bindir: bin
|
|
11
12
|
cert_chain: []
|
|
12
|
-
date: 2013-
|
|
13
|
+
date: 2013-06-29 00:00:00.000000000 Z
|
|
13
14
|
dependencies:
|
|
14
15
|
- !ruby/object:Gem::Dependency
|
|
15
|
-
name:
|
|
16
|
+
name: rake
|
|
16
17
|
requirement: !ruby/object:Gem::Requirement
|
|
17
18
|
none: false
|
|
18
19
|
requirements:
|
|
19
20
|
- - ! '>='
|
|
20
21
|
- !ruby/object:Gem::Version
|
|
21
22
|
version: '0'
|
|
22
|
-
type: :
|
|
23
|
+
type: :development
|
|
24
|
+
prerelease: false
|
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
26
|
+
none: false
|
|
27
|
+
requirements:
|
|
28
|
+
- - ! '>='
|
|
29
|
+
- !ruby/object:Gem::Version
|
|
30
|
+
version: '0'
|
|
31
|
+
- !ruby/object:Gem::Dependency
|
|
32
|
+
name: coveralls
|
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
|
34
|
+
none: false
|
|
35
|
+
requirements:
|
|
36
|
+
- - ! '>='
|
|
37
|
+
- !ruby/object:Gem::Version
|
|
38
|
+
version: '0'
|
|
39
|
+
type: :development
|
|
40
|
+
prerelease: false
|
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
42
|
+
none: false
|
|
43
|
+
requirements:
|
|
44
|
+
- - ! '>='
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '0'
|
|
47
|
+
- !ruby/object:Gem::Dependency
|
|
48
|
+
name: minitest
|
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
|
50
|
+
none: false
|
|
51
|
+
requirements:
|
|
52
|
+
- - ! '>='
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
55
|
+
type: :development
|
|
56
|
+
prerelease: false
|
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
58
|
+
none: false
|
|
59
|
+
requirements:
|
|
60
|
+
- - ! '>='
|
|
61
|
+
- !ruby/object:Gem::Version
|
|
62
|
+
version: '0'
|
|
63
|
+
- !ruby/object:Gem::Dependency
|
|
64
|
+
name: wrong
|
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
|
66
|
+
none: false
|
|
67
|
+
requirements:
|
|
68
|
+
- - ! '>='
|
|
69
|
+
- !ruby/object:Gem::Version
|
|
70
|
+
version: '0'
|
|
71
|
+
type: :development
|
|
72
|
+
prerelease: false
|
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
74
|
+
none: false
|
|
75
|
+
requirements:
|
|
76
|
+
- - ! '>='
|
|
77
|
+
- !ruby/object:Gem::Version
|
|
78
|
+
version: '0'
|
|
79
|
+
- !ruby/object:Gem::Dependency
|
|
80
|
+
name: rake
|
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
|
82
|
+
none: false
|
|
83
|
+
requirements:
|
|
84
|
+
- - ! '>='
|
|
85
|
+
- !ruby/object:Gem::Version
|
|
86
|
+
version: '0'
|
|
87
|
+
type: :development
|
|
88
|
+
prerelease: false
|
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
90
|
+
none: false
|
|
91
|
+
requirements:
|
|
92
|
+
- - ! '>='
|
|
93
|
+
- !ruby/object:Gem::Version
|
|
94
|
+
version: '0'
|
|
95
|
+
- !ruby/object:Gem::Dependency
|
|
96
|
+
name: rr
|
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
|
98
|
+
none: false
|
|
99
|
+
requirements:
|
|
100
|
+
- - ! '>='
|
|
101
|
+
- !ruby/object:Gem::Version
|
|
102
|
+
version: '0'
|
|
103
|
+
type: :development
|
|
104
|
+
prerelease: false
|
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
106
|
+
none: false
|
|
107
|
+
requirements:
|
|
108
|
+
- - ! '>='
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '0'
|
|
111
|
+
- !ruby/object:Gem::Dependency
|
|
112
|
+
name: debugger
|
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
|
114
|
+
none: false
|
|
115
|
+
requirements:
|
|
116
|
+
- - ! '>='
|
|
117
|
+
- !ruby/object:Gem::Version
|
|
118
|
+
version: '0'
|
|
119
|
+
type: :development
|
|
23
120
|
prerelease: false
|
|
24
121
|
version_requirements: !ruby/object:Gem::Requirement
|
|
25
122
|
none: false
|
|
@@ -27,17 +124,40 @@ dependencies:
|
|
|
27
124
|
- - ! '>='
|
|
28
125
|
- !ruby/object:Gem::Version
|
|
29
126
|
version: '0'
|
|
30
|
-
|
|
127
|
+
- !ruby/object:Gem::Dependency
|
|
128
|
+
name: cinch
|
|
129
|
+
requirement: !ruby/object:Gem::Requirement
|
|
130
|
+
none: false
|
|
131
|
+
requirements:
|
|
132
|
+
- - ~>
|
|
133
|
+
- !ruby/object:Gem::Version
|
|
134
|
+
version: 2.0.0
|
|
135
|
+
type: :runtime
|
|
136
|
+
prerelease: false
|
|
137
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
138
|
+
none: false
|
|
139
|
+
requirements:
|
|
140
|
+
- - ~>
|
|
141
|
+
- !ruby/object:Gem::Version
|
|
142
|
+
version: 2.0.0
|
|
143
|
+
description: A collection of utility methods, mocks and methods for testing Cinch
|
|
144
|
+
plugins
|
|
31
145
|
email:
|
|
32
146
|
- jay@jayferd.us
|
|
33
147
|
executables: []
|
|
34
148
|
extensions: []
|
|
35
149
|
extra_rdoc_files: []
|
|
36
150
|
files:
|
|
151
|
+
- .gitignore
|
|
152
|
+
- .travis.yml
|
|
37
153
|
- Gemfile
|
|
154
|
+
- README.md
|
|
155
|
+
- Rakefile
|
|
38
156
|
- cinch-test.gemspec
|
|
39
|
-
- lib/cinch/test/version.rb
|
|
40
157
|
- lib/cinch/test.rb
|
|
158
|
+
- lib/cinch/test/version.rb
|
|
159
|
+
- spec/cinch_test_spec.rb
|
|
160
|
+
- spec/spec_helper.rb
|
|
41
161
|
homepage: http://github.com/jayferd/cinch-test
|
|
42
162
|
licenses: []
|
|
43
163
|
post_install_message:
|
|
@@ -57,10 +177,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
57
177
|
- !ruby/object:Gem::Version
|
|
58
178
|
version: '0'
|
|
59
179
|
requirements: []
|
|
60
|
-
rubyforge_project:
|
|
61
|
-
rubygems_version: 1.8.
|
|
180
|
+
rubyforge_project:
|
|
181
|
+
rubygems_version: 1.8.24
|
|
62
182
|
signing_key:
|
|
63
183
|
specification_version: 3
|
|
64
|
-
summary:
|
|
65
|
-
test_files:
|
|
184
|
+
summary: Helpers for testing Cinch Plugins
|
|
185
|
+
test_files:
|
|
186
|
+
- spec/cinch_test_spec.rb
|
|
187
|
+
- spec/spec_helper.rb
|
|
66
188
|
has_rdoc:
|