mirror of
https://github.com/Mikaela/Limnoria.git
synced 2024-11-27 05:09:23 +01:00
Naming scheme change.
This commit is contained in:
parent
984e29e9c0
commit
06b3929a12
@ -1,62 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
###
|
||||
# Copyright (c) 2002, Jeremiah Fincher
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions, and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions, and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
# * Neither the name of the author of this software nor the name of
|
||||
# contributors to this software may be used to endorse or promote products
|
||||
# derived from this software without specific prior written consent.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
###
|
||||
|
||||
from test import *
|
||||
|
||||
import Alias
|
||||
|
||||
|
||||
class FunctionsTest(unittest.TestCase):
|
||||
def testFindAliasCommand(self):
|
||||
s = 'command'
|
||||
self.failIf(Alias.findAliasCommand(s, ''))
|
||||
self.failIf(Alias.findAliasCommand(s, 'foo'))
|
||||
self.failIf(Alias.findAliasCommand(s, 'foo bar [ baz]'))
|
||||
self.failIf(Alias.findAliasCommand(s, 'foo bar [baz]'))
|
||||
self.failUnless(Alias.findAliasCommand(s, s))
|
||||
self.failUnless(Alias.findAliasCommand(s, ' %s' % s))
|
||||
self.failUnless(Alias.findAliasCommand(s, '[%s]' % s))
|
||||
self.failUnless(Alias.findAliasCommand(s, '[ %s]' % s))
|
||||
self.failUnless(Alias.findAliasCommand(s, 'foo bar [%s]' % s))
|
||||
self.failUnless(Alias.findAliasCommand(s, 'foo bar [ %s]' % s))
|
||||
|
||||
def testFindBiggestDollar(self):
|
||||
self.assertEqual(Alias.findBiggestDollar(''), None)
|
||||
self.assertEqual(Alias.findBiggestDollar('foo'), None)
|
||||
self.assertEqual(Alias.findBiggestDollar('$0'), 0)
|
||||
self.assertEqual(Alias.findBiggestDollar('$1'), 1)
|
||||
self.assertEqual(Alias.findBiggestDollar('$2'), 2)
|
||||
self.assertEqual(Alias.findBiggestDollar('$3'), 3)
|
||||
self.assertEqual(Alias.findBiggestDollar('foo bar $1'), 1)
|
||||
self.assertEqual(Alias.findBiggestDollar('foo $2 $1'), 2)
|
||||
self.assertEqual(Alias.findBiggestDollar('foo $0 $1'), 1)
|
||||
self.assertEqual(Alias.findBiggestDollar('foo $1 $3'), 3)
|
||||
self.assertEqual(Alias.findBiggestDollar('$10 bar $1'), 10)
|
@ -1,108 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
###
|
||||
# Copyright (c) 2002, Jeremiah Fincher
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions, and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions, and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
# * Neither the name of the author of this software nor the name of
|
||||
# contributors to this software may be used to endorse or promote products
|
||||
# derived from this software without specific prior written consent.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
###
|
||||
|
||||
from test import *
|
||||
|
||||
import conf
|
||||
import ircmsgs
|
||||
import callbacks
|
||||
|
||||
tokenize = callbacks.tokenize
|
||||
|
||||
|
||||
class TokenizerTestCase(unittest.TestCase):
|
||||
def testEmpty(self):
|
||||
self.assertEqual(tokenize(''), [])
|
||||
|
||||
def testSingleWord(self):
|
||||
self.assertEqual(tokenize('foo'), ['foo'])
|
||||
|
||||
def testMultipleSimpleWords(self):
|
||||
words = 'one two three four five six seven eight'.split()
|
||||
for i in range(len(words)):
|
||||
self.assertEqual(tokenize(' '.join(words[:i])), words[:i])
|
||||
|
||||
def testSingleQuotesNotQuotes(self):
|
||||
self.assertEqual(tokenize("it's"), ["it's"])
|
||||
|
||||
def testQuotedWords(self):
|
||||
self.assertEqual(tokenize('"foo bar"'), ['foo bar'])
|
||||
self.assertEqual(tokenize('""'), [''])
|
||||
self.assertEqual(tokenize('foo "" bar'), ['foo', '', 'bar'])
|
||||
self.assertEqual(tokenize('foo "bar baz" quux'),
|
||||
['foo', 'bar baz', 'quux'])
|
||||
|
||||
def testNesting(self):
|
||||
self.assertEqual(tokenize('[]'), [[]])
|
||||
self.assertEqual(tokenize('[foo]'), [['foo']])
|
||||
self.assertEqual(tokenize('foo [bar]'), ['foo', ['bar']])
|
||||
self.assertEqual(tokenize('foo bar [baz quux]'),
|
||||
['foo', 'bar', ['baz', 'quux']])
|
||||
|
||||
def testError(self):
|
||||
self.assertRaises(SyntaxError, tokenize, '[foo') #]
|
||||
self.assertRaises(SyntaxError, tokenize, '"foo') #"
|
||||
|
||||
|
||||
class FunctionsTestCase(unittest.TestCase):
|
||||
def testCanonicalName(self):
|
||||
self.assertEqual('foo', callbacks.canonicalName('foo'))
|
||||
self.assertEqual('foobar', callbacks.canonicalName('foo-bar'))
|
||||
self.assertEqual('foobar', callbacks.canonicalName('foo_bar'))
|
||||
self.assertEqual('foobar', callbacks.canonicalName('FOO-bar'))
|
||||
self.assertEqual('foobar', callbacks.canonicalName('FOOBAR'))
|
||||
self.assertEqual('foobar', callbacks.canonicalName('foo___bar'))
|
||||
self.assertEqual('foobar', callbacks.canonicalName('_f_o_o-b_a_r_'))
|
||||
|
||||
def testAddressed(self):
|
||||
oldprefixchars = conf.prefixChars
|
||||
nick = 'supybot'
|
||||
conf.prefixChars = '~!@'
|
||||
inChannel = ['~foo', '@foo', '!foo',
|
||||
'%s: foo' % nick, '%s foo' % nick]
|
||||
inChannel = [ircmsgs.privmsg('#foo', s) for s in inChannel]
|
||||
badmsg = ircmsgs.privmsg('#foo', '%s:foo' % nick)
|
||||
self.failIf(callbacks.addressed(nick, badmsg))
|
||||
for msg in inChannel:
|
||||
self.assertEqual('foo', callbacks.addressed(nick, msg), msg)
|
||||
msg = ircmsgs.privmsg(nick, 'foo')
|
||||
self.assertEqual('foo', callbacks.addressed(nick, msg))
|
||||
conf.prefixChars = oldprefixchars
|
||||
|
||||
def testReply(self):
|
||||
prefix = 'foo!bar@baz'
|
||||
channelMsg = ircmsgs.privmsg('#foo', 'bar baz', prefix=prefix)
|
||||
nonChannelMsg = ircmsgs.privmsg('supybot', 'bar baz', prefix=prefix)
|
||||
self.assertEqual(ircmsgs.privmsg(nonChannelMsg.nick, 'foo'),
|
||||
callbacks.reply(nonChannelMsg, 'foo'))
|
||||
self.assertEqual(ircmsgs.privmsg(channelMsg.args[0],
|
||||
'%s: foo' % channelMsg.nick),
|
||||
callbacks.reply(channelMsg, 'foo'))
|
281
test/fix_test.py
281
test/fix_test.py
@ -1,281 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
###
|
||||
# Copyright (c) 2002, Jeremiah Fincher
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions, and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions, and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
# * Neither the name of the author of this software nor the name of
|
||||
# contributors to this software may be used to endorse or promote products
|
||||
# derived from this software without specific prior written consent.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
###
|
||||
|
||||
from __future__ import generators
|
||||
|
||||
from test import *
|
||||
|
||||
import pickle
|
||||
|
||||
class QueueTest(unittest.TestCase):
|
||||
def testGetitem(self):
|
||||
q = queue()
|
||||
n = 10
|
||||
for i in xrange(n):
|
||||
q.enqueue(i)
|
||||
for i in xrange(n):
|
||||
self.assertEqual(q[i], i)
|
||||
for i in xrange(n, 0, -1):
|
||||
self.assertEqual(q[-i], n-i)
|
||||
self.assertRaises(IndexError, q.__getitem__, -(n+1))
|
||||
self.assertRaises(IndexError, q.__getitem__, n)
|
||||
#self.assertEqual(q[3:7], queue([3, 4, 5, 6]))
|
||||
|
||||
def testSetitem(self):
|
||||
q1 = queue()
|
||||
for i in xrange(10):
|
||||
q1.enqueue(i)
|
||||
q2 = eval(repr(q1))
|
||||
for (i, elt) in enumerate(q2):
|
||||
q2[i] = elt*2
|
||||
self.assertEqual([x*2 for x in q1], list(q2))
|
||||
|
||||
def testNonzero(self):
|
||||
q = queue()
|
||||
self.failIf(q, 'queue not zero after initialization')
|
||||
q.enqueue(1)
|
||||
self.failUnless(q, 'queue zero after adding element')
|
||||
q.dequeue()
|
||||
self.failIf(q, 'queue not zero after dequeue of only element')
|
||||
|
||||
def testLen(self):
|
||||
q = queue()
|
||||
self.assertEqual(0, len(q), 'queue len not 0 after initialization')
|
||||
q.enqueue(1)
|
||||
self.assertEqual(1, len(q), 'queue len not 1 after enqueue')
|
||||
q.enqueue(2)
|
||||
self.assertEqual(2, len(q), 'queue len not 2 after enqueue')
|
||||
q.dequeue()
|
||||
self.assertEqual(1, len(q), 'queue len not 1 after dequeue')
|
||||
q.dequeue()
|
||||
self.assertEqual(0, len(q), 'queue len not 0 after dequeue')
|
||||
for i in range(10):
|
||||
L = range(i)
|
||||
q = queue(L)
|
||||
self.assertEqual(len(q), i)
|
||||
|
||||
def testEq(self):
|
||||
q1 = queue()
|
||||
q2 = queue()
|
||||
self.failUnless(q1 == q1, 'queue not equal to itself')
|
||||
self.failUnless(q2 == q2, 'queue not equal to itself')
|
||||
self.failUnless(q1 == q2, 'initialized queues not equal')
|
||||
q1.enqueue(1)
|
||||
self.failUnless(q1 == q1, 'queue not equal to itself')
|
||||
self.failUnless(q2 == q2, 'queue not equal to itself')
|
||||
q2.enqueue(1)
|
||||
self.failUnless(q1 == q1, 'queue not equal to itself')
|
||||
self.failUnless(q2 == q2, 'queue not equal to itself')
|
||||
self.failUnless(q1 == q2, 'queues not equal after identical enqueue')
|
||||
q1.dequeue()
|
||||
self.failUnless(q1 == q1, 'queue not equal to itself')
|
||||
self.failUnless(q2 == q2, 'queue not equal to itself')
|
||||
self.failIf(q1 == q2, 'queues equal after one dequeue')
|
||||
q2.dequeue()
|
||||
self.failUnless(q1 == q2, 'queues not equal after both are dequeued')
|
||||
self.failUnless(q1 == q1, 'queue not equal to itself')
|
||||
self.failUnless(q2 == q2, 'queue not equal to itself')
|
||||
|
||||
def testInit(self):
|
||||
self.assertEqual(len(queue()), 0, 'queue len not 0 after init')
|
||||
q = queue()
|
||||
q.enqueue(1)
|
||||
q.enqueue(2)
|
||||
q.enqueue(3)
|
||||
self.assertEqual(queue((1, 2, 3)),q, 'init not equivalent to enqueues')
|
||||
q = queue((1, 2, 3))
|
||||
self.assertEqual(q.dequeue(), 1, 'values not returned in proper order')
|
||||
self.assertEqual(q.dequeue(), 2, 'values not returned in proper order')
|
||||
self.assertEqual(q.dequeue(), 3, 'values not returned in proper order')
|
||||
|
||||
def testRepr(self):
|
||||
q = queue()
|
||||
q.enqueue(1)
|
||||
self.assertEqual(q, eval(repr(q)), 'repr doesn\'t eval to same queue')
|
||||
q.enqueue('foo')
|
||||
self.assertEqual(q, eval(repr(q)), 'repr doesn\'t eval to same queue')
|
||||
q.enqueue(None)
|
||||
self.assertEqual(q, eval(repr(q)), 'repr doesn\'t eval to same queue')
|
||||
q.enqueue(1.0)
|
||||
self.assertEqual(q, eval(repr(q)), 'repr doesn\'t eval to same queue')
|
||||
q.enqueue([])
|
||||
self.assertEqual(q, eval(repr(q)), 'repr doesn\'t eval to same queue')
|
||||
q.enqueue(())
|
||||
self.assertEqual(q, eval(repr(q)), 'repr doesn\'t eval to same queue')
|
||||
q.enqueue([1])
|
||||
self.assertEqual(q, eval(repr(q)), 'repr doesn\'t eval to same queue')
|
||||
q.enqueue((1,))
|
||||
self.assertEqual(q, eval(repr(q)), 'repr doesn\'t eval to same queue')
|
||||
|
||||
def testEnqueueDequeue(self):
|
||||
q = queue()
|
||||
self.assertRaises(IndexError, q.dequeue)
|
||||
q.enqueue(1)
|
||||
self.assertEqual(q.dequeue(), 1,
|
||||
'first dequeue didn\'t return same as first enqueue')
|
||||
q.enqueue(1)
|
||||
q.enqueue(2)
|
||||
q.enqueue(3)
|
||||
self.assertEqual(q.dequeue(), 1)
|
||||
self.assertEqual(q.dequeue(), 2)
|
||||
self.assertEqual(q.dequeue(), 3)
|
||||
|
||||
def testPeek(self):
|
||||
q = queue()
|
||||
self.assertRaises(IndexError, q.peek)
|
||||
q.enqueue(1)
|
||||
self.assertEqual(q.peek(), 1, 'peek didn\'t return first enqueue')
|
||||
q.enqueue(2)
|
||||
self.assertEqual(q.peek(), 1, 'peek didn\'t return first enqueue')
|
||||
q.dequeue()
|
||||
self.assertEqual(q.peek(), 2, 'peek didn\'t return second enqueue')
|
||||
q.dequeue()
|
||||
self.assertRaises(IndexError, q.peek)
|
||||
|
||||
def testContains(self):
|
||||
q = queue()
|
||||
self.failIf(1 in q, 'empty queue cannot have elements')
|
||||
q.enqueue(1)
|
||||
self.failUnless(1 in q, 'recent enqueued element not in q')
|
||||
q.enqueue(2)
|
||||
self.failUnless(1 in q, 'original enqueued element not in q')
|
||||
self.failUnless(2 in q, 'second enqueued element not in q')
|
||||
q.dequeue()
|
||||
self.failIf(1 in q, 'dequeued element in q')
|
||||
self.failUnless(2 in q, 'not dequeued element not in q')
|
||||
q.dequeue()
|
||||
self.failIf(2 in q, 'dequeued element in q')
|
||||
|
||||
def testIter(self):
|
||||
q1 = queue((1, 2, 3))
|
||||
q2 = queue()
|
||||
for i in q1:
|
||||
q2.enqueue(i)
|
||||
self.assertEqual(q1, q2, 'iterate didn\'t return all elements')
|
||||
for _ in queue():
|
||||
self.fail('no elements should be in empty queue')
|
||||
|
||||
def testPickleCopy(self):
|
||||
q = queue(range(10))
|
||||
self.assertEqual(q, pickle.loads(pickle.dumps(q)))
|
||||
|
||||
|
||||
class MaxLengthQueueTestCase(unittest.TestCase):
|
||||
def testMaxLength(self):
|
||||
q = MaxLengthQueue(3)
|
||||
q.enqueue(1)
|
||||
self.assertEqual(len(q), 1)
|
||||
q.enqueue(2)
|
||||
self.assertEqual(len(q), 2)
|
||||
q.enqueue(3)
|
||||
self.assertEqual(len(q), 3)
|
||||
q.enqueue(4)
|
||||
self.assertEqual(len(q), 3)
|
||||
self.assertEqual(q.peek(), 2)
|
||||
q.enqueue(5)
|
||||
self.assertEqual(len(q), 3)
|
||||
self.assertEqual(q[0], 3)
|
||||
|
||||
class FunctionsTest(unittest.TestCase):
|
||||
def testCatch(self):
|
||||
def f():
|
||||
raise Exception
|
||||
catch(f)
|
||||
|
||||
def testReviter(self):
|
||||
L = range(10)
|
||||
revL = list(reviter(L))
|
||||
L.reverse()
|
||||
self.assertEqual(L, revL, 'reviter didn\'t return reversed list')
|
||||
for elt in reviter([]):
|
||||
self.fail('reviter caused iteration over empty sequence')
|
||||
|
||||
def testWindow(self):
|
||||
L = range(10)
|
||||
def wwindow(*args):
|
||||
return list(window(*args))
|
||||
self.assertEqual(wwindow([], 1), [], 'Empty sequence, empty window')
|
||||
self.assertEqual(wwindow([], 2), [], 'Empty sequence, empty window')
|
||||
self.assertEqual(wwindow([], 5), [], 'Empty sequence, empty window')
|
||||
self.assertEqual(wwindow([], 100), [], 'Empty sequence, empty window')
|
||||
self.assertEqual(wwindow(L, 1), [[x] for x in L], 'Window length 1')
|
||||
self.assertRaises(ValueError, wwindow, [], 0)
|
||||
self.assertRaises(ValueError, wwindow, [], -1)
|
||||
|
||||
def testItersplit(self):
|
||||
L = [1, 2, 3] * 3
|
||||
s = 'foo bar baz'
|
||||
self.assertEqual(list(itersplit(L, lambda x: x == 3)),
|
||||
[[1, 2], [1, 2], [1, 2]])
|
||||
self.assertEqual(list(itersplit(L, lambda x: x == 3, True)),
|
||||
[[1, 2], [1, 2], [1, 2], []])
|
||||
self.assertEqual(list(itersplit([], lambda x: x)), [])
|
||||
self.assertEqual(list(itersplit(s, lambda c: c.isspace())),
|
||||
map(list, s.split()))
|
||||
|
||||
def testIterableMap(self):
|
||||
class alist(IterableMap):
|
||||
def __init__(self):
|
||||
self.L = []
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
self.L.append((key, value))
|
||||
|
||||
def iteritems(self):
|
||||
for (k, v) in self.L:
|
||||
yield (k, v)
|
||||
AL = alist()
|
||||
self.failIf(AL)
|
||||
AL[1] = 2
|
||||
AL[2] = 3
|
||||
AL[3] = 4
|
||||
self.failUnless(AL)
|
||||
self.assertEqual(AL.items(), [(1, 2), (2, 3), (3, 4)])
|
||||
self.assertEqual(list(AL.iteritems()), [(1, 2), (2, 3), (3, 4)])
|
||||
self.assertEqual(AL.keys(), [1, 2, 3])
|
||||
self.assertEqual(list(AL.iterkeys()), [1, 2, 3])
|
||||
self.assertEqual(AL.values(), [2, 3, 4])
|
||||
self.assertEqual(list(AL.itervalues()), [2, 3, 4])
|
||||
self.assertEqual(len(AL), 3)
|
||||
|
||||
def testFlatten(self):
|
||||
def lflatten(seq):
|
||||
return list(flatten(seq))
|
||||
self.assertEqual(lflatten([]), [])
|
||||
self.assertEqual(lflatten([1]), [1])
|
||||
self.assertEqual(lflatten(range(10)), range(10))
|
||||
twoRanges = range(10)*2
|
||||
twoRanges.sort()
|
||||
self.assertEqual(lflatten(zip(range(10), range(10))), twoRanges)
|
||||
self.assertEqual(lflatten([1, [2, 3], 4]), [1, 2, 3, 4])
|
||||
self.assertEqual(lflatten([[[[[[[[[[]]]]]]]]]]), [])
|
||||
self.assertEqual(lflatten([1, [2, [3, 4], 5], 6]), [1, 2, 3, 4, 5, 6])
|
||||
self.assertRaises(TypeError, lflatten, 1)
|
@ -1,359 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
###
|
||||
# Copyright (c) 2002, Jeremiah Fincher
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions, and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions, and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
# * Neither the name of the author of this software nor the name of
|
||||
# contributors to this software may be used to endorse or promote products
|
||||
# derived from this software without specific prior written consent.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
###
|
||||
|
||||
from test import *
|
||||
|
||||
import os
|
||||
import unittest
|
||||
|
||||
import debug
|
||||
import ircdb
|
||||
import ircutils
|
||||
|
||||
class FunctionsTestCase(unittest.TestCase):
|
||||
def testIsAntiCapability(self):
|
||||
self.failIf(ircdb.isAntiCapability('foo'))
|
||||
self.failIf(ircdb.isAntiCapability('#foo.bar'))
|
||||
self.failUnless(ircdb.isAntiCapability('!foo'))
|
||||
self.failUnless(ircdb.isAntiCapability('#foo.!bar'))
|
||||
|
||||
def testIsChannelCapability(self):
|
||||
self.failIf(ircdb.isChannelCapability('foo'))
|
||||
self.failUnless(ircdb.isChannelCapability('#foo.bar'))
|
||||
|
||||
def testMakeAntiCapability(self):
|
||||
self.assertEqual(ircdb.makeAntiCapability('foo'), '!foo')
|
||||
self.assertEqual(ircdb.makeAntiCapability('#foo.bar'), '#foo.!bar')
|
||||
|
||||
def testMakeChannelCapability(self):
|
||||
self.assertEqual(ircdb.makeChannelCapability('#f', 'b'), '#f.b')
|
||||
self.assertEqual(ircdb.makeChannelCapability('#f', '!b'), '#f.!b')
|
||||
|
||||
def testUnAntiCapability(self):
|
||||
self.assertEqual(ircdb.unAntiCapability('!bar'), 'bar')
|
||||
self.assertEqual(ircdb.unAntiCapability('#foo.!bar'), '#foo.bar')
|
||||
|
||||
def testInvertCapability(self):
|
||||
self.assertEqual(ircdb.invertCapability('bar'), '!bar')
|
||||
self.assertEqual(ircdb.invertCapability('!bar'), 'bar')
|
||||
self.assertEqual(ircdb.invertCapability('#foo.bar'), '#foo.!bar')
|
||||
self.assertEqual(ircdb.invertCapability('#foo.!bar'), '#foo.bar')
|
||||
|
||||
|
||||
class CapabilitySetTestCase(unittest.TestCase):
|
||||
def test(self):
|
||||
d = ircdb.CapabilitySet()
|
||||
self.assertRaises(KeyError, d.check, 'foo')
|
||||
d = ircdb.CapabilitySet(('foo',))
|
||||
self.failUnless(d.check('foo'))
|
||||
self.failIf(d.check('!foo'))
|
||||
d.add('bar')
|
||||
self.failUnless(d.check('bar'))
|
||||
self.failIf(d.check('!bar'))
|
||||
d.add('!baz')
|
||||
self.failIf(d.check('baz'))
|
||||
self.failUnless(d.check('!baz'))
|
||||
d.add('!bar')
|
||||
self.failIf(d.check('bar'))
|
||||
self.failUnless(d.check('!bar'))
|
||||
d.remove('!bar')
|
||||
self.assertRaises(KeyError, d.check, '!bar')
|
||||
self.assertRaises(KeyError, d.check, 'bar')
|
||||
|
||||
|
||||
class UserCapabilitySetTestCase(unittest.TestCase):
|
||||
def test(self):
|
||||
d = ircdb.UserCapabilitySet(('owner',))
|
||||
self.failIf(d.check('!foo'))
|
||||
self.failUnless(d.check('foo'))
|
||||
|
||||
|
||||
class CapabilitySetTestCase(unittest.TestCase):
|
||||
def test(self):
|
||||
s = ircdb.CapabilitySet()
|
||||
s.add('foo')
|
||||
self.failUnless('foo' in s)
|
||||
self.failIf('!foo' in s)
|
||||
s.add('!bar')
|
||||
self.failUnless('!bar' in s)
|
||||
self.failIf('bar' in s)
|
||||
self.assertRaises(KeyError, s.check, 'baz')
|
||||
self.assertRaises(KeyError, s.check, '!baz')
|
||||
s.remove('!bar')
|
||||
self.assertRaises(KeyError, s.check, '!bar')
|
||||
self.assertRaises(KeyError, s.check, 'bar')
|
||||
s.remove('foo')
|
||||
self.assertRaises(KeyError, s.check, 'foo')
|
||||
self.assertRaises(KeyError, s.check, '!foo')
|
||||
|
||||
class UserCapabilitySetTestCase(unittest.TestCase):
|
||||
def test(self):
|
||||
s = ircdb.UserCapabilitySet()
|
||||
s.add('owner')
|
||||
self.failUnless(s.check('owner'))
|
||||
self.failIf(s.check('!owner'))
|
||||
self.failIf(s.check('!foo'))
|
||||
self.failUnless(s.check('foo'))
|
||||
|
||||
class IrcUserTestCase(unittest.TestCase):
|
||||
def testCapabilities(self):
|
||||
u = ircdb.IrcUser()
|
||||
u.addCapability('foo')
|
||||
self.failUnless(u.checkCapability('foo'))
|
||||
self.failIf(u.checkCapability('!foo'))
|
||||
u.addCapability('!bar')
|
||||
self.failUnless(u.checkCapability('!bar'))
|
||||
self.failIf(u.checkCapability('bar'))
|
||||
u.removeCapability('foo')
|
||||
u.removeCapability('!bar')
|
||||
self.assertRaises(KeyError, u.checkCapability, 'foo')
|
||||
self.assertRaises(KeyError, u.checkCapability, '!bar')
|
||||
|
||||
def testOwner(self):
|
||||
u = ircdb.IrcUser()
|
||||
u.addCapability('owner')
|
||||
self.failUnless(u.checkCapability('foo'))
|
||||
self.failIf(u.checkCapability('!foo'))
|
||||
|
||||
def testInitCapabilities(self):
|
||||
u = ircdb.IrcUser(capabilities=['foo'])
|
||||
self.failUnless(u.checkCapability('foo'))
|
||||
|
||||
def testPassword(self):
|
||||
u = ircdb.IrcUser()
|
||||
u.setPassword('foobar')
|
||||
self.failUnless(u.checkPassword('foobar'))
|
||||
self.failIf(u.checkPassword('somethingelse'))
|
||||
|
||||
def testHostmasks(self):
|
||||
prefix = 'foo!bar@baz'
|
||||
hostmasks = ['*!bar@baz', 'foo!*@*']
|
||||
u = ircdb.IrcUser()
|
||||
self.failIf(u.checkHostmask(prefix))
|
||||
for hostmask in hostmasks:
|
||||
u.addHostmask(hostmask)
|
||||
self.failUnless(u.checkHostmask(prefix))
|
||||
|
||||
def testAuth(self):
|
||||
prefix = 'foo!bar@baz'
|
||||
u = ircdb.IrcUser()
|
||||
u.setAuth(prefix)
|
||||
self.failUnless(u.checkAuth(prefix))
|
||||
u.unsetAuth()
|
||||
self.failIf(u.checkAuth(prefix))
|
||||
|
||||
def testIgnore(self):
|
||||
u = ircdb.IrcUser(ignore=True)
|
||||
self.failIf(u.checkCapability('foo'))
|
||||
self.failUnless(u.checkCapability('!foo'))
|
||||
|
||||
class IrcChannelTestCase(unittest.TestCase):
|
||||
def testInit(self):
|
||||
c = ircdb.IrcChannel()
|
||||
self.failIf(c.checkCapability('op'))
|
||||
self.failIf(c.checkCapability('voice'))
|
||||
self.failIf(c.checkCapability('halfop'))
|
||||
self.failIf(c.checkCapability('protected'))
|
||||
|
||||
def testCapabilities(self):
|
||||
c = ircdb.IrcChannel(defaultAllow=False)
|
||||
self.failIf(c.checkCapability('foo'))
|
||||
c.addCapability('foo')
|
||||
self.failUnless(c.checkCapability('foo'))
|
||||
c.removeCapability('foo')
|
||||
self.failIf(c.checkCapability('foo'))
|
||||
|
||||
def testDefaultCapability(self):
|
||||
c = ircdb.IrcChannel()
|
||||
c.setDefaultCapability(False)
|
||||
self.failIf(c.checkCapability('foo'))
|
||||
self.failUnless(c.checkCapability('!foo'))
|
||||
c.setDefaultCapability(True)
|
||||
self.failUnless(c.checkCapability('foo'))
|
||||
self.failIf(c.checkCapability('!foo'))
|
||||
|
||||
def testLobotomized(self):
|
||||
c = ircdb.IrcChannel(lobotomized=True)
|
||||
self.failUnless(c.checkIgnored(''))
|
||||
|
||||
def testIgnored(self):
|
||||
prefix = 'foo!bar@baz'
|
||||
banmask = ircutils.banmask(prefix)
|
||||
c = ircdb.IrcChannel()
|
||||
self.failIf(c.checkIgnored(prefix))
|
||||
c.addIgnore(banmask)
|
||||
self.failUnless(c.checkIgnored(prefix))
|
||||
c.removeIgnore(banmask)
|
||||
self.failIf(c.checkIgnored(prefix))
|
||||
c.addBan(banmask)
|
||||
self.failUnless(c.checkIgnored(prefix))
|
||||
c.removeBan(banmask)
|
||||
self.failIf(c.checkIgnored(prefix))
|
||||
|
||||
class UsersDictionaryTestCase(unittest.TestCase):
|
||||
filename = 'UsersDictionaryTestCase.conf'
|
||||
def setUp(self):
|
||||
fd = file(self.filename, 'w')
|
||||
fd.write('{}\n')
|
||||
fd.close()
|
||||
self.users = ircdb.UsersDictionary(self.filename)
|
||||
|
||||
def tearDown(self):
|
||||
os.remove(self.filename)
|
||||
|
||||
def testGetSetDelUser(self):
|
||||
self.assertRaises(KeyError, self.users.getUser, 'foo')
|
||||
self.assertRaises(KeyError, self.users.getUser, 'foo!bar@baz')
|
||||
u = ircdb.IrcUser()
|
||||
hostmask = 'foo!bar@baz'
|
||||
banmask = ircutils.banmask(hostmask)
|
||||
u.addHostmask(banmask)
|
||||
self.users.setUser('foo', u)
|
||||
self.assertEqual(self.users.getUser('foo'), u)
|
||||
self.assertEqual(self.users.getUser(hostmask), u)
|
||||
self.assertEqual(self.users.getUser(banmask), u)
|
||||
# The UsersDictionary shouldn't allow users to be added whose hostmasks
|
||||
# match another user's already in the database.
|
||||
self.assertRaises(ValueError, self.users.setUser, 'bar', u)
|
||||
u.removeHostmask(banmask)
|
||||
u.addHostmask('*!*@*')
|
||||
self.assertRaises(ValueError, self.users.setUser, 'biff', u)
|
||||
|
||||
|
||||
class CheckCapabilityTestCase(unittest.TestCase):
|
||||
filename = 'CheckCapabilityTestCase.conf'
|
||||
owner = 'owner!owner@owner'
|
||||
nothing = 'nothing!nothing@nothing'
|
||||
justfoo = 'justfoo!justfoo@justfoo'
|
||||
antifoo = 'antifoo!antifoo@antifoo'
|
||||
justchanfoo = 'justchanfoo!justchanfoo@justchanfoo'
|
||||
antichanfoo = 'antichanfoo!antichanfoo@antichanfoo'
|
||||
channel = '#channel'
|
||||
cap = 'foo'
|
||||
anticap = ircdb.makeAntiCapability(cap)
|
||||
chancap = ircdb.makeChannelCapability(channel, cap)
|
||||
antichancap = ircdb.makeAntiCapability(chancap)
|
||||
channelnothing = ircdb.IrcChannel()
|
||||
channelcap = ircdb.IrcChannel()
|
||||
channelcap.addCapability(cap)
|
||||
channelanticap = ircdb.IrcChannel()
|
||||
channelanticap.addCapability(anticap)
|
||||
def setUp(self):
|
||||
fd = file(self.filename, 'w')
|
||||
fd.write('{}\n')
|
||||
fd.close()
|
||||
self.users = ircdb.UsersDictionary(self.filename)
|
||||
self.channels = ircdb.ChannelsDictionary(self.filename)
|
||||
owner = ircdb.IrcUser()
|
||||
owner.addCapability('owner')
|
||||
owner.addHostmask(self.owner)
|
||||
self.users.setUser('owner', owner)
|
||||
nothing = ircdb.IrcUser()
|
||||
nothing.addHostmask(self.nothing)
|
||||
self.users.setUser('nothing', nothing)
|
||||
justfoo = ircdb.IrcUser()
|
||||
justfoo.addCapability(self.cap)
|
||||
justfoo.addHostmask(self.justfoo)
|
||||
self.users.setUser('justfoo', justfoo)
|
||||
antifoo = ircdb.IrcUser()
|
||||
antifoo.addCapability(self.anticap)
|
||||
antifoo.addHostmask(self.antifoo)
|
||||
self.users.setUser('antifoo', antifoo)
|
||||
justchanfoo = ircdb.IrcUser()
|
||||
justchanfoo.addCapability(self.chancap)
|
||||
justchanfoo.addHostmask(self.justchanfoo)
|
||||
self.users.setUser('justchanfoo', justchanfoo)
|
||||
antichanfoo = ircdb.IrcUser()
|
||||
antichanfoo.addCapability(self.antichancap)
|
||||
antichanfoo.addHostmask(self.antichanfoo)
|
||||
self.users.setUser('antichanfoo', antichanfoo)
|
||||
channel = ircdb.IrcChannel()
|
||||
self.channels.setChannel(self.channel, channel)
|
||||
|
||||
def tearDown(self):
|
||||
os.remove(self.filename)
|
||||
|
||||
def checkCapability(self, hostmask, capability):
|
||||
return ircdb.checkCapability(hostmask, capability,
|
||||
self.users, self.channels)
|
||||
|
||||
def testOwner(self):
|
||||
self.failUnless(self.checkCapability(self.owner, self.cap))
|
||||
self.failIf(self.checkCapability(self.owner, self.anticap))
|
||||
self.failUnless(self.checkCapability(self.owner, self.chancap))
|
||||
self.failIf(self.checkCapability(self.owner, self.antichancap))
|
||||
self.channels.setChannel(self.channel, self.channelanticap)
|
||||
self.failUnless(self.checkCapability(self.owner, self.cap))
|
||||
self.failIf(self.checkCapability(self.owner, self.anticap))
|
||||
|
||||
def testNothingAgainstChannel(self):
|
||||
self.channels.setChannel(self.channel, self.channelnothing)
|
||||
self.assertEqual(self.checkCapability(self.nothing, self.chancap),
|
||||
self.channelnothing.defaultAllow)
|
||||
self.channelnothing.defaultAllow = not self.channelnothing.defaultAllow
|
||||
self.channels.setChannel(self.channel, self.channelnothing)
|
||||
self.assertEqual(self.checkCapability(self.nothing, self.chancap),
|
||||
self.channelnothing.defaultAllow)
|
||||
self.channels.setChannel(self.channel, self.channelcap)
|
||||
self.failUnless(self.checkCapability(self.nothing, self.chancap))
|
||||
self.failIf(self.checkCapability(self.nothing, self.antichancap))
|
||||
self.channels.setChannel(self.channel, self.channelanticap)
|
||||
self.failIf(self.checkCapability(self.nothing, self.chancap))
|
||||
self.failUnless(self.checkCapability(self.nothing, self.antichancap))
|
||||
|
||||
def testNothing(self):
|
||||
self.failIf(self.checkCapability(self.nothing, self.cap))
|
||||
self.failIf(self.checkCapability(self.nothing, self.anticap))
|
||||
|
||||
def testJustFoo(self):
|
||||
self.failUnless(self.checkCapability(self.justfoo, self.cap))
|
||||
self.failIf(self.checkCapability(self.justfoo, self.anticap))
|
||||
|
||||
def testAntiFoo(self):
|
||||
self.failUnless(self.checkCapability(self.antifoo, self.anticap))
|
||||
self.failIf(self.checkCapability(self.antifoo, self.cap))
|
||||
|
||||
def testJustChanFoo(self):
|
||||
self.channels.setChannel(self.channel, self.channelnothing)
|
||||
self.failUnless(self.checkCapability(self.justchanfoo, self.chancap))
|
||||
self.failIf(self.checkCapability(self.justchanfoo, self.antichancap))
|
||||
self.channelnothing.defaultAllow = not self.channelnothing.defaultAllow
|
||||
self.failUnless(self.checkCapability(self.justchanfoo, self.chancap))
|
||||
self.failIf(self.checkCapability(self.justchanfoo, self.antichancap))
|
||||
self.channels.setChannel(self.channel, self.channelanticap)
|
||||
self.failUnless(self.checkCapability(self.justchanfoo, self.chancap))
|
||||
self.failIf(self.checkCapability(self.justchanfoo, self.antichancap))
|
||||
|
||||
def testAntiChanFoo(self):
|
||||
self.channels.setChannel(self.channel, self.channelnothing)
|
||||
self.failIf(self.checkCapability(self.antichanfoo, self.chancap))
|
||||
self.failUnless(self.checkCapability(self.antichanfoo,
|
||||
self.antichancap))
|
@ -1,213 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
###
|
||||
# Copyright (c) 2002, Jeremiah Fincher
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions, and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions, and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
# * Neither the name of the author of this software nor the name of
|
||||
# contributors to this software may be used to endorse or promote products
|
||||
# derived from this software without specific prior written consent.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
###
|
||||
|
||||
from test import *
|
||||
|
||||
import copy
|
||||
|
||||
import conf
|
||||
import irclib
|
||||
import ircmsgs
|
||||
|
||||
class IrcMsgQueueTestCase(unittest.TestCase):
|
||||
mode = ircmsgs.op('#foo', 'jemfinch')
|
||||
msg = ircmsgs.privmsg('#foo', 'hey, you')
|
||||
msgs = [ircmsgs.privmsg('#foo', str(i)) for i in range(10)]
|
||||
kick = ircmsgs.kick('#foo', 'PeterB')
|
||||
pong = ircmsgs.pong('123')
|
||||
ping = ircmsgs.ping('123')
|
||||
notice = ircmsgs.notice('jemfinch', 'supybot here')
|
||||
|
||||
def testEmpty(self):
|
||||
q = irclib.IrcMsgQueue()
|
||||
self.failIf(q)
|
||||
|
||||
def testEnqueueDequeue(self):
|
||||
q = irclib.IrcMsgQueue()
|
||||
q.enqueue(self.msg)
|
||||
self.failUnless(q)
|
||||
self.assertEqual(self.msg, q.dequeue())
|
||||
self.failIf(q)
|
||||
q.enqueue(self.msg)
|
||||
q.enqueue(self.notice)
|
||||
self.assertEqual(self.msg, q.dequeue())
|
||||
self.assertEqual(self.notice, q.dequeue())
|
||||
for msg in self.msgs:
|
||||
q.enqueue(msg)
|
||||
for msg in self.msgs:
|
||||
self.assertEqual(msg, q.dequeue())
|
||||
|
||||
def testPrioritizing(self):
|
||||
q = irclib.IrcMsgQueue()
|
||||
q.enqueue(self.msg)
|
||||
q.enqueue(self.mode)
|
||||
self.assertEqual(self.mode, q.dequeue())
|
||||
self.assertEqual(self.msg, q.dequeue())
|
||||
q.enqueue(self.msg)
|
||||
q.enqueue(self.kick)
|
||||
self.assertEqual(self.kick, q.dequeue())
|
||||
q.enqueue(self.ping)
|
||||
q.enqueue(self.msg)
|
||||
self.assertEqual(self.msg, q.dequeue())
|
||||
self.assertEqual(self.ping, q.dequeue())
|
||||
q.enqueue(self.ping)
|
||||
q.enqueue(self.msgs[0])
|
||||
q.enqueue(self.kick)
|
||||
q.enqueue(self.msgs[1])
|
||||
q.enqueue(self.mode)
|
||||
self.assertEqual(self.kick, q.dequeue())
|
||||
self.assertEqual(self.mode, q.dequeue())
|
||||
self.assertEqual(self.msgs[0], q.dequeue())
|
||||
self.assertEqual(self.msgs[1], q.dequeue())
|
||||
self.assertEqual(self.ping, q.dequeue())
|
||||
|
||||
def testNoIdenticals(self):
|
||||
q = irclib.IrcMsgQueue()
|
||||
q.enqueue(self.msg)
|
||||
q.enqueue(self.msg)
|
||||
self.assertEqual(self.msg, q.dequeue())
|
||||
self.failIf(q)
|
||||
|
||||
|
||||
class IrcStateTestCase(unittest.TestCase):
|
||||
class FakeIrc:
|
||||
nick = 'nick'
|
||||
irc = FakeIrc()
|
||||
def testHistory(self):
|
||||
oldconfmaxhistory = conf.maxHistory
|
||||
conf.maxHistory = 10
|
||||
state = irclib.IrcState()
|
||||
for msg in msgs:
|
||||
try:
|
||||
state.addMsg(self.irc, msg)
|
||||
except Exception:
|
||||
pass
|
||||
self.failIf(len(state.history) > conf.maxHistory)
|
||||
self.assertEqual(len(state.history), conf.maxHistory)
|
||||
self.assertEqual(list(state.history), msgs[len(msgs)-conf.maxHistory:])
|
||||
conf.maxHistory = oldconfmaxhistory
|
||||
|
||||
"""
|
||||
def testChannels(self):
|
||||
channel =
|
||||
state = irclib.IrcState()
|
||||
state.addMsg(self.irc, ircmsgs.join('#foo'))
|
||||
"""
|
||||
|
||||
class IrcTestCase(unittest.TestCase):
|
||||
irc = irclib.Irc('nick')
|
||||
def testPingResponse(self):
|
||||
self.irc.feedMsg(ircmsgs.ping('123'))
|
||||
self.assertEqual(ircmsgs.pong('123'), self.irc.takeMsg())
|
||||
|
||||
def test433Response(self):
|
||||
self.irc.feedMsg(ircmsgs.IrcMsg('433 * %s :Nickname already in use.' %\
|
||||
self.irc.nick))
|
||||
msg = self.irc.takeMsg()
|
||||
self.failUnless(msg.command == 'NICK' and msg.args[0] != self.irc.nick)
|
||||
|
||||
def testReset(self):
|
||||
for msg in msgs:
|
||||
try:
|
||||
self.irc.feedMsg(msg)
|
||||
except:
|
||||
pass
|
||||
self.irc.reset()
|
||||
self.failIf(self.irc.fastqueue)
|
||||
self.failIf(self.irc.state.history)
|
||||
self.failIf(self.irc.state.channels)
|
||||
self.failIf(self.irc.outstandingPongs)
|
||||
self.assertEqual(self.irc._nickmods, conf.nickmods)
|
||||
|
||||
def testHistory(self):
|
||||
self.irc.reset()
|
||||
msg1 = ircmsgs.IrcMsg('PRIVMSG #linux :foo bar baz!')
|
||||
self.irc.feedMsg(msg1)
|
||||
self.assertEqual(self.irc.state.history[0], msg1)
|
||||
msg2 = ircmsgs.IrcMsg('JOIN #sourcereview')
|
||||
self.irc.feedMsg(msg2)
|
||||
self.assertEqual(list(self.irc.state.history), [msg1, msg2])
|
||||
|
||||
|
||||
class IrcCallbackTestCase(unittest.TestCase):
|
||||
class FakeIrc:
|
||||
pass
|
||||
irc = FakeIrc()
|
||||
def testName(self):
|
||||
class UnnamedIrcCallback(irclib.IrcCallback):
|
||||
pass
|
||||
unnamed = UnnamedIrcCallback()
|
||||
|
||||
class NamedIrcCallback(irclib.IrcCallback):
|
||||
myName = 'foobar'
|
||||
def name(self):
|
||||
return self.myName
|
||||
named = NamedIrcCallback()
|
||||
self.assertEqual(unnamed.name(), unnamed.__class__.__name__)
|
||||
self.assertEqual(named.name(), named.myName)
|
||||
|
||||
def testDoCommand(self):
|
||||
def makeCommand(msg):
|
||||
return 'do' + msg.command.capitalize()
|
||||
class DoCommandCatcher(irclib.IrcCallback):
|
||||
def __init__(self):
|
||||
self.L = []
|
||||
def __getattr__(self, attr):
|
||||
self.L.append(attr)
|
||||
return lambda *args: None
|
||||
doCommandCatcher = DoCommandCatcher()
|
||||
for msg in msgs:
|
||||
doCommandCatcher(self.irc, msg)
|
||||
commands = map(makeCommand, msgs)
|
||||
self.assertEqual(doCommandCatcher.L,
|
||||
list(flatten(zip(commands, commands))))
|
||||
|
||||
def testFirstCommands(self):
|
||||
oldconfthrottle = conf.throttleTime
|
||||
conf.throttleTime = 0
|
||||
nick = 'nick'
|
||||
user = 'user any user'
|
||||
password = 'password'
|
||||
expected = [ircmsgs.nick(nick), ircmsgs.user(nick, user)]
|
||||
irc = irclib.Irc(nick, user)
|
||||
msgs = [irc.takeMsg()]
|
||||
while msgs[-1] != None:
|
||||
msgs.append(irc.takeMsg())
|
||||
msgs.pop()
|
||||
self.assertEqual(msgs, expected)
|
||||
irc = irclib.Irc(nick, user, password=password)
|
||||
msgs = [irc.takeMsg()]
|
||||
while msgs[-1] != None:
|
||||
msgs.append(irc.takeMsg())
|
||||
msgs.pop()
|
||||
expected.insert(0, ircmsgs.password(password))
|
||||
self.assertEqual(msgs, expected)
|
||||
conf.throttleTime = oldconfthrottle
|
@ -1,156 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
###
|
||||
# Copyright (c) 2002, Jeremiah Fincher
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions, and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions, and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
# * Neither the name of the author of this software nor the name of
|
||||
# contributors to this software may be used to endorse or promote products
|
||||
# derived from this software without specific prior written consent.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
###
|
||||
|
||||
from test import *
|
||||
|
||||
import copy
|
||||
import pickle
|
||||
|
||||
import ircmsgs
|
||||
import ircutils
|
||||
|
||||
|
||||
class IrcMsgTestCase(unittest.TestCase):
|
||||
def testLen(self):
|
||||
for msg in msgs:
|
||||
if msg.prefix:
|
||||
strmsg = str(msg)
|
||||
self.failIf(len(msg) != len(strmsg) and \
|
||||
strmsg.replace(':', '') == strmsg)
|
||||
|
||||
def testRepr(self):
|
||||
from ircmsgs import IrcMsg
|
||||
for msg in msgs:
|
||||
self.assertEqual(msg, eval(repr(msg)))
|
||||
|
||||
def testStr(self):
|
||||
for (rawmsg, msg) in zip(rawmsgs, msgs):
|
||||
strmsg = str(msg).strip()
|
||||
self.failIf(rawmsg != strmsg and \
|
||||
strmsg.replace(':', '') == strmsg)
|
||||
|
||||
def testEq(self):
|
||||
for msg in msgs:
|
||||
self.assertEqual(msg, msg)
|
||||
|
||||
def testNe(self):
|
||||
for msg in msgs:
|
||||
self.failIf(msg != msg)
|
||||
|
||||
def testImmutability(self):
|
||||
s = 'something else'
|
||||
t = ('foo', 'bar', 'baz')
|
||||
for msg in msgs:
|
||||
self.assertRaises(AttributeError, setattr, msg, 'prefix', s)
|
||||
self.assertRaises(AttributeError, setattr, msg, 'nick', s)
|
||||
self.assertRaises(AttributeError, setattr, msg, 'user', s)
|
||||
self.assertRaises(AttributeError, setattr, msg, 'host', s)
|
||||
self.assertRaises(AttributeError, setattr, msg, 'command', s)
|
||||
self.assertRaises(AttributeError, setattr, msg, 'args', t)
|
||||
if msg.args:
|
||||
def setArgs(msg):
|
||||
msg.args[0] = s
|
||||
self.assertRaises(TypeError, setArgs, msg)
|
||||
|
||||
def testInit(self):
|
||||
for msg in msgs:
|
||||
self.assertEqual(msg, ircmsgs.IrcMsg(prefix=msg.prefix,
|
||||
command=msg.command,
|
||||
args=msg.args))
|
||||
self.assertEqual(msg, ircmsgs.IrcMsg(msg=msg))
|
||||
self.assertRaises(ValueError,
|
||||
ircmsgs.IrcMsg,
|
||||
args=('foo', 'bar'),
|
||||
prefix='foo!bar@baz')
|
||||
|
||||
def testPickleCopy(self):
|
||||
for msg in msgs:
|
||||
self.assertEqual(msg, pickle.loads(pickle.dumps(msg)))
|
||||
self.assertEqual(msg, copy.copy(msg))
|
||||
|
||||
class FunctionsTestCase(unittest.TestCase):
|
||||
def testIsAction(self):
|
||||
L = [':jemfinch!~jfincher@ts26-2.homenet.ohio-state.edu PRIVMSG'
|
||||
' #sourcereview :ACTION does something',
|
||||
':supybot!~supybot@underthemain.net PRIVMSG #sourcereview '
|
||||
':ACTION beats angryman senseless with a Unix manual (#2)',
|
||||
':supybot!~supybot@underthemain.net PRIVMSG #sourcereview '
|
||||
':ACTION beats ang senseless with a 50lb Unix manual (#2)',
|
||||
':supybot!~supybot@underthemain.net PRIVMSG #sourcereview '
|
||||
':ACTION resizes angryman\'s terminal to 40x24 (#16)']
|
||||
msgs = map(ircmsgs.IrcMsg, L)
|
||||
for msg in msgs:
|
||||
self.failUnless(ircmsgs.isAction(msg))
|
||||
|
||||
def testUnAction(self):
|
||||
s = 'foo bar baz'
|
||||
msg = ircmsgs.action('#foo', s)
|
||||
self.assertEqual(ircmsgs.unAction(msg), s)
|
||||
|
||||
def testBan(self):
|
||||
channel = '#osu'
|
||||
ban = '*!*@*.edu'
|
||||
exception = '*!*@*ohio-state.edu'
|
||||
noException = ircmsgs.ban(channel, ban)
|
||||
self.assertEqual(ircutils.separateModes(noException.args[1:]),
|
||||
[('+b', ban)])
|
||||
withException = ircmsgs.ban(channel, ban, exception)
|
||||
self.assertEqual(ircutils.separateModes(withException.args[1:]),
|
||||
[('+b', ban), ('+e', exception)])
|
||||
|
||||
def testBans(self):
|
||||
channel = '#osu'
|
||||
bans = ['*!*@*', 'jemfinch!*@*']
|
||||
exceptions = ['*!*@*ohio-state.edu']
|
||||
noException = ircmsgs.bans(channel, bans)
|
||||
self.assertEqual(ircutils.separateModes(noException.args[1:]),
|
||||
[('+b', bans[0]), ('+b', bans[1])])
|
||||
withExceptions = ircmsgs.bans(channel, bans, exceptions)
|
||||
self.assertEqual(ircutils.separateModes(withExceptions.args[1:]),
|
||||
[('+b', bans[0]), ('+b', bans[1]),
|
||||
('+e', exceptions[0])])
|
||||
|
||||
def testJoin(self):
|
||||
channel = '#osu'
|
||||
key = 'michiganSucks'
|
||||
self.assertEqual(ircmsgs.join(channel).args, ('#osu',))
|
||||
self.assertEqual(ircmsgs.join(channel, key).args,
|
||||
('#osu', 'michiganSucks'))
|
||||
|
||||
def testJoins(self):
|
||||
channels = ['#osu', '#umich']
|
||||
keys = ['michiganSucks', 'osuSucks']
|
||||
self.assertEqual(ircmsgs.joins(channels).args, ('#osu,#umich',))
|
||||
self.assertEqual(ircmsgs.joins(channels, keys).args,
|
||||
('#osu,#umich', 'michiganSucks,osuSucks'))
|
||||
keys.pop()
|
||||
self.assertEqual(ircmsgs.joins(channels, keys).args,
|
||||
('#osu,#umich', 'michiganSucks'))
|
@ -1,165 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
###
|
||||
# Copyright (c) 2002, Jeremiah Fincher
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions, and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions, and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
# * Neither the name of the author of this software nor the name of
|
||||
# contributors to this software may be used to endorse or promote products
|
||||
# derived from this software without specific prior written consent.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
###
|
||||
|
||||
|
||||
from test import *
|
||||
|
||||
import ircmsgs
|
||||
import ircutils
|
||||
|
||||
class FunctionsTestCase(unittest.TestCase):
|
||||
hostmask = 'foo!bar@baz'
|
||||
def testIsUserHostmask(self):
|
||||
self.failUnless(ircutils.isUserHostmask(self.hostmask))
|
||||
self.failUnless(ircutils.isUserHostmask('a!b@c'))
|
||||
self.failIf(ircutils.isUserHostmask('!bar@baz'))
|
||||
self.failIf(ircutils.isUserHostmask('!@baz'))
|
||||
self.failIf(ircutils.isUserHostmask('!bar@'))
|
||||
self.failIf(ircutils.isUserHostmask('!@'))
|
||||
self.failIf(ircutils.isUserHostmask('foo!@baz'))
|
||||
self.failIf(ircutils.isUserHostmask('foo!bar@'))
|
||||
self.failIf(ircutils.isUserHostmask(''))
|
||||
self.failIf(ircutils.isUserHostmask('!'))
|
||||
self.failIf(ircutils.isUserHostmask('@'))
|
||||
self.failIf(ircutils.isUserHostmask('!bar@baz'))
|
||||
|
||||
def testIsChannel(self):
|
||||
self.failUnless(ircutils.isChannel('#'))
|
||||
self.failUnless(ircutils.isChannel('&'))
|
||||
self.failUnless(ircutils.isChannel('+'))
|
||||
self.failUnless(ircutils.isChannel('!'))
|
||||
self.failUnless(ircutils.isChannel('#foo'))
|
||||
self.failUnless(ircutils.isChannel('&foo'))
|
||||
self.failUnless(ircutils.isChannel('+foo'))
|
||||
self.failUnless(ircutils.isChannel('!foo'))
|
||||
self.failIf(ircutils.isChannel('#foo bar'))
|
||||
self.failIf(ircutils.isChannel('#foo,bar'))
|
||||
self.failIf(ircutils.isChannel('#foobar\x07'))
|
||||
self.failIf(ircutils.isChannel('foo'))
|
||||
self.failIf(ircutils.isChannel(''))
|
||||
|
||||
def testBold(self):
|
||||
s = ircutils.bold('foo')
|
||||
self.assertEqual(s[0], '\x02')
|
||||
self.assertEqual(s[-1], '\x02')
|
||||
|
||||
def testSafeArgument(self):
|
||||
s = 'I have been running for 9 seconds'
|
||||
bolds = ircutils.bold(s)
|
||||
self.assertEqual(s, ircutils.safeArgument(s))
|
||||
self.assertEqual(bolds, ircutils.safeArgument(bolds))
|
||||
|
||||
def testIsIP(self):
|
||||
self.failIf(ircutils.isIP('a.b.c'))
|
||||
self.failIf(ircutils.isIP('256.0.0.0'))
|
||||
self.failUnless(ircutils.isIP('127.1'))
|
||||
self.failUnless(ircutils.isIP('0.0.0.0'))
|
||||
self.failUnless(ircutils.isIP('100.100.100.100'))
|
||||
self.failUnless(ircutils.isIP('255.255.255.255'))
|
||||
|
||||
def testIsNick(self):
|
||||
self.failUnless(ircutils.isNick('jemfinch'))
|
||||
self.failUnless(ircutils.isNick('jemfinch0'))
|
||||
self.failUnless(ircutils.isNick('[0]'))
|
||||
self.failUnless(ircutils.isNick('{jemfinch}'))
|
||||
self.failUnless(ircutils.isNick('\\```'))
|
||||
self.failIf(ircutils.isNick(''))
|
||||
self.failIf(ircutils.isNick('8foo'))
|
||||
self.failIf(ircutils.isNick('10'))
|
||||
|
||||
def banmask(self):
|
||||
for msg in msgs:
|
||||
if ircutils.isUserHostmask(msg.prefix):
|
||||
self.failUnless(ircutils.hostmaskPatternEqual
|
||||
(ircutils.banmask(msg.prefix),
|
||||
msg.prefix))
|
||||
|
||||
def testSeparateModes(self):
|
||||
self.assertEqual(ircutils.separateModes(['+ooo', 'x', 'y', 'z']),
|
||||
[('+o', 'x'), ('+o', 'y'), ('+o', 'z')])
|
||||
self.assertEqual(ircutils.separateModes(['+o-o', 'x', 'y']),
|
||||
[('+o', 'x'), ('-o', 'y')])
|
||||
self.assertEqual(ircutils.separateModes(['+s-o', 'x']),
|
||||
[('+s', None), ('-o', 'x')])
|
||||
self.assertEqual(ircutils.separateModes(['+sntl', '100']),
|
||||
[('+s', None),('+n', None),('+t', None),('+l', '100')])
|
||||
|
||||
def testToLower(self):
|
||||
self.assertEqual('jemfinch', ircutils.toLower('jemfinch'))
|
||||
self.assertEqual('{}|^', ircutils.toLower('[]\\~'))
|
||||
|
||||
def testNick(self):
|
||||
nicks = ['jemfinch', 'jemfinch\\[]~']
|
||||
for nick in nicks:
|
||||
self.assertEqual(str(ircutils.nick(nick)), str(nick))
|
||||
self.assertEqual(ircutils.nick(nick), nick)
|
||||
self.assertEqual(ircutils.nick(nick), ircutils.toLower(nick))
|
||||
|
||||
def testReplyTo(self):
|
||||
prefix = 'foo!bar@baz'
|
||||
channel = ircmsgs.privmsg('#foo', 'bar baz', prefix=prefix)
|
||||
private = ircmsgs.privmsg('jemfinch', 'bar baz', prefix=prefix)
|
||||
self.assertEqual(ircutils.replyTo(channel), channel.args[0])
|
||||
self.assertEqual(ircutils.replyTo(private), private.nick)
|
||||
|
||||
def testJoinModes(self):
|
||||
plusE = ('+e', '*!*@*ohio-state.edu')
|
||||
plusB = ('+b', '*!*@*umich.edu')
|
||||
minusL = ('-l', None)
|
||||
modes = [plusB, plusE, minusL]
|
||||
self.assertEqual(ircutils.joinModes(modes),
|
||||
['+be-l', plusB[1], plusE[1]])
|
||||
class IrcDictTestCase(unittest.TestCase):
|
||||
def test(self):
|
||||
d = ircutils.IrcDict()
|
||||
d['#FOO'] = 'bar'
|
||||
self.assertEqual(d['#FOO'], 'bar')
|
||||
self.assertEqual(d['#Foo'], 'bar')
|
||||
self.assertEqual(d['#foo'], 'bar')
|
||||
del d['#fOO']
|
||||
d['jemfinch{}'] = 'bar'
|
||||
self.assertEqual(d['jemfinch{}'], 'bar')
|
||||
self.assertEqual(d['jemfinch[]'], 'bar')
|
||||
self.assertEqual(d['JEMFINCH[]'], 'bar')
|
||||
|
||||
def testContains(self):
|
||||
d = ircutils.IrcDict()
|
||||
d['#FOO'] = None
|
||||
self.failUnless('#foo' in d)
|
||||
d['#fOOBAR[]'] = None
|
||||
self.failUnless('#foobar{}' in d)
|
||||
|
||||
def testGetSetItem(self):
|
||||
d = ircutils.IrcDict()
|
||||
d['#FOO'] = 12
|
||||
self.assertEqual(12, d['#foo'])
|
||||
d['#fOOBAR[]'] = 'blah'
|
||||
self.assertEqual('blah', d['#foobar{}'])
|
@ -1,63 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
###
|
||||
# Copyright (c) 2002, Jeremiah Fincher
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions, and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions, and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
# * Neither the name of the author of this software nor the name of
|
||||
# contributors to this software may be used to endorse or promote products
|
||||
# derived from this software without specific prior written consent.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
###
|
||||
|
||||
from test import *
|
||||
|
||||
import ircmsgs
|
||||
import privmsgs
|
||||
import callbacks
|
||||
|
||||
class FunctionsTest(unittest.TestCase):
|
||||
def testGetChannel(self):
|
||||
channel = '#foo'
|
||||
msg = ircmsgs.privmsg(channel, 'foo bar baz')
|
||||
args = msg.args[1].split()
|
||||
originalArgs = args[:]
|
||||
self.assertEqual(privmsgs.getChannel(msg, args), channel)
|
||||
self.assertEqual(args, originalArgs)
|
||||
msg = ircmsgs.privmsg('nick', '%s bar baz' % channel)
|
||||
args = msg.args[1].split()
|
||||
originalArgs = args[:]
|
||||
self.assertEqual(privmsgs.getChannel(msg, args), channel)
|
||||
self.assertEqual(args, originalArgs[1:])
|
||||
|
||||
def testGetArgs(self):
|
||||
args = ['foo', 'bar', 'baz']
|
||||
self.assertEqual(privmsgs.getArgs(args), ' '.join(args))
|
||||
self.assertEqual(privmsgs.getArgs(args, needed=2),
|
||||
[args[0], ' '.join(args[1:])])
|
||||
self.assertEqual(privmsgs.getArgs(args, needed=3), args)
|
||||
self.assertRaises(callbacks.ArgumentError,
|
||||
privmsgs.getArgs, args, needed=4)
|
||||
self.assertEqual(privmsgs.getArgs(args, needed=3, optional=1),
|
||||
args + [''])
|
||||
self.assertEqual(privmsgs.getArgs(args, needed=0, optional=1),
|
||||
' '.join(args))
|
@ -1,133 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
###
|
||||
# Copyright (c) 2002, Jeremiah Fincher
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions, and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions, and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
# * Neither the name of the author of this software nor the name of
|
||||
# contributors to this software may be used to endorse or promote products
|
||||
# derived from this software without specific prior written consent.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
###
|
||||
|
||||
from test import *
|
||||
|
||||
import utils
|
||||
|
||||
|
||||
class UtilsTest(unittest.TestCase):
|
||||
def testTimeElapsed(self):
|
||||
self.assertRaises(ValueError, utils.timeElapsed, 0, 0, seconds=False)
|
||||
then = 0
|
||||
now = 0
|
||||
for now, expected in [(0, '0 seconds'),
|
||||
(1, '1 second'),
|
||||
(60, '1 minute and 0 seconds'),
|
||||
(61, '1 minute and 1 second'),
|
||||
(62, '1 minute and 2 seconds'),
|
||||
(122, '2 minutes and 2 seconds'),
|
||||
(3722, '1 hour, 2 minutes and 2 seconds'),
|
||||
(7322, '2 hours, 2 minutes and 2 seconds')]:
|
||||
self.assertEqual(utils.timeElapsed(now, then), expected)
|
||||
|
||||
def testEachSubstring(self):
|
||||
s = 'foobar'
|
||||
L = ['f', 'fo', 'foo', 'foob', 'fooba', 'foobar']
|
||||
self.assertEqual(list(utils.eachSubstring(s)), L)
|
||||
|
||||
def testDistance(self):
|
||||
self.assertEqual(utils.distance('', ''), 0)
|
||||
self.assertEqual(utils.distance('a', 'b'), 1)
|
||||
self.assertEqual(utils.distance('a', 'a'), 0)
|
||||
self.assertEqual(utils.distance('foobar', 'jemfinch'), 8)
|
||||
self.assertEqual(utils.distance('a', 'ab'), 1)
|
||||
self.assertEqual(utils.distance('foo', ''), 3)
|
||||
self.assertEqual(utils.distance('', 'foo'), 3)
|
||||
self.assertEqual(utils.distance('appel', 'nappe'), 2)
|
||||
self.assertEqual(utils.distance('nappe', 'appel'), 2)
|
||||
|
||||
def testAbbrev(self):
|
||||
L = ['abc', 'bcd', 'bbe', 'foo', 'fool']
|
||||
d = utils.abbrev(L)
|
||||
def getItem(s):
|
||||
return d[s]
|
||||
self.assertRaises(KeyError, getItem, 'f')
|
||||
self.assertRaises(KeyError, getItem, 'fo')
|
||||
self.assertRaises(KeyError, getItem, 'b')
|
||||
self.assertEqual(d['bb'], 'bbe')
|
||||
self.assertEqual(d['bc'], 'bcd')
|
||||
self.assertEqual(d['a'], 'abc')
|
||||
self.assertEqual(d['ab'], 'abc')
|
||||
self.assertEqual(d['fool'], 'fool')
|
||||
self.assertEqual(d['foo'], 'foo')
|
||||
|
||||
def testSoundex(self):
|
||||
L = [('Euler', 'E460'),
|
||||
('Ellery', 'E460'),
|
||||
('Gauss', 'G200'),
|
||||
('Ghosh', 'G200'),
|
||||
('Hilbert', 'H416'),
|
||||
('Heilbronn', 'H416'),
|
||||
('Knuth', 'K530'),
|
||||
('Kant', 'K530'),
|
||||
('Lloyd', 'L300'),
|
||||
('Ladd', 'L300'),
|
||||
('Lukasiewicz', 'L222'),
|
||||
('Lissajous', 'L222')]
|
||||
for (name, key) in L:
|
||||
soundex = utils.soundex(name)
|
||||
self.assertEqual(soundex, key,
|
||||
'%s was %s, not %s' % (name, soundex, key))
|
||||
|
||||
def testDQRepr(self):
|
||||
L = [('foo', '"foo"'),
|
||||
('foo\'bar', '"foo\'bar"'),
|
||||
('foo"bar', '"foo\\"bar"'),
|
||||
('"', '"\\""'),
|
||||
('', '""'),
|
||||
('\x00', '"\\x00"')]
|
||||
for (s, r) in L:
|
||||
self.assertEqual(r, utils.dqrepr(s))
|
||||
self.assertEqual(s, eval(utils.dqrepr(s)))
|
||||
|
||||
def testPerlReToPythonRe(self):
|
||||
r = utils.perlReToPythonRe('m/foo/')
|
||||
self.failUnless(r.search('foo'))
|
||||
r = utils.perlReToPythonRe('/foo/')
|
||||
self.failUnless(r.search('foo'))
|
||||
r = utils.perlReToPythonRe('m/\\//')
|
||||
self.failUnless(r.search('/'))
|
||||
|
||||
def testPerlReToReplacer(self):
|
||||
f = utils.perlReToReplacer('s/foo/bar/')
|
||||
self.assertEqual(f('foobarbaz'), 'barbarbaz')
|
||||
f = utils.perlReToReplacer('s/fool/bar/')
|
||||
self.assertEqual(f('foobarbaz'), 'foobarbaz')
|
||||
f = utils.perlReToReplacer('s/foo//')
|
||||
self.assertEqual(f('foobarbaz'), 'barbaz')
|
||||
f = utils.perlReToReplacer('s/ba//')
|
||||
self.assertEqual(f('foobarbaz'), 'foorbaz')
|
||||
f = utils.perlReToReplacer('s/ba//g')
|
||||
self.assertEqual(f('foobarbaz'), 'foorz')
|
||||
f = utils.perlReToReplacer('s/ba\\///g')
|
||||
self.assertEqual(f('fooba/rba/z'), 'foorz')
|
||||
|
Loading…
Reference in New Issue
Block a user