Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Darst <rkd@zgib.net>2009-08-07 23:24:05 (GMT)
committer Richard Darst <rkd@zgib.net>2009-08-07 23:24:05 (GMT)
commitfb8b0a902e95a4d77dc84ba316d0deff6106d0f6 (patch)
tree57d56afff33880e2832b785694efa59882829bde
parent0c936f7cd88c5e001ffccf69271b6a877a82fa3d (diff)
Add comprehensive test suite
- Enter via tests/run_tests.py - It has two parts: it replays two meetings, just being sure no exceptions are raised - It runs one suite of test commands through supybot, using the supybot test suite, to ensure that supybot usage works. darcs-hash:20090807232405-82ea9-327d27a3709ad8f851a51552b13d286a9a118fc3.gz
-rw-r--r--test.py45
-rw-r--r--tests/run_test.py27
-rw-r--r--tests/test-script-1.log.txt77
-rw-r--r--tests/test-script-2.log.txt39
4 files changed, 187 insertions, 1 deletions
diff --git a/test.py b/test.py
index b1ef38d..e42d601 100644
--- a/test.py
+++ b/test.py
@@ -30,8 +30,51 @@
from supybot.test import *
-class MeetBotTestCase(PluginTestCase):
+import os
+import sys
+
+class MeetBotTestCase(ChannelPluginTestCase):
+ channel = "#testchannel"
plugins = ('MeetBot',)
+ def testRunMeeting(self):
+ test_script = file(os.path.join(os.path.dirname(__file__),
+ "tests/test-script-2.log.txt"))
+ for line in test_script:
+ # Normalize input lines somewhat.
+ line = line.strip()
+ if not line: continue
+ # This consists of input/output pairs we expect. If it's
+ # not here, it's not checked for.
+ match_pairs = (('#startmeeting', 'Meeting started'),
+ ('#endmeeting', 'Meeting ended'),
+ ('#topic (.*)', 1),
+ ('#meetingtopic (.*)', 1),
+ ('#meetingname','The meeting name has been set to'),
+ ('#chair', 'Current chairs:'),
+ ('#unchair', 'Current chairs:'),
+ )
+ # Run the command and get any possible output
+ reply = [ ]
+ self.feedMsg(line)
+ r = self.irc.takeMsg()
+ while r:
+ reply.append(r.args[1])
+ r = self.irc.takeMsg()
+ reply = "\n".join(reply)
+ # If our input line matches a test pattern, then insist
+ # that the output line matches the expected output
+ # pattern.
+ for test in match_pairs:
+ if re.search(test[0], line):
+ groups = re.search(test[0], line).groups()
+ # Output pattern depends on input pattern
+ if isinstance(test[1], int):
+ assert re.search(re.escape(groups[test[1]-1]),
+ reply), 'line "%s" gives output "%s"'%(line, reply)
+ # Just match the given pattern.
+ else:
+ assert re.search(test[1], reply), 'line "%s" gives output "%s"'%(line, reply)
+
# vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79:
diff --git a/tests/run_test.py b/tests/run_test.py
new file mode 100644
index 0000000..053da1e
--- /dev/null
+++ b/tests/run_test.py
@@ -0,0 +1,27 @@
+# Richard Darst, 2009
+
+import os
+import sys
+
+run_tests = True
+os.chdir(os.path.join(os.path.dirname(__file__), '.'))
+
+print sys.path
+sys.path.insert(0, "..")
+
+sys.argv[1:] = ["replay", "test-script-1.log.txt"]
+execfile("../meeting.py")
+
+del sys.path[0]
+
+
+# Supybot-based tests
+
+os.symlink("..", "MeetBot")
+try:
+ sys.argv[1:] = ["./MeetBot"]
+ execfile("/usr/bin/supybot-test")
+finally:
+ os.unlink("MeetBot")
+
+
diff --git a/tests/test-script-1.log.txt b/tests/test-script-1.log.txt
new file mode 100644
index 0000000..bd7cb16
--- /dev/null
+++ b/tests/test-script-1.log.txt
@@ -0,0 +1,77 @@
+20:13:46 <MrBeige> #startmeeting
+
+20:13:50 <T-Rex> #info this command is just before the first topic
+
+20:13:50 <T-Rex> #topic Test of topics
+20:13:50 <T-Rex> #topic Second topic
+20:13:50 <T-Rex> #meetingtopic the meeting topic
+20:13:50 <T-Rex> #topic With áccents
+
+
+20:13:50 <MrBeige> #topic General command tests
+
+20:13:50 <MrBeige> #accepted we will include this new format if we so choose.
+20:13:50 <MrBeige> #rejected we will not include this new format.
+20:13:50 <MrBeige> #chair Utahraptor T-Rex not-here
+20:13:50 <MrBeige> #chair Utahraptor T-Rex
+20:13:50 <MrBeige> #nick someone-not-present
+20:13:50 <MrBeige> #chair áccents
+20:13:50 <MrBeige> #nick áccenẗs
+20:13:50 <MrBeige> #unchar not-here
+
+# all commands
+20:13:50 <MrBeige> #topic Test of all commands with different arguments
+20:13:50 <MrBeige> #topic
+20:13:50 <MrBeige> #idea
+20:13:50 <MrBeige> #info
+20:13:50 <MrBeige> #action
+20:13:50 <MrBeige> #agreed
+20:13:50 <MrBeige> #halp
+20:13:50 <MrBeige> #accepted
+20:13:50 <MrBeige> #rejected
+
+20:13:50 <MrBeige> #topic Commands with non-ascii
+20:13:50 <MrBeige> #topic üáç€
+20:13:50 <MrBeige> #idea üáç€
+20:13:50 <MrBeige> #info üáç€
+20:13:50 <MrBeige> #action üáç€
+20:13:50 <MrBeige> #agreed üáç€
+20:13:50 <MrBeige> #halp üáç€
+20:13:50 <MrBeige> #accepted üáç€
+20:13:50 <MrBeige> #rejected üáç€
+
+
+20:13:50 <MrBeige> #item blah
+20:13:50 <MrBeige> #idea blah
+20:13:50 <MrBeige> #action blah
+20:13:50 <Utahraptor> #agreed blah
+
+# escapes
+20:13:50 <MrBeige> #topic Escapes
+20:13:50 <Utahraptor> #nick <b>
+20:13:50 <Utahraptor> #nick **
+20:13:50 <Utahraptor> #idea blah_ blah_ ReST link reference...
+20:13:50 <ReST1_> #idea blah blah blah
+20:13:50 <ReST2_> this is some text
+20:13:50 <ReST2_> #idea under_score
+20:13:50 <Re_ST> #idea under_score
+20:13:50 <Re_ST> #idea under1_1score
+20:13:50 <Re_ST> #idea under1_score
+20:13:50 <Re_ST> #idea under_1score
+20:13:50 <Re_ST> #idea under-_score
+20:13:50 <Re_ST> #idea under_-score
+
+# links
+20:13:50 <MrBeige> #topic Links
+20:13:50 <Utahraptor> #link http://test<b>.zgib.net
+20:13:50 <Utahraptor> #link http://test.zgib.net/&testpage
+
+# accents
+20:13:50 <MrBeige> #topic Character sets
+20:13:50 <Üţáhraptõr> Nick with accents.
+20:13:50 <Üţáhraptõr> #idea Nick with accents.
+
+# actions in actions
+#
+
+20:13:52 <MrBeige> #endmeeting
diff --git a/tests/test-script-2.log.txt b/tests/test-script-2.log.txt
new file mode 100644
index 0000000..370cd46
--- /dev/null
+++ b/tests/test-script-2.log.txt
@@ -0,0 +1,39 @@
+#startmeeting
+this is a test line
+hi
+blah
+#topic play with chairs some
+#chair Hydroxide
+#chair h01ger
+#unchair Hydroxide
+#topic test action items
+something to say
+#action MrBeige does something
+#action h01ger and MrBeige do something else
+#action NickThatIsntHere does something
+#action MrGreen acts awesome
+#nick MrGreen
+#topic test other commands
+#info no I won't
+#idea blah
+#link http://www.debian.org
+http://www.debian.org
+/me says hi
+#topic try to cause some problems
+evil code to mess up html <b><i><u>
+#info evil code to mess up html <b><i><u>
+#nick
+#nick
+#chair
+#chair
+#unchair
+#info
+#info
+#idea
+#idea
+#topic test removing item from the minutes (nothing should be here)
+#info this shouldn't appear in the minutes
+#undo
+#endmeeting
+
+