1 # -*- coding: utf-8 -*-
2 # vim:fileencoding=utf-8 ai ts=4 sts=4 et sw=4
3 # Copyright 2012 Neil Muller
4 # GPL 2+ - see COPYING for details
5 from unittest import TestLoader
6 from SocketServer import TCPServer, StreamRequestHandler
9 from bzrlib import config
10 from bzrlib.bzrdir import BzrDir
11 from bzrlib.tests import TestCaseInTempDir
12 from bzrlib.plugins.bzrirker.irkerhook import IrkerSender
16 return TestLoader().loadTestsFromName(__name__)
18 sample_config = ("[DEFAULT]\n"
19 "irker_project=bzrirker\n"
20 "irker_server=localhost\n"
22 "irker_channels=irc://chat.example.test/commits\n")
24 no_project_config = ("[DEFAULT]\n"
25 "irker_channels=irc://chat.example.test/commits\n")
27 colour_config = ("[DEFAULT]\n"
28 "irker_project=bzrirker\n"
29 "irker_colours=mIRC\n"
30 "irker_channels=irc://chat.example.test/commits\n")
33 class MyHandler(StreamRequestHandler):
36 data = self.rfile.read()
37 self.server.data = data
40 class TestConfigured(TestCaseInTempDir):
42 def test_no_colours(self):
43 irker = self.get_irker()
45 'bold': '', 'green': '', 'blue': '', 'red': '',
46 'yellow': '', 'brown': '', 'magenta': '', 'cyan': '',
47 'reset': ''}, irker.colours())
49 def test_colours(self):
50 irker = self.get_irker(colour_config)
52 'bold': '\x02', 'green': '\x0303', 'blue': '\x0302',
53 'red': '\x0305', 'yellow': '\x0307', 'brown': '\x0305',
54 'magenta': '\x0306', 'cyan': '\x0310', 'reset': '\x0F'},
57 def test_message(self):
58 irker = self.get_irker()
60 'bzrirker: Sample <john@example.test> work * 1 / : foo bar ',
63 def test_no_project(self):
64 irker = self.get_irker(no_project_config)
66 'No Project name set: Sample <john@example.test>'
67 ' work * 1 / : foo bar ',
70 def test_message_colour(self):
71 irker = self.get_irker(colour_config)
73 '\x02bzrirker:\x0f \x0303Sample <john@example.test>\x0f'
74 ' work * \x021\x0f / \x02\x0f: foo bar ', irker._format())
77 irker = self.get_irker()
78 server = self.get_server()
80 while server.data is None:
83 self.assertEqual(server.data,
84 '{"to": ["irc://chat.example.test/commits"]'
85 ', "privmsg": "bzrirker: Sample <john@example.test>'
86 ' work * 1 / : foo bar "}\n')
88 def get_irker(self, text=sample_config):
89 my_config = config.MemoryStack(text)
90 self.branch = BzrDir.create_branch_convenience('.')
91 tree = self.branch.bzrdir.open_workingtree()
92 tree.commit('foo bar\nfuzzy\nwuzzy', rev_id='A',
96 committer="Sample <john@example.test>",
98 irker = IrkerSender(self.branch, 'A', my_config)
99 # We're not calling send, so do the setup stuff here
100 irker._setup_revision_and_revno()
103 def get_server(self):
104 server = TCPServer(('localhost', 6677), MyHandler)
106 thread = threading.Thread(target=server.serve_forever)