cinch-test 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Gem Version](https://badge.fury.io/rb/cinch-test.png)](http://badge.fury.io/rb/cinch-test)
|
4
|
+
[![Dependency Status](https://gemnasium.com/bhaberer/cinch-test.png)](https://gemnasium.com/bhaberer/cinch-test)
|
5
|
+
[![Build Status](https://travis-ci.org/bhaberer/cinch-test.png?branch=master)](https://travis-ci.org/bhaberer/cinch-test)
|
6
|
+
[![Coverage Status](https://coveralls.io/repos/bhaberer/cinch-test/badge.png?branch=master)](https://coveralls.io/r/bhaberer/cinch-test?branch=master)
|
7
|
+
[![Code Climate](https://codeclimate.com/github/bhaberer/cinch-test.png)](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:
|