diff --git a/plugins/Gameknot.py b/plugins/Gameknot.py
index d7d6f91f2..35ba118d5 100644
--- a/plugins/Gameknot.py
+++ b/plugins/Gameknot.py
@@ -145,7 +145,7 @@ class Gameknot(callbacks.PrivmsgCommandAndRegexp):
wp, lp, dp, seen)
return s
except AttributeError:
- if ('User %s not found!' % name) in profile:
+ if ('User %s not found!' % name.lower()) in profile:
raise callbacks.Error, 'No user %s exists.' % name
else:
raise callbacks.Error,'The format of the page was odd. %s' % \
@@ -166,7 +166,7 @@ class Gameknot(callbacks.PrivmsgCommandAndRegexp):
_gkPlayer = re.compile(r"popd\('(Rating[^']+)'\).*?>([^<]+)<")
_gkRating = re.compile(r": (\d+)[^:]+:
(\d+)[^,]+, (\d+)[^,]+, (\d+)")
- _gkGameTitle = re.compile(r"
(.*?)\s* \s* (.*?)\s* ")
_gkWon = re.compile(r'>(\S+)\s+won')
_gkReason = re.compile(r'won\s+\(\S+\s+(\S+)\)')
def gameknotSnarfer(self, irc, msg, match):
diff --git a/plugins/Infobot.py b/plugins/Infobot.py
index a7d87a73f..e705afbb3 100755
--- a/plugins/Infobot.py
+++ b/plugins/Infobot.py
@@ -79,6 +79,19 @@ def configure(advanced):
filename = os.path.join(conf.supybot.directories.data(), 'Infobot.db')
class InfobotDB(object):
+ _ends = ['!',
+ '.',
+ ', $who.',]
+ _dunnos = ['Dunno',
+ 'No idea',
+ 'I don\'t know',
+ 'I have no idea',
+ 'I don\'t have a clue',]
+ _confirms = ['10-4',
+ 'Okay',
+ 'Got it',
+ 'Gotcha',
+ 'I hear ya']
def __init__(self):
try:
fd = file(filename)
@@ -89,19 +102,6 @@ class InfobotDB(object):
(self._is, self._are) = pickle.load(fd)
self._changes = 0
self._responses = 0
- self._ends = ['!',
- '.',
- ', $who.',]
- self._dunnos = ['Dunno',
- 'No idea',
- 'I don\'t know',
- 'I have no idea',
- 'I don\'t have a clue',]
- self._confirms = ['10-4',
- 'Okay',
- 'Got it',
- 'Gotcha',
- 'I hear ya']
def flush(self):
fd = utils.transactionalFile(filename, 'wb')
@@ -175,6 +175,7 @@ class Infobot(callbacks.PrivmsgCommandAndRegexp):
self.msg = None
self.force = False
self.replied = False
+ self.badForce = False
self.addressed = False
def die(self):
@@ -230,8 +231,11 @@ class Infobot(callbacks.PrivmsgCommandAndRegexp):
else:
value = random.choice(value.split('|'))
if value.startswith('(http://tinyurl\.com/\w+)')
def _getTinyUrl(self, url, channel, cmd=False):
try:
- fd = urllib2.urlopen('http://tinyurl.com/create.php?url=%s' %
- url)
- s = fd.read()
- fd.close()
+ s = webutils.getUrl('http://tinyurl.com/create.php?url=%s' % url)
m = self._tinyRe.search(s)
if m is None:
tinyurl = None
else:
tinyurl = m.group(1)
return tinyurl
- except urllib2.HTTPError, e:
+ except webutils.WebError, e:
if cmd:
- raise callbacks.Error, e.msg()
+ raise callbacks.Error, e
else:
self.log.warning(str(e))
@@ -271,13 +265,19 @@ class URL(callbacks.PrivmsgCommandAndRegexp):
channel = msg.args[0]
snarf = self.registryValue('tinyurlSnarfer', channel)
minlen = self.registryValue('tinyurlSnarfer.minimumLength', channel)
+ dontSnarf = False
r = self.registryValue('nonSnarfingRegexp', channel)
- if snarf and len(url) >= minlen and not r.search(url):
+ if r is not None:
+ dontSnarf = r.search(url)
+ dontSnarf = not dontSnarf
+ if snarf and len(url) >= minlen and dontSnarf:
self.log.debug('Not applying tiny command, snarfer is active.')
return
tinyurl = self._getTinyUrl(url, channel, cmd=True)
+ domain = webutils.getDomain(url)
+ s = '%s (at %s)' % (ircutils.bold(tinyurl), domain)
if tinyurl is not None:
- irc.reply(tinyurl)
+ irc.reply(s)
else:
s = 'Could not parse the TinyURL.com results page.'
irc.errorPossibleBug(s)
diff --git a/plugins/__init__.py b/plugins/__init__.py
index 237dc66fd..382b74180 100644
--- a/plugins/__init__.py
+++ b/plugins/__init__.py
@@ -308,6 +308,9 @@ class PeriodicFileDownloader(object):
except IOError, e:
self.log.warning('Error downloading %s: %s', url, e)
return
+ except webutils.WebError, e:
+ self.log.warning('Error downloading %s: %s', url, e)
+ return
confDir = conf.supybot.directories.data()
newFilename = os.path.join(confDir, utils.mktemp())
outfd = file(newFilename, 'wb')
diff --git a/scripts/supybot b/scripts/supybot
index 83bc36dcb..3cc8cffff 100755
--- a/scripts/supybot
+++ b/scripts/supybot
@@ -234,6 +234,8 @@ if __name__ == '__main__':
os.mkdir(conf.supybot.directories.conf())
if not os.path.exists(conf.supybot.directories.data()):
os.mkdir(conf.supybot.directories.data())
+ if not os.path.exists(conf.supybot.directories.data.tmp()):
+ os.mkdir(conf.supybot.directories.tmp())
userdataFilename = os.path.join(conf.supybot.directories.conf(),
'userdata.conf')
diff --git a/src/callbacks.py b/src/callbacks.py
index 6e1e04be7..6f74a7d6e 100644
--- a/src/callbacks.py
+++ b/src/callbacks.py
@@ -138,7 +138,7 @@ def reply(msg, s, prefixName=True, private=False,
to = msg.nick
# Ok, now let's make the payload:
s = ircutils.safeArgument(s)
- if not s:
+ if not s and not action:
s = 'Error: I tried to send you an empty message.'
# Let's may sure we don't do, "#channel: foo.".
if prefixName and ircutils.isChannel(target):
diff --git a/test/test.py b/test/test.py
index 46eebba47..408f21a76 100755
--- a/test/test.py
+++ b/test/test.py
@@ -45,7 +45,7 @@ fd.write("""
supybot.directories.data: test-data
supybot.directories.conf: test-conf
supybot.directories.log: test-logs
-supybot.reply.whenNotCommand: False
+supybot.reply.whenNotCommand: True
supybot.log.stdout: False
supybot.log.level: DEBUG
supybot.log.detailedTracebacks: False
diff --git a/test/test_Alias.py b/test/test_Alias.py
index 13b26331b..f5f608386 100644
--- a/test/test_Alias.py
+++ b/test/test_Alias.py
@@ -85,7 +85,7 @@ class AliasTestCase(ChannelPluginTestCase, PluginDocumentation):
self.assertNotError('alias add foo echo bar')
self.assertResponse('foo', 'bar')
self.assertNotError('alias remove foo')
- self.assertNoResponse('foo', 2)
+ self.assertError('foo')
def testDollars(self):
self.assertNotError('alias add rot26 "rot13 [rot13 $1]"')
@@ -133,7 +133,7 @@ class AliasTestCase(ChannelPluginTestCase, PluginDocumentation):
self.assertRaises(Alias.AliasError, cb.removeAlias, 'foobar')
cb.removeAlias('foobar', evenIfLocked=True)
self.failIf('foobar' in cb.aliases)
- self.assertNoResponse('foobar', 2)
+ self.assertError('foobar')
def testOptionalArgs(self):
self.assertNotError('alias add myrepr "repr @1"')
diff --git a/test/test_Amazon.py b/test/test_Amazon.py
index 098852ff8..a0fb558f9 100644
--- a/test/test_Amazon.py
+++ b/test/test_Amazon.py
@@ -60,9 +60,9 @@ if LICENSE_KEY != 'INITIAL_NON_LICENSE_KEY' and network:
r'Short Bus.*/exec/obidos')
def testAuthor(self):
- self.assertHelp('author')
- self.assertRegexp('author torvalds', r'Just for Fun')
- self.assertRegexp('author --url torvalds', r'Reilly.*/exec/obidos')
+ self.assertHelp('amazon author')
+ self.assertRegexp('amazon author torvalds', r'Just for Fun')
+ self.assertRegexp('amazon author --url torvalds', r'Reilly')
def testArtist(self):
self.assertHelp('artist')
diff --git a/test/test_BadWords.py b/test/test_BadWords.py
index 6d931af8f..583360ace 100644
--- a/test/test_BadWords.py
+++ b/test/test_BadWords.py
@@ -35,8 +35,10 @@ class BadWordsTestCase(PluginTestCase):
plugins = ('BadWords', 'Utilities', 'Format')
badwords = ('shit', 'ass')
def tearDown(self):
- default = conf.supybot.plugins.BadWords.words.default
- conf.supybot.plugins.BadWords.words.setValue(default)
+ # .default() doesn't seem to be working for BadWords.words
+ #default = conf.supybot.plugins.BadWords.words.default()
+ #conf.supybot.plugins.BadWords.words.setValue(default)
+ conf.supybot.plugins.BadWords.words.setValue([])
def _test(self):
for word in self.badwords:
diff --git a/test/test_Bugzilla.py b/test/test_Bugzilla.py
index 1e9f6050d..220244b2a 100644
--- a/test/test_Bugzilla.py
+++ b/test/test_Bugzilla.py
@@ -39,10 +39,10 @@ if network:
self.assertNotError('bug gcc 5')
def testAddRemove(self):
- self.assertNotError('add xiph http://bugs.xiph.org/ Xiph')
- self.assertNotError('bug xiph 413')
- self.assertNotError('remove xiph')
- self.assertError('bug xiph 413')
+ self.assertNotError('add gcc http://gcc.gnu.org/bugzilla gcc')
+ self.assertNotError('bug gcc 5')
+ self.assertNotError('remove gcc')
+ self.assertError('bug gcc 413')
def testSearch(self):
self.assertNotError('add gcc http://gcc.gnu.org/bugzilla gcc')
diff --git a/test/test_Dunno.py b/test/test_Dunno.py
index c8f356cc6..e0b1118d5 100644
--- a/test/test_Dunno.py
+++ b/test/test_Dunno.py
@@ -57,21 +57,21 @@ if sqlite is not None:
self.assertError('dunno search moo')
self.assertNotError('dunno add moo')
self.assertResponse('dunno search moo', 'Dunno search for \'moo\' '
- '(1 found): 2')
+ '(1 found): 2.')
self.assertResponse('dunno search m', 'Dunno search for \'m\' '
- '(1 found): 2')
+ '(1 found): 2.')
# Test multiple adds
for i in range(5):
self.assertNotError('dunno add moo%s' % i)
self.assertResponse('dunno search moo',
'Dunno search for \'moo\' (6 found): '
- '2, 3, 4, 5, 6, and 7')
+ '2, 3, 4, 5, 6, and 7.')
def testDunnoGet(self):
self.assertNotError('dunno add moo')
- self.assertResponse('dunno get 1', 'Dunno #1: \'moo\'')
+ self.assertResponse('dunno get 1', 'Dunno #1: \'moo\'.')
self.assertNotError('dunno add $who')
- self.assertResponse('dunno get 2', 'Dunno #2: \'$who\'')
+ self.assertResponse('dunno get 2', 'Dunno #2: \'$who\'.')
self.assertError('dunno get 3')
self.assertError('dunno get a')
diff --git a/test/test_Ebay.py b/test/test_Ebay.py
index e5dfe8590..42d13f544 100644
--- a/test/test_Ebay.py
+++ b/test/test_Ebay.py
@@ -41,36 +41,49 @@ if network:
self.assertError('auction foobar')
def testSnarfer(self):
- conf.supybot.plugins.Ebay.auctionSnarfer.setValue(True)
- self.assertRegexp('http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem'
- '&category=176&item=3053767552',
- r'.*Cisco NP-4T.*Serial Module.*US \$74\.95.*')
- self.assertRegexp('http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&'
- 'category=28033&item=3053353651',
- r'.*Cisco 2524 Router - NO RESERVE.*izontech \(.*')
- # test snarfing other countries
- self.assertRegexp('http://cgi.ebay.ca/ws/eBayISAPI.dll?ViewItem&'
- 'item=3636820075',
- r'NEW 34" Itech 8.8 Profile')
- self.assertRegexp('http://cgi.ebay.co.uk/ws/eBayISAPI.dll?ViewItem&'
- 'item=2355464443',
- r'Any Clear Crazy')
- self.assertRegexp('http://cgi.ebay.com.au/ws/eBayISAPI.dll?ViewItem&'
- 'item=2762983161&category=4607',
- r'Apple Mac G4')
- # test .com/.*/ws/eBat compatibility
- self.assertRegexp('http://cgi.ebay.com/ebaymotors/ws/eBayISAPI.dll?'
- 'ViewItem&item=2439393310&category=33708',
- r'88-89 CRX amber')
+ orig = conf.supybot.plugins.Ebay.auctionSnarfer()
+ try:
+ conf.supybot.plugins.Ebay.auctionSnarfer.setValue(True)
+ self.assertSnarfRegexp(
+ 'http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem'
+ '&category=176&item=3053767552',
+ r'.*Cisco NP-4T.*Serial Module.*US \$74\.95.*')
+ self.assertSnarfRegexp(
+ 'http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&'
+ 'category=28033&item=3053353651',
+ r'.*Cisco 2524 Router - NO RESERVE.*izontech \(.*')
+ # test snarfing other countries
+ self.assertSnarfRegexp(
+ 'http://cgi.ebay.ca/ws/eBayISAPI.dll?ViewItem&'
+ 'item=3636820075',
+ r'NEW 34" Itech 8.8 Profile')
+ self.assertSnarfRegexp(
+ 'http://cgi.ebay.co.uk/ws/eBayISAPI.dll?ViewItem&'
+ 'item=2355464443',
+ r'Any Clear Crazy')
+ self.assertSnarfRegexp(
+ 'http://cgi.ebay.com.au/ws/eBayISAPI.dll?ViewItem&'
+ 'item=2762983161&category=4607',
+ r'Apple Mac G4')
+ # test .com/.*/ws/eBat compatibility
+ self.assertSnarfRegexp(
+ 'http://cgi.ebay.com/ebaymotors/ws/eBayISAPI.dll?'
+ 'ViewItem&item=2439393310&category=33708',
+ r'88-89 CRX amber')
+ finally:
+ conf.supybot.plugins.Ebay.auctionSnarfer.setValue(orig)
def testConfigSnarfer(self):
- conf.supybot.plugins.Ebay.auctionSnarfer.setValue(False)
- self.assertNoResponse('http://cgi.ebay.com/ebaymotors/ws/'
- 'eBayISAPI.dll?ViewItem&item=2439393310&'
- 'category=33708')
- conf.supybot.plugins.Ebay.auctionSnarfer.setValue(True)
- self.assertNotError('http://cgi.ebay.com/ebaymotors/ws/'
- 'eBayISAPI.dll?ViewItem&item=2439393310&'
- 'category=33708')
+ try:
+ conf.supybot.plugins.Ebay.auctionSnarfer.setValue(False)
+ self.assertSnarfNoResponse(
+ 'http://cgi.ebay.com/ebaymotors/ws/eBayISAPI.dll?'
+ 'ViewItem&item=2439393310&category=33708')
+ conf.supybot.plugins.Ebay.auctionSnarfer.setValue(True)
+ self.assertSnarfNotError(
+ 'http://cgi.ebay.com/ebaymotors/ws/eBayISAPI.dll?'
+ 'ViewItem&item=2439393310&category=33708')
+ finally:
+ conf.supybot.plugins.Ebay.auctionSnarfer.setValue(False)
# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78:
diff --git a/test/test_Fun.py b/test/test_Fun.py
index 051dd6ade..b5dcd3916 100644
--- a/test/test_Fun.py
+++ b/test/test_Fun.py
@@ -38,14 +38,15 @@ import supybot.utils as utils
class FunTest(ChannelPluginTestCase, PluginDocumentation):
plugins = ('Fun',)
+ _nonKickRe = re.compile(r'bang|click|spin', re.I)
def testRoulette(self):
self.irc.feedMsg(ircmsgs.op(self.channel, self.irc.nick))
sawKick = False
for i in xrange(100):
m = self.getMsg('roulette', frm='someoneElse')
if m.command == 'PRIVMSG':
- self.failUnless('click' in m.args[1].lower(),
- 'Got a PRIVMSG without click in it.')
+ self.failUnless(self._nonKickRe.search(m.args[1]),
+ 'Got a PRIVMSG without bang|click|spin in it.')
elif m.command == 'KICK':
sawKick = True
self.failUnless('bang' in m.args[2].lower(),
diff --git a/test/test_Gameknot.py b/test/test_Gameknot.py
index a9800efa6..072c7e944 100644
--- a/test/test_Gameknot.py
+++ b/test/test_Gameknot.py
@@ -39,21 +39,28 @@ if network:
def testGkstats(self):
self.assertNotRegexp('gkstats jemfinch', 'Old GK rating')
self.assertError('gkstats %s' % utils.mktemp())
- self.assertNotError('gkstats Strike')
+ self.assertError('gkstats Strike')
def testNoHtmlInTeam(self):
self.assertNotRegexp('gkstats jeffuk', '9608')
def testUrlSnarfer(self):
- conf.supybot.plugins.Gameknot.gameSnarfer.setValue(True)
- self.assertNotError('http://gameknot.com/chess.pl?bd=1019508')
- self.assertNotError('here\'s a link: '
- 'http://gameknot.com/chess.pl?bd=1077350&r=394 '
- 'and here\'s another one: '
- 'http://gameknot.com/chess.pl?bd=1116828&r=250')
- self.assertNotError(' ') # The next snarfed response.
- self.assertNotRegexp('http://gameknot.com/chess.pl?bd=1019508',
- self.nick)
+ orig = conf.supybot.plugins.Gameknot.gameSnarfer()
+ try:
+ conf.supybot.plugins.Gameknot.gameSnarfer.setValue(True)
+ self.assertSnarfNotError(
+ 'http://gameknot.com/chess.pl?bd=1019508')
+ self.assertSnarfNotError(
+ 'here\'s a link: '
+ 'http://gameknot.com/chess.pl?bd=1077350&r=394 '
+ 'and here\'s another one: '
+ 'http://gameknot.com/chess.pl?bd=1116828&r=250')
+ self.irc.takeMsg() # The next snarfed response.
+ self.assertSnarfNotRegexp(
+ 'http://gameknot.com/chess.pl?bd=1019508',
+ self.nick)
+ finally:
+ conf.supybot.plugins.Gameknot.gameSnarfer.setValue(orig)
def testStatsUrlSnarfer(self):
conf.supybot.plugins.Gameknot.statSnarfer.setValue(True)
@@ -73,17 +80,17 @@ if network:
def testSnarfer(self):
- conf.supybot.plugins.Gameknot.gameSnarfer.setValue(True)
- # This game expired.
-## self.assertRegexp('http://gameknot.com/chess.pl?bd=907498',
-## '\x02ddipaolo\x0f won')
- # As did this :(
-## self.assertRegexp('http://gameknot.com/chess.pl?bd=907498',
-## '\x02chroniqueur\x0f resigned')
- self.assertRegexp('http://gameknot.com/chess.pl?bd=955432',
- '\x02ddipaolo\x0f lost')
- self.assertRegexp('http://gameknot.com/chess.pl?bd=1077345&r=365',
- 'draw')
+ orig = conf.supybot.plugins.Gameknot.gameSnarfer()
+ try:
+ conf.supybot.plugins.Gameknot.gameSnarfer.setValue(True)
+ self.assertSnarfRegexp(
+ 'http://gameknot.com/chess.pl?bd=955432',
+ '\x02ddipaolo\x02 lost')
+ self.assertSnarfRegexp(
+ 'http://gameknot.com/chess.pl?bd=1077345&r=365',
+ 'draw')
+ finally:
+ conf.supybot.plugins.Gameknot.gameSnarfer.setValue(orig)
diff --git a/test/test_Infobot.py b/test/test_Infobot.py
index 0a7bbc240..0ea265009 100644
--- a/test/test_Infobot.py
+++ b/test/test_Infobot.py
@@ -31,32 +31,73 @@
from testsupport import *
-try:
- import sqlite
-except ImportError:
- sqlite = None
+import supybot.plugins.Infobot
+confirms = supybot.plugins.Infobot.InfobotDB._confirms
+dunnos = supybot.plugins.Infobot.InfobotDB._dunnos
-if sqlite is not None:
- class InfobotTestCase(PluginTestCase):
- plugins = ('Infobot',)
- def testIsSnarf(self):
- self.assertNoResponse('foo is at http://bar.com/', 2)
- self.assertRegexp('foo?', r'foo.*is.*http://bar.com/')
- self.assertNoResponse('foo is at http://baz.com/', 2)
- self.assertNotRegexp('foo?', 'baz')
+class InfobotTestCase(ChannelPluginTestCase):
+ plugins = ('Infobot',)
+ _endRe = re.compile(r'!|, \S+\.|\.')
+ def testIsSnarf(self):
+ ibot = conf.supybot.plugins.Infobot
+ learn = ibot.snarfUnaddressedDefinitions()
+ answer = ibot.answerUnaddressedQuestions()
+ try:
+ ibot.snarfUnaddressedDefinitions.setValue(True)
+ ibot.answerUnaddressedQuestions.setValue(True)
+ self.assertSnarfNoResponse('foo is at http://bar.com/', 2)
+ self.assertSnarfRegexp('foo?', r'foo.*is.*http://bar.com/')
+ self.assertSnarfNoResponse('foo is at http://baz.com/', 2)
+ self.assertSnarfNotRegexp('foo?', 'baz')
+ m = self.getMsg('bar is at http://foo.com/')
+ self.failUnless(self._endRe.sub('', m.args[1]) in confirms)
+ self.assertRegexp('bar?', r'bar.*is.*http://foo.com/')
+ finally:
+ ibot.snarfUnaddressedDefinitions.setValue(learn)
+ ibot.answerUnaddressedQuestions.setValue(answer)
- def testAreSnarf(self):
- self.assertNoResponse('bars are dirty', 2)
- self.assertRegexp('bars?', 'bars.*are.*dirty')
- self.assertNoResponse('bars are not dirty', 2)
- self.assertNotRegexp('bars?', 'not')
+ def testAreSnarf(self):
+ ibot = conf.supybot.plugins.Infobot
+ learn = ibot.snarfUnaddressedDefinitions()
+ answer = ibot.answerUnaddressedQuestions()
+ try:
+ ibot.snarfUnaddressedDefinitions.setValue(True)
+ ibot.answerUnaddressedQuestions.setValue(True)
+ self.assertSnarfNoResponse('bars are dirty', 2)
+ self.assertSnarfRegexp('bars?', 'bars.*are.*dirty')
+ self.assertSnarfNoResponse('bars are not dirty', 2)
+ self.assertSnarfNotRegexp('bars?', 'not')
+ finally:
+ ibot.snarfUnaddressedDefinitions.setValue(learn)
+ ibot.answerUnaddressedQuestions.setValue(answer)
- def testIsResponses(self):
- self.assertNoResponse('foo is bar', 2)
- self.assertRegexp('foo?', 'foo.*is.*bar')
- self.assertNoResponse('when is foo?', 2)
- self.assertNoResponse('why is foo?', 2)
- self.assertNoResponse('why foo?', 2)
- self.assertNoResponse('when is foo?', 2)
+ def testIsResponses(self):
+ ibot = conf.supybot.plugins.Infobot
+ learn = ibot.snarfUnaddressedDefinitions()
+ answer = ibot.answerUnaddressedQuestions()
+ try:
+ ibot.snarfUnaddressedDefinitions.setValue(True)
+ ibot.answerUnaddressedQuestions.setValue(True)
+ self.assertSnarfNoResponse('foo is bar', 2)
+ self.assertSnarfRegexp('foo?', 'foo.*is.*bar')
+ self.assertSnarfNoResponse('when is foo?', 2)
+ self.assertSnarfNoResponse('why is foo?', 2)
+ self.assertSnarfNoResponse('why foo?', 2)
+ self.assertSnarfNoResponse('when is foo?', 2)
+ finally:
+ ibot.snarfUnaddressedDefinitions.setValue(learn)
+ ibot.answerUnaddressedQuestions.setValue(answer)
+
+ def testAnswerUnaddressed(self):
+ ibot = conf.supybot.plugins.Infobot
+ answer = ibot.answerUnaddressedQuestions()
+ try:
+ ibot.answerUnaddressedQuestions.setValue(True)
+ self.assertNotError('foo is bar')
+ self.assertSnarfRegexp('foo?', 'bar')
+ ibot.answerUnaddressedQuestions.setValue(False)
+ self.assertSnarfNoResponse('foo?', 2)
+ finally:
+ ibot.answerUnaddressedQuestions.setValue(answer)
# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78:
diff --git a/test/test_Karma.py b/test/test_Karma.py
index 2bb26daeb..89c9e780d 100644
--- a/test/test_Karma.py
+++ b/test/test_Karma.py
@@ -43,7 +43,7 @@ if sqlite is not None:
plugins = ('Karma',)
def testKarma(self):
self.assertError('karma')
- self.assertRegexp('karma foobar', 'no karma')
+ self.assertRegexp('karma foobar', 'neutral karma')
try:
conf.replyWhenNotCommand = True
self.assertNoResponse('foobar++', 2)
@@ -139,7 +139,7 @@ if sqlite is not None:
conf.supybot.plugins.Karma.allowSelfRating.setValue(False)
self.assertNoResponse('%s++' % nick, 2)
self.assertResponse('karma %s' % nick,
- '%s has no karma.' % nick)
+ '%s has neutral karma.' % nick)
conf.supybot.plugins.Karma.allowSelfRating.setValue(True)
self.assertNoResponse('%s++' % nick, 2)
self.assertRegexp('karma %s' % nick,
@@ -177,7 +177,7 @@ if sqlite is not None:
def testIncreaseKarmaWithNickNotCallingInvalidCommand(self):
- self.assertNoResponse('%s: foo++' % self.irc.nick, 3)
+ self.assertSnarfNoResponse('%s: foo++' % self.irc.nick, 3)
# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78:
diff --git a/test/test_Misc.py b/test/test_Misc.py
index 19f3b0d5d..96028daf7 100644
--- a/test/test_Misc.py
+++ b/test/test_Misc.py
@@ -52,12 +52,16 @@ class MiscTestCase(ChannelPluginTestCase):
if network:
def testNotReplyWhenRegexpsMatch(self):
try:
- original = str(conf.supybot.reply.whenNotCommand)
- conf.supybot.reply.whenNotCommand.set('True')
+ orig = conf.supybot.reply.whenNotCommand()
+ gk = conf.supybot.plugins.Gameknot.gameSnarfer()
+ conf.supybot.reply.whenNotCommand.setValue(True)
+ conf.supybot.plugins.Gameknot.gameSnarfer.setValue(True)
self.prefix = 'somethingElse!user@host.domain.tld'
- self.assertNotError('http://gameknot.com/chess.pl?bd=1019508')
+ self.assertSnarfNotError(
+ 'http://gameknot.com/chess.pl?bd=1019508')
finally:
- conf.supybot.reply.whenNotCommand.set(original)
+ conf.supybot.reply.whenNotCommand.setValue(orig)
+ conf.supybot.plugins.Gameknot.gameSnarfer.setValue(gk)
def testNotReplyWhenNotCanonicalName(self):
try:
@@ -130,11 +134,9 @@ class MiscTestCase(ChannelPluginTestCase):
def testTell(self):
m = self.getMsg('tell foo [plugin tell]')
- self.failUnless(m.args[0] == 'foo')
- self.failUnless('Misc' in m.args[1])
+ self.failUnless('let you do' in m.args[1])
m = self.getMsg('tell #foo [plugin tell]')
- self.failUnless(m.args[0] == '#foo')
- self.failUnless('Misc' in m.args[1])
+ self.failUnless('No need for' in m.args[1])
m = self.getMsg('tell me you love me')
self.failUnless(m.args[0] == self.nick)
@@ -162,7 +164,7 @@ class MiscTestCase(ChannelPluginTestCase):
self.assertNotRegexp('more', 'more')
def testInvalidCommand(self):
- self.assertResponse('echo []', '[]')
+ self.assertError('echo []')
def testMoreIsCaseInsensitive(self):
self.assertNotError('echo %s' % ('abc'*2000))
diff --git a/test/test_Sourceforge.py b/test/test_Sourceforge.py
index 6c15a4329..ed85be528 100644
--- a/test/test_Sourceforge.py
+++ b/test/test_Sourceforge.py
@@ -123,49 +123,48 @@ if network:
try:
original = conf.supybot.plugins.Sourceforge.trackerSnarfer()
conf.supybot.plugins.Sourceforge.trackerSnarfer.setValue(True)
- self.assertRegexp('http://sourceforge.net/tracker/index.php?'
- 'func=detail&aid=589953&group_id=58965&'
- 'atid=489447',
- s)
- self.assertRegexp('http://sourceforge.net/tracker/index.php?'
- 'func=detail&aid=712761&group_id=58965&'
- 'atid=489450',
- s)
- self.assertRegexp('http://sourceforge.net/tracker/index.php?'
- 'func=detail&aid=540223&group_id=235&'
- 'atid=300235',
- s)
- self.assertRegexp('http://sourceforge.net/tracker/index.php?'
- 'func=detail&aid=561547&group_id=235&'
- 'atid=200235',
- s)
- self.assertRegexp('http://sourceforge.net/tracker/index.php?'
- 'func=detail&aid=400942&group_id=235&'
- 'atid=390395',
- s)
+ self.assertSnarfRegexp('http://sourceforge.net/tracker/index.'
+ 'php?func=detail&aid=589953&group_id='
+ '58965&atid=489447',
+ s)
+ self.assertSnarfRegexp('http://sourceforge.net/tracker/index.'
+ 'php?func=detail&aid=712761&group_id='
+ '58965&atid=489450',
+ s)
+ self.assertSnarfRegexp('http://sourceforge.net/tracker/index.'
+ 'php?func=detail&aid=540223&group_id='
+ '235&atid=300235',
+ s)
+ self.assertSnarfRegexp('http://sourceforge.net/tracker/index.'
+ 'php?func=detail&aid=561547&group_id='
+ '235&atid=200235',
+ s)
+ self.assertSnarfRegexp('http://sourceforge.net/tracker/index.'
+ 'php?func=detail&aid=400942&group_id='
+ '235&atid=390395',
+ s)
# test that it works without index.php
- self.assertNotError('http://sourceforge.net/tracker/?'
- 'func=detail&aid=540223&group_id=235&'
- 'atid=300235')
+ self.assertSnarfNotError('http://sourceforge.net/tracker/?'
+ 'func=detail&aid=540223&group_id=235&'
+ 'atid=300235')
# test that it works with www
- self.assertNotError('http://www.sourceforge.net/tracker/index.php?'
- 'func=detail&aid=540223&group_id=235&'
- 'atid=300235')
+ self.assertSnarfNotError('http://www.sourceforge.net/tracker/'
+ 'index.php?func=detail&aid=540223&'
+ 'group_id=235&atid=300235')
# test that it works with www and without index.php
- self.assertNotError('http://www.sourceforge.net/tracker/?'
- 'func=detail&aid=540223&group_id=235&'
- 'atid=300235')
+ self.assertSnarfNotError('http://www.sourceforge.net/tracker/?'
+ 'func=detail&aid=540223&group_id=235&'
+ 'atid=300235')
# test that it works with sf.net
- self.assertNotError('http://sf.net/tracker/?'
- 'func=detail&aid=540223&group_id=235&'
- 'atid=300235')
+ self.assertSnarfNotError('http://sf.net/tracker/?func=detail&'
+ 'aid=540223&group_id=235&atid=300235')
# test that it works
- self.assertNotError('https://sourceforge.net/tracker/?'
- 'func=detail&atid=105470&aid=827260&'
- 'group_id=5470')
- self.assertNoResponse('https://sourceforge.net/tracker/?'
- 'group_id=58965&atid=489447')
+ self.assertSnarfNotError('https://sourceforge.net/tracker/?'
+ 'func=detail&atid=105470&aid=827260&'
+ 'group_id=5470')
+ self.assertSnarfNoResponse('https://sourceforge.net/tracker/?'
+ 'group_id=58965&atid=489447')
finally:
conf.supybot.plugins.Sourceforge.trackerSnarfer.setValue(
original)
diff --git a/test/test_Topic.py b/test/test_Topic.py
index 731f765e4..500b31758 100644
--- a/test/test_Topic.py
+++ b/test/test_Topic.py
@@ -87,7 +87,7 @@ class TopicTestCase(ChannelPluginTestCase, PluginDocumentation):
m = self.getMsg('topic add bar')
self.failUnless('<==>' in m.args[1])
finally:
- default = conf.supybot.plugins.Topic.separator.default
+ default = conf.supybot.plugins.Topic.separator.default()
conf.supybot.plugins.Topic.separator.setValue(default)
def testReorder(self):
diff --git a/test/test_URL.py b/test/test_URL.py
index 83b5b6c31..cc86e14ad 100644
--- a/test/test_URL.py
+++ b/test/test_URL.py
@@ -51,19 +51,12 @@ http://www.sourcereview.net/forum/index.php?
http://www.joelonsoftware.com/articles/BuildingCommunitieswithSo.html
http://gameknot.com/stats.pl?ddipaolo
http://slashdot.org/slashdot.rss
-http://slashdot.org/slashdot.rss
-http://gameknot.com/chess.pl?bd=1038943
-http://gameknot.com/chess.pl?bd=1038943
http://gameknot.com/chess.pl?bd=1038943
http://codecentral.sleepwalkers.org/
http://gameknot.com/chess.pl?bd=1037471&r=327
-http://gameknot.com/chess.pl?bd=1037471&r=327
-http://gameknot.com/chess.pl?bd=1037471&r=327
-http://gameknot.com/chess.pl?bd=1037471&r=327
http://dhcp065-024-059-168.columbus.rr.com:81/~jfincher/angryman.py
https://sourceforge.net/projects/pyrelaychecker/
http://gameknot.com/tsignup.pl
-http://lambda.weblogs.com/xml/rss.xml
""".strip().splitlines()
class URLTestCase(ChannelPluginTestCase, PluginDocumentation):
@@ -81,12 +74,12 @@ class URLTestCase(ChannelPluginTestCase, PluginDocumentation):
counter += 1
self.assertRegexp('url stats', str(counter))
self.assertRegexp('url last', re.escape(urls[-1]))
- self.assertRegexp('url last --proto https', re.escape(urls[-3]))
+ self.assertRegexp('url last --proto https', re.escape(urls[-2]))
self.assertRegexp('url last --with gameknot.com',
- re.escape(urls[-2]))
- self.assertRegexp('url last --with dhcp', re.escape(urls[-4]))
+ re.escape(urls[-1]))
+ self.assertRegexp('url last --with dhcp', re.escape(urls[-3]))
self.assertRegexp('url last --from alsdkjf', '^No')
- self.assertNotError('url random')
+ #self.assertNotError('url random')
def testDefaultNotFancy(self):
self.feedMsg(urls[0])
@@ -97,11 +90,11 @@ class URLTestCase(ChannelPluginTestCase, PluginDocumentation):
self.assertNotRegexp('url last', '\\x01')
def testNonSnarfingRegexpConfigurable(self):
- self.assertNoResponse('http://foo.bar.baz/', 2)
+ self.assertSnarfNoResponse('http://foo.bar.baz/', 2)
self.assertResponse('url last', 'http://foo.bar.baz/')
try:
- conf.supybot.plugins.URL.nonSnarfingRegexp.set('m/biff/i')
- self.assertNoResponse('http://biff.bar.baz/', 2)
+ conf.supybot.plugins.URL.nonSnarfingRegexp.set('m/biff/')
+ self.assertSnarfNoResponse('http://biff.bar.baz/', 2)
self.assertResponse('url last', 'http://foo.bar.baz/')
finally:
conf.supybot.plugins.URL.nonSnarfingRegexp.set('')
@@ -125,10 +118,11 @@ class URLTestCase(ChannelPluginTestCase, PluginDocumentation):
def testTinysnarf(self):
try:
conf.supybot.plugins.URL.tinyurlSnarfer.setValue(True)
- self.assertRegexp('http://sourceforge.net/tracker/?'
- 'func=add&group_id=58965&atid=489447',
- r'http://tinyurl.com/rqac.* \(at')
- self.assertRegexp(
+ self.assertSnarfRegexp(
+ 'http://sourceforge.net/tracker/?func=add&'
+ 'group_id=58965&atid=489447',
+ r'http://tinyurl.com/rqac.* \(at')
+ self.assertSnarfRegexp(
'http://www.urbandictionary.com/define.php?'
'term=all+your+base+are+belong+to+us',
r'http://tinyurl.com/u479.* \(at')
@@ -138,9 +132,9 @@ class URLTestCase(ChannelPluginTestCase, PluginDocumentation):
def testTitleSnarfer(self):
try:
conf.supybot.plugins.URL.titleSnarfer.setValue(True)
- self.assertResponse('http://microsoft.com/',
- 'Title: Microsoft Corporation'
- ' (at microsoft.com)')
+ self.assertSnarfResponse('http://microsoft.com/',
+ 'Title: Microsoft Corporation'
+ ' (at microsoft.com)')
finally:
conf.supybot.plugins.URL.titleSnarfer.setValue(False)
@@ -152,16 +146,16 @@ class URLTestCase(ChannelPluginTestCase, PluginDocumentation):
conf.supybot.plugins.URL.nonSnarfingRegexp.set('m/sf/')
try:
conf.supybot.plugins.URL.tinyurlSnarfer.setValue(True)
- self.assertNoResponse('http://sf.net/', 2)
- self.assertResponse('http://www.sourceforge.net/',
- 'http://tinyurl.com/2cnkf')
+ self.assertSnarfNoResponse('http://sf.net/', 2)
+ self.assertSnarfResponse('http://www.sourceforge.net/',
+ 'http://tinyurl.com/2cnkf')
finally:
conf.supybot.plugins.URL.tinyurlSnarfer.setValue(tiny)
try:
conf.supybot.plugins.URL.titleSnarfer.setValue(True)
- self.assertNoResponse('http://sf.net/', 2)
- self.assertRegexp('http://www.sourceforge.net/',
- r'Sourceforge\.net')
+ self.assertSnarfNoResponse('http://sf.net/', 2)
+ self.assertSnarfRegexp('http://www.sourceforge.net/',
+ r'Sourceforge\.net')
finally:
conf.supybot.plugins.URL.titleSnarfer.setValue(title)
finally:
diff --git a/test/test_User.py b/test/test_User.py
index f6fd39d4a..2eaf2366d 100644
--- a/test/test_User.py
+++ b/test/test_User.py
@@ -86,13 +86,18 @@ class UserTestCase(PluginTestCase, PluginDocumentation):
self.assertNotError('changename foo baz')
def testSetpassword(self):
- self.prefix = self.prefix1
- self.assertNotError('register foo bar')
- self.assertEqual(ircdb.users.getUser(self.prefix).password, 'bar')
- self.assertNotError('setpassword foo bar baz')
- self.assertEqual(ircdb.users.getUser(self.prefix).password, 'baz')
- self.assertNotError('setpassword --hashed foo baz biff')
- self.assertNotEqual(ircdb.users.getUser(self.prefix).password, 'biff')
+ orig = conf.supybot.databases.users.hash()
+ try:
+ conf.supybot.databases.users.hash.setValue(False)
+ self.prefix = self.prefix1
+ self.assertNotError('register foo bar')
+ self.assertEqual(ircdb.users.getUser(self.prefix).password, 'bar')
+ self.assertNotError('setpassword foo bar baz')
+ self.assertEqual(ircdb.users.getUser(self.prefix).password, 'baz')
+ self.assertNotError('setpassword --hashed foo baz biff')
+ self.assertNotEqual(ircdb.users.getUser(self.prefix).password, 'biff')
+ finally:
+ conf.supybot.databases.users.hash.setValue(orig)
# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78:
diff --git a/test/test_Utilities.py b/test/test_Utilities.py
index 6e9df5e23..ef6fee289 100644
--- a/test/test_Utilities.py
+++ b/test/test_Utilities.py
@@ -34,8 +34,8 @@ from testsupport import *
class UtilitiesTestCase(PluginTestCase):
plugins = ('Utilities', 'Status')
def testIgnore(self):
- self.assertNoResponse('ignore foo bar baz', 1)
- self.assertError('ignore [re m/foo bar]')
+ self.assertNoResponse('utilities ignore foo bar baz', 1)
+ self.assertError('utilities ignore [re m/foo bar]')
def testSuccess(self):
self.assertNotError('success 1')
diff --git a/test/test_Words.py b/test/test_Words.py
index acc361ed6..606af8c90 100644
--- a/test/test_Words.py
+++ b/test/test_Words.py
@@ -33,29 +33,30 @@ from testsupport import *
import supybot.utils as utils
-try:
- import sqlite
-except ImportError:
- sqlite = None
+class WordsTestCase(ChannelPluginTestCase, PluginDocumentation):
+ plugins = ('Words',)
+ def setUp(self):
+ PluginTestCase.setUp(self)
+ # Add some words to for us to use
+ fd = file('%s/words' % conf.supybot.directories.data(), 'w')
+ fd.writelines(['hello'])
+ fd.close()
-if sqlite is not None:
- class WordsTestCase(ChannelPluginTestCase, PluginDocumentation):
- plugins = ('Words',)
- # Putting in a comment to make this different.
- def testAddWord(self):
- words = ('hello', 'world', 'mother', 'python')
- for word in words:
- self.assertNotError('add %s' % word)
+ # Putting in a comment to make this different.
+ #def testAddWord(self):
+ # words = ('hello', 'world', 'mother', 'python')
+ # for word in words:
+ # self.assertNotError('add %s' % word)
- def testHangman(self):
- self.assertNotError('add hello')
- self.assertError('guess j')
- self.assertError('letters')
- self.assertNotError('hangman')
- self.assertNotError('guess hello')
- self.assertNotError('hangman')
- self.assertNotError('guess j')
- self.assertNotError('letters')
+ def testHangman(self):
+ #self.assertNotError('add hello')
+ self.assertError('guess j')
+ self.assertError('letters')
+ self.assertNotError('hangman')
+ self.assertNotError('guess hello')
+ self.assertNotError('hangman')
+ self.assertNotError('guess j')
+ self.assertNotError('letters')
# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78:
diff --git a/test/test_callbacks.py b/test/test_callbacks.py
index 24326908f..9f7a20549 100644
--- a/test/test_callbacks.py
+++ b/test/test_callbacks.py
@@ -229,7 +229,7 @@ class PrivmsgTestCase(ChannelPluginTestCase):
conf.allowEval = True
timeout = 2
def testEmptySquareBrackets(self):
- self.assertResponse('echo []', '[]')
+ self.assertError('echo []')
def testSimpleReply(self):
self.assertResponse("eval irc.reply('foo')", 'foo')
diff --git a/test/test_ircmsgs.py b/test/test_ircmsgs.py
index 539674a5f..b297c5eb7 100644
--- a/test/test_ircmsgs.py
+++ b/test/test_ircmsgs.py
@@ -130,8 +130,8 @@ class FunctionsTestCase(SupyTestCase):
self.failUnless(ircmsgs.isAction(msg))
def testIsCtcp(self):
- self.failUnless(ircutils.isCtcp(ircmsgs.privmsg('foo',
- '\x01VERSION\x01')))
+ self.failUnless(ircmsgs.isCtcp(ircmsgs.privmsg('foo',
+ '\x01VERSION\x01')))
def testIsActionFalseWhenNoSpaces(self):
msg = ircmsgs.IrcMsg('PRIVMSG #foo :\x01ACTIONfoobar\x01')
diff --git a/test/testsupport.py b/test/testsupport.py
index 9f4c27cc7..deaf6afe7 100644
--- a/test/testsupport.py
+++ b/test/testsupport.py
@@ -39,6 +39,7 @@ import re
import sys
import time
started = time.time()
+import shutil
import unittest
import supybot.log as log
@@ -125,22 +126,19 @@ class PluginTestCase(SupyTestCase):
# Set conf variables appropriately.
conf.supybot.prefixChars.setValue('@')
conf.supybot.reply.detailedErrors.setValue(True)
- conf.supybot.reply.whenNotCommand.setValue(False)
+ conf.supybot.reply.whenNotCommand.setValue(True)
self.myVerbose = world.myVerbose
+ def rmFiles(dir):
+ for filename in os.listdir(dir):
+ file = os.path.join(dir, filename)
+ if os.path.isfile(file):
+ os.remove(file)
+ else:
+ shutil.rmtree(file)
if self.cleanConfDir:
- confDir = conf.supybot.directories.conf()
- for (dirpath, dirnames, filenames) in os.walk(confDir):
- for filename in filenames:
- filename = os.path.join(dirpath, filename)
- if os.path.isfile(filename):
- os.remove(filename)
+ rmFiles(conf.supybot.directories.conf())
if self.cleanDataDir:
- dataDir = conf.supybot.directories.data()
- for (dirpath, dirnames, filenames) in os.walk(dataDir):
- for filename in filenames:
- filename = os.path.join(dirpath, filename)
- if os.path.isfile(filename):
- os.remove(filename)
+ rmFiles(conf.supybot.directories.data())
ircdb.users.reload()
ircdb.ignores.reload()
ircdb.channels.reload()
@@ -178,7 +176,8 @@ class PluginTestCase(SupyTestCase):
ircdb.channels.close()
gc.collect()
- def _feedMsg(self, query, timeout=None, to=None, frm=None):
+ def _feedMsg(self, query, timeout=None, to=None, frm=None,
+ usePrefixChar=True):
if to is None:
to = self.irc.nick
if frm is None:
@@ -187,6 +186,8 @@ class PluginTestCase(SupyTestCase):
timeout = self.timeout
if self.myVerbose:
print # Extra newline, so it's pretty.
+ if not usePrefixChar and query[0] in conf.supybot.prefixChars():
+ query = query[1:]
msg = ircmsgs.privmsg(to, query, prefix=frm)
if self.myVerbose:
print 'Feeding: %r' % msg
@@ -225,6 +226,9 @@ class PluginTestCase(SupyTestCase):
'%r did not error: %s' % (query, m.args[1]))
return m
+ def assertSnarfError(self, query, **kwargs):
+ return self.assertError(query, usePrefixChar=False, **kwargs)
+
def assertNotError(self, query, **kwargs):
m = self._feedMsg(query, **kwargs)
if m is None:
@@ -235,6 +239,9 @@ class PluginTestCase(SupyTestCase):
'%r returned the help string.' % query)
return m
+ def assertSnarfNotError(self, query, **kwargs):
+ return self.assertNotError(query, usePrefixChar=False, **kwargs)
+
def assertHelp(self, query, **kwargs):
m = self._feedMsg(query, **kwargs)
if m is None:
@@ -248,6 +255,10 @@ class PluginTestCase(SupyTestCase):
self.failIf(m, 'Unexpected response: %r' % m)
return m
+ def assertSnarfNoResponse(self, query, timeout=0, **kwargs):
+ return self.assertNoResponse(query, timeout=timeout,
+ usePrefixChar=False, **kwargs)
+
def assertResponse(self, query, expectedResponse, **kwargs):
m = self._feedMsg(query, **kwargs)
if m is None:
@@ -256,6 +267,10 @@ class PluginTestCase(SupyTestCase):
'%r != %r' % (expectedResponse, m.args[1]))
return m
+ def assertSnarfResponse(self, query, expectedResponse, **kwargs):
+ return self.assertResponse(query, expectedResponse,
+ usePrefixChar=False, **kwargs)
+
def assertRegexp(self, query, regexp, flags=re.I, **kwargs):
m = self._feedMsg(query, **kwargs)
if m is None:
@@ -264,6 +279,10 @@ class PluginTestCase(SupyTestCase):
'%r does not match %r' % (m.args[1], regexp))
return m
+ def assertSnarfRegexp(self, query, regexp, flags=re.I, **kwargs):
+ return self.assertRegexp(query, regexp, flags=re.I,
+ usePrefixChar=False, **kwargs)
+
def assertNotRegexp(self, query, regexp, flags=re.I, **kwargs):
m = self._feedMsg(query, **kwargs)
if m is None:
@@ -272,6 +291,10 @@ class PluginTestCase(SupyTestCase):
'%r matched %r' % (m.args[1], regexp))
return m
+ def assertSnarfNotRegexp(self, query, regexp, flags=re.I, **kwargs):
+ return self.assertNotRegexp(query, regexp, flags=re.I,
+ usePrefixChar=False, **kwargs)
+
def assertAction(self, query, expectedResponse=None, **kwargs):
m = self._feedMsg(query, **kwargs)
if m is None:
@@ -281,6 +304,10 @@ class PluginTestCase(SupyTestCase):
self.assertEqual(ircmsgs.unAction(m), expectedResponse)
return m
+ def assertSnarfAction(self, query, expectedResponse=None, **kwargs):
+ return self.assertAction(query, expectedResponse=None,
+ usePrefixChar=False, **kwargs)
+
def assertActionRegexp(self, query, regexp, flags=re.I, **kwargs):
m = self._feedMsg(query, **kwargs)
if m is None:
@@ -290,6 +317,10 @@ class PluginTestCase(SupyTestCase):
self.failUnless(re.search(regexp, s, flags),
'%r does not match %r' % (s, regexp))
+ def assertSnarfActionRegexp(self, query, regexp, flags=re.I, **kwargs):
+ return self.assertActionRegexp(query, regexp, flags=re.I,
+ usePrefixChar=False, **kwargs)
+
def testDocumentation(self):
if self.__class__ in (PluginTestCase, ChannelPluginTestCase):
return
@@ -323,7 +354,8 @@ class ChannelPluginTestCase(PluginTestCase):
self.failIf(m is None, 'No message back from joining channel.')
self.assertEqual(m.command, 'WHO')
- def _feedMsg(self, query, timeout=None, to=None, frm=None):
+ def _feedMsg(self, query, timeout=None, to=None, frm=None,
+ usePrefixChar=True):
if to is None:
to = self.channel
if frm is None:
@@ -332,7 +364,7 @@ class ChannelPluginTestCase(PluginTestCase):
timeout = self.timeout
if self.myVerbose:
print # Newline, just like PluginTestCase.
- if query[0] not in conf.supybot.prefixChars():
+ if query[0] not in conf.supybot.prefixChars() and usePrefixChar:
query = conf.supybot.prefixChars()[0] + query
msg = ircmsgs.privmsg(to, query, prefix=frm)
if self.myVerbose:
@@ -376,8 +408,5 @@ class PluginDocumentation:
pass # This is old stuff, it should be removed some day.
-
-
-
# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78: