remember: add tests

This commit is contained in:
Ryan Hitchman 2015-01-21 23:53:18 -08:00
parent 921b986683
commit d9e03b2dd3
1 changed files with 79 additions and 4 deletions

View File

@ -2,8 +2,9 @@
remember.py: written by Scaevolus 2010
"""
import string
import re
import string
import unittest
from util import hook
@ -55,6 +56,8 @@ def remember(inp, nick='', chan='', db=None):
tail = _tail + ' ' + new
if len(tail) > 2 and tail[0] == 's' and tail[1] in string.punctuation:
if _tail == '':
return "I don't know about that."
args = tail.split(tail[1])
if len(args) == 4 and args[3] == '':
args = args[:-1]
@ -92,9 +95,6 @@ def forget(inp, chan='', db=None):
db_init(db)
data = get_memory(db, chan, inp)
if not chan.startswith('#'):
return "I won't forget anything in private."
if data:
db.execute("delete from memory where chan=? and word=lower(?)",
(chan, inp))
@ -112,3 +112,78 @@ def question(inp, chan='', say=None, db=None):
data = get_memory(db, chan, inp.group(1).strip())
if data:
say(data)
class MemoryTest(unittest.TestCase):
def setUp(self):
import sqlite3
self.db = sqlite3.connect(':memory:')
def remember(self, inp, nick='someone', chan='#test'):
return remember(inp, nick=nick, chan=chan, db=self.db)
def forget(self, inp, chan='#test'):
return forget(inp, chan=chan, db=self.db)
def question(self, inp, chan='#test'):
output = []
question(re.match(r'(.*)', inp),
chan=chan, say=output.append, db=self.db)
return output[0] if output else None
def test_remember(self):
assert 'done.' == self.remember('dogs :3')
assert 'dogs :3' == self.question('dogs')
def test_remember_doc(self):
assert '.remember <word>' in self.remember('bad_syntax')
def test_remember_overwrite(self):
self.remember('dogs :(')
assert 'forgetting "dogs :("' in self.remember('dogs :3')
assert 'dogs :3' == self.question('dogs')
def test_remember_hygiene(self):
self.remember('python good', chan='#python')
self.remember('python bad', chan='#ruby')
assert 'python good' == self.question('python', '#python')
assert 'python bad' == self.question('python', '#ruby')
def test_remember_append(self):
self.remember('ball big')
self.remember('ball +red')
assert 'ball big red' == self.question('ball')
def test_remember_append_punctuation(self):
self.remember('baby young')
self.remember('baby +, hungry')
assert 'baby young, hungry' == self.question('baby')
def test_remember_replace(self):
self.remember('person is very rich (rich!)')
self.remember('person s/rich/poor/')
assert 'person is very poor (rich!)' == self.question('person')
def test_remember_replace_invalid(self):
self.remember('fact bar')
assert 'invalid replacement' in self.remember('fact s/too/many/seps/!')
assert 'invalid replacement' in self.remember('fact s/toofew')
def test_remember_replace_ineffective(self):
self.remember('hay stack')
assert 'unchanged' in self.remember('hay s:needle:shiny needle')
def test_remember_replace_missing(self):
assert "I don't know about that" in self.remember('hay s/what/lol')
def test_question_empty(self):
assert self.question('not_in_db') is None
def test_forget(self):
self.remember('meat good', chan='#carnivore')
self.remember('meat bad', chan='#vegan')
assert 'forgot `meat good`' in self.forget('meat', chan='#carnivore')
assert 'meat bad' == self.question('meat', chan='#vegan')
def test_forget_missing(self):
assert "don't know" in self.forget('fakekey')