| OLD | NEW |
| (Empty) |
| 1 # -*- test-case-name: buildbot.test.test_mailparse -*- | |
| 2 | |
| 3 import time | |
| 4 import os | |
| 5 from twisted.trial import unittest | |
| 6 from twisted.python import util | |
| 7 from buildbot.changes import mail | |
| 8 | |
| 9 import sys | |
| 10 if sys.version_info[:3] < (2,4,0): | |
| 11 from sets import Set as set | |
| 12 | |
| 13 class TestFreshCVS(unittest.TestCase): | |
| 14 | |
| 15 def get(self, msg): | |
| 16 msg = util.sibpath(__file__, msg) | |
| 17 s = mail.FCMaildirSource(None) | |
| 18 return s.parse_file(open(msg, "r")) | |
| 19 | |
| 20 def testMsg1(self): | |
| 21 c = self.get("mail/freshcvs.1") | |
| 22 self.assertEqual(c.who, "moshez") | |
| 23 self.assertEqual(set(c.files), set(["Twisted/debian/python-twisted.menu.
in"])) | |
| 24 self.assertEqual(c.comments, "Instance massenger, apparently\n") | |
| 25 self.assertEqual(c.isdir, 0) | |
| 26 | |
| 27 def testMsg2(self): | |
| 28 c = self.get("mail/freshcvs.2") | |
| 29 self.assertEqual(c.who, "itamarst") | |
| 30 self.assertEqual(set(c.files), set(["Twisted/twisted/web/woven/form.py", | |
| 31 "Twisted/twisted/python/formmethod.py"])) | |
| 32 self.assertEqual(c.comments, | |
| 33 "submit formmethod now subclass of Choice\n") | |
| 34 self.assertEqual(c.isdir, 0) | |
| 35 | |
| 36 def testMsg3(self): | |
| 37 # same as msg2 but missing the ViewCVS section | |
| 38 c = self.get("mail/freshcvs.3") | |
| 39 self.assertEqual(c.who, "itamarst") | |
| 40 self.assertEqual(set(c.files), set(["Twisted/twisted/web/woven/form.py", | |
| 41 "Twisted/twisted/python/formmethod.py"])) | |
| 42 self.assertEqual(c.comments, | |
| 43 "submit formmethod now subclass of Choice\n") | |
| 44 self.assertEqual(c.isdir, 0) | |
| 45 | |
| 46 def testMsg4(self): | |
| 47 # same as msg3 but also missing CVS patch section | |
| 48 c = self.get("mail/freshcvs.4") | |
| 49 self.assertEqual(c.who, "itamarst") | |
| 50 self.assertEqual(set(c.files), set(["Twisted/twisted/web/woven/form.py", | |
| 51 "Twisted/twisted/python/formmethod.py"])) | |
| 52 self.assertEqual(c.comments, | |
| 53 "submit formmethod now subclass of Choice\n") | |
| 54 self.assertEqual(c.isdir, 0) | |
| 55 | |
| 56 def testMsg5(self): | |
| 57 # creates a directory | |
| 58 c = self.get("mail/freshcvs.5") | |
| 59 self.assertEqual(c.who, "etrepum") | |
| 60 self.assertEqual(set(c.files), set(["Twisted/doc/examples/cocoaDemo"])) | |
| 61 self.assertEqual(c.comments, | |
| 62 "Directory /cvs/Twisted/doc/examples/cocoaDemo added to
the repository\n") | |
| 63 self.assertEqual(c.isdir, 1) | |
| 64 | |
| 65 def testMsg6(self): | |
| 66 # adds files | |
| 67 c = self.get("mail/freshcvs.6") | |
| 68 self.assertEqual(c.who, "etrepum") | |
| 69 self.assertEqual(set(c.files), set([ | |
| 70 "Twisted/doc/examples/cocoaDemo/MyAppDelegate.py", | |
| 71 "Twisted/doc/examples/cocoaDemo/__main__.py", | |
| 72 "Twisted/doc/examples/cocoaDemo/bin-python-main.m", | |
| 73 "Twisted/doc/examples/cocoaDemo/English.lproj/InfoPlist.strings", | |
| 74 "Twisted/doc/examples/cocoaDemo/English.lproj/MainMenu.nib/classes.n
ib", | |
| 75 "Twisted/doc/examples/cocoaDemo/English.lproj/MainMenu.nib/info.nib"
, | |
| 76 "Twisted/doc/examples/cocoaDemo/English.lproj/MainMenu.nib/keyedobje
cts.nib", | |
| 77 "Twisted/doc/examples/cocoaDemo/cocoaDemo.pbproj/project.pbxproj"])) | |
| 78 self.assertEqual(c.comments, | |
| 79 "Cocoa (OS X) clone of the QT demo, using polling react
or\n\nRequires pyobjc ( http://pyobjc.sourceforge.net ), it's not much different
than the template project. The reactor is iterated periodically by a repeating
NSTimer.\n") | |
| 80 self.assertEqual(c.isdir, 0) | |
| 81 | |
| 82 def testMsg7(self): | |
| 83 # deletes files | |
| 84 c = self.get("mail/freshcvs.7") | |
| 85 self.assertEqual(c.who, "etrepum") | |
| 86 self.assertEqual(set(c.files), set([ | |
| 87 "Twisted/doc/examples/cocoaDemo/MyAppDelegate.py", | |
| 88 "Twisted/doc/examples/cocoaDemo/__main__.py", | |
| 89 "Twisted/doc/examples/cocoaDemo/bin-python-main.m", | |
| 90 "Twisted/doc/examples/cocoaDemo/English.lproj/InfoPlist.strings", | |
| 91 "Twisted/doc/examples/cocoaDemo/English.lproj/MainMenu.nib/classes.n
ib", | |
| 92 "Twisted/doc/examples/cocoaDemo/English.lproj/MainMenu.nib/info.nib"
, | |
| 93 "Twisted/doc/examples/cocoaDemo/English.lproj/MainMenu.nib/keyedobje
cts.nib", | |
| 94 "Twisted/doc/examples/cocoaDemo/cocoaDemo.pbproj/project.pbxproj"])) | |
| 95 self.assertEqual(c.comments, | |
| 96 "Directories break debian build script, waiting for rea
sonable fix\n") | |
| 97 self.assertEqual(c.isdir, 0) | |
| 98 | |
| 99 def testMsg8(self): | |
| 100 # files outside Twisted/ | |
| 101 c = self.get("mail/freshcvs.8") | |
| 102 self.assertEqual(c.who, "acapnotic") | |
| 103 self.assertEqual(set(c.files), set([ "CVSROOT/freshCfg" ])) | |
| 104 self.assertEqual(c.comments, "it doesn't work with invalid syntax\n") | |
| 105 self.assertEqual(c.isdir, 0) | |
| 106 | |
| 107 def testMsg9(self): | |
| 108 # also creates a directory | |
| 109 c = self.get("mail/freshcvs.9") | |
| 110 self.assertEqual(c.who, "exarkun") | |
| 111 self.assertEqual(set(c.files), set(["Twisted/sandbox/exarkun/persist-plu
gin"])) | |
| 112 self.assertEqual(c.comments, | |
| 113 "Directory /cvs/Twisted/sandbox/exarkun/persist-plugin
added to the repository\n") | |
| 114 self.assertEqual(c.isdir, 1) | |
| 115 | |
| 116 | |
| 117 class TestFreshCVS_Prefix(unittest.TestCase): | |
| 118 def get(self, msg): | |
| 119 msg = util.sibpath(__file__, msg) | |
| 120 s = mail.FCMaildirSource(None) | |
| 121 return s.parse_file(open(msg, "r"), prefix="Twisted/") | |
| 122 | |
| 123 def testMsg1p(self): | |
| 124 c = self.get("mail/freshcvs.1") | |
| 125 self.assertEqual(c.who, "moshez") | |
| 126 self.assertEqual(set(c.files), set(["debian/python-twisted.menu.in"])) | |
| 127 self.assertEqual(c.comments, "Instance massenger, apparently\n") | |
| 128 | |
| 129 def testMsg2p(self): | |
| 130 c = self.get("mail/freshcvs.2") | |
| 131 self.assertEqual(c.who, "itamarst") | |
| 132 self.assertEqual(set(c.files), set(["twisted/web/woven/form.py", | |
| 133 "twisted/python/formmethod.py"])) | |
| 134 self.assertEqual(c.comments, | |
| 135 "submit formmethod now subclass of Choice\n") | |
| 136 | |
| 137 def testMsg3p(self): | |
| 138 # same as msg2 but missing the ViewCVS section | |
| 139 c = self.get("mail/freshcvs.3") | |
| 140 self.assertEqual(c.who, "itamarst") | |
| 141 self.assertEqual(set(c.files), set(["twisted/web/woven/form.py", | |
| 142 "twisted/python/formmethod.py"])) | |
| 143 self.assertEqual(c.comments, | |
| 144 "submit formmethod now subclass of Choice\n") | |
| 145 | |
| 146 def testMsg4p(self): | |
| 147 # same as msg3 but also missing CVS patch section | |
| 148 c = self.get("mail/freshcvs.4") | |
| 149 self.assertEqual(c.who, "itamarst") | |
| 150 self.assertEqual(set(c.files), set(["twisted/web/woven/form.py", | |
| 151 "twisted/python/formmethod.py"])) | |
| 152 self.assertEqual(c.comments, | |
| 153 "submit formmethod now subclass of Choice\n") | |
| 154 | |
| 155 def testMsg5p(self): | |
| 156 # creates a directory | |
| 157 c = self.get("mail/freshcvs.5") | |
| 158 self.assertEqual(c.who, "etrepum") | |
| 159 self.assertEqual(set(c.files), set(["doc/examples/cocoaDemo"])) | |
| 160 self.assertEqual(c.comments, | |
| 161 "Directory /cvs/Twisted/doc/examples/cocoaDemo added to
the repository\n") | |
| 162 self.assertEqual(c.isdir, 1) | |
| 163 | |
| 164 def testMsg6p(self): | |
| 165 # adds files | |
| 166 c = self.get("mail/freshcvs.6") | |
| 167 self.assertEqual(c.who, "etrepum") | |
| 168 self.assertEqual(set(c.files), set([ | |
| 169 "doc/examples/cocoaDemo/MyAppDelegate.py", | |
| 170 "doc/examples/cocoaDemo/__main__.py", | |
| 171 "doc/examples/cocoaDemo/bin-python-main.m", | |
| 172 "doc/examples/cocoaDemo/English.lproj/InfoPlist.strings", | |
| 173 "doc/examples/cocoaDemo/English.lproj/MainMenu.nib/classes.nib", | |
| 174 "doc/examples/cocoaDemo/English.lproj/MainMenu.nib/info.nib", | |
| 175 "doc/examples/cocoaDemo/English.lproj/MainMenu.nib/keyedobjects.nib"
, | |
| 176 "doc/examples/cocoaDemo/cocoaDemo.pbproj/project.pbxproj"])) | |
| 177 self.assertEqual(c.comments, | |
| 178 "Cocoa (OS X) clone of the QT demo, using polling react
or\n\nRequires pyobjc ( http://pyobjc.sourceforge.net ), it's not much different
than the template project. The reactor is iterated periodically by a repeating
NSTimer.\n") | |
| 179 self.assertEqual(c.isdir, 0) | |
| 180 | |
| 181 def testMsg7p(self): | |
| 182 # deletes files | |
| 183 c = self.get("mail/freshcvs.7") | |
| 184 self.assertEqual(c.who, "etrepum") | |
| 185 self.assertEqual(set(c.files), set([ | |
| 186 "doc/examples/cocoaDemo/MyAppDelegate.py", | |
| 187 "doc/examples/cocoaDemo/__main__.py", | |
| 188 "doc/examples/cocoaDemo/bin-python-main.m", | |
| 189 "doc/examples/cocoaDemo/English.lproj/InfoPlist.strings", | |
| 190 "doc/examples/cocoaDemo/English.lproj/MainMenu.nib/classes.nib", | |
| 191 "doc/examples/cocoaDemo/English.lproj/MainMenu.nib/info.nib", | |
| 192 "doc/examples/cocoaDemo/English.lproj/MainMenu.nib/keyedobjects.nib"
, | |
| 193 "doc/examples/cocoaDemo/cocoaDemo.pbproj/project.pbxproj"])) | |
| 194 self.assertEqual(c.comments, | |
| 195 "Directories break debian build script, waiting for rea
sonable fix\n") | |
| 196 self.assertEqual(c.isdir, 0) | |
| 197 | |
| 198 def testMsg8p(self): | |
| 199 # files outside Twisted/ | |
| 200 c = self.get("mail/freshcvs.8") | |
| 201 self.assertEqual(c, None) | |
| 202 | |
| 203 | |
| 204 class TestSyncmail(unittest.TestCase): | |
| 205 def get(self, msg): | |
| 206 msg = util.sibpath(__file__, msg) | |
| 207 s = mail.SyncmailMaildirSource(None) | |
| 208 return s.parse_file(open(msg, "r"), prefix="buildbot/") | |
| 209 | |
| 210 def getNoPrefix(self, msg): | |
| 211 msg = util.sibpath(__file__, msg) | |
| 212 s = mail.SyncmailMaildirSource(None) | |
| 213 return s.parse_file(open(msg, "r")) | |
| 214 | |
| 215 def testMsgS1(self): | |
| 216 c = self.get("mail/syncmail.1") | |
| 217 self.failUnless(c is not None) | |
| 218 self.assertEqual(c.who, "warner") | |
| 219 self.assertEqual(set(c.files), set(["buildbot/changes/freshcvsmail.py"])
) | |
| 220 self.assertEqual(c.comments, | |
| 221 "remove leftover code, leave a temporary compatibility
import. Note! Start\nimporting FCMaildirSource from changes.mail instead of chan
ges.freshcvsmail\n") | |
| 222 self.assertEqual(c.isdir, 0) | |
| 223 | |
| 224 def testMsgS2(self): | |
| 225 c = self.get("mail/syncmail.2") | |
| 226 self.assertEqual(c.who, "warner") | |
| 227 self.assertEqual(set(c.files), set(["ChangeLog"])) | |
| 228 self.assertEqual(c.comments, "\t* NEWS: started adding new features\n") | |
| 229 self.assertEqual(c.isdir, 0) | |
| 230 | |
| 231 def testMsgS3(self): | |
| 232 c = self.get("mail/syncmail.3") | |
| 233 self.failUnless(c == None) | |
| 234 | |
| 235 def testMsgS4(self): | |
| 236 c = self.get("mail/syncmail.4") | |
| 237 self.assertEqual(c.who, "warner") | |
| 238 self.assertEqual(set(c.files), | |
| 239 set(["test/mail/syncmail.1", | |
| 240 "test/mail/syncmail.2", | |
| 241 "test/mail/syncmail.3"])) | |
| 242 self.assertEqual(c.comments, "test cases for syncmail parser\n") | |
| 243 self.assertEqual(c.isdir, 0) | |
| 244 self.assertEqual(c.branch, None) | |
| 245 | |
| 246 # tests a tag | |
| 247 def testMsgS5(self): | |
| 248 c = self.getNoPrefix("mail/syncmail.5") | |
| 249 self.failUnless(c) | |
| 250 self.assertEqual(c.who, "thomas") | |
| 251 self.assertEqual(set(c.files), | |
| 252 set(['test1/MANIFEST', | |
| 253 'test1/Makefile.am', | |
| 254 'test1/autogen.sh', | |
| 255 'test1/configure.in'])) | |
| 256 self.assertEqual(c.branch, "BRANCH-DEVEL") | |
| 257 self.assertEqual(c.isdir, 0) | |
| 258 | |
| 259 | |
| 260 class TestSVNCommitEmail(unittest.TestCase): | |
| 261 def get(self, msg, prefix): | |
| 262 msg = util.sibpath(__file__, msg) | |
| 263 s = mail.SVNCommitEmailMaildirSource(None) | |
| 264 return s.parse_file(open(msg, "r"), prefix) | |
| 265 | |
| 266 def test1(self): | |
| 267 c = self.get("mail/svn-commit.1", "spamassassin/trunk/") | |
| 268 self.failUnless(c) | |
| 269 self.failUnlessEqual(c.who, "felicity") | |
| 270 self.failUnlessEqual(set(c.files), set(["sa-update.raw"])) | |
| 271 self.failUnlessEqual(c.branch, None) | |
| 272 self.failUnlessEqual(c.comments, | |
| 273 "bug 4864: remove extraneous front-slash " | |
| 274 "from gpghomedir path\n") | |
| 275 | |
| 276 def test2a(self): | |
| 277 c = self.get("mail/svn-commit.2", "spamassassin/trunk/") | |
| 278 self.failIf(c) | |
| 279 | |
| 280 def test2b(self): | |
| 281 c = self.get("mail/svn-commit.2", "spamassassin/branches/3.1/") | |
| 282 self.failUnless(c) | |
| 283 self.failUnlessEqual(c.who, "sidney") | |
| 284 self.failUnlessEqual(set(c.files), | |
| 285 set(["lib/Mail/SpamAssassin/Timeout.pm", | |
| 286 "MANIFEST", | |
| 287 "lib/Mail/SpamAssassin/Logger.pm", | |
| 288 "lib/Mail/SpamAssassin/Plugin/DCC.pm", | |
| 289 "lib/Mail/SpamAssassin/Plugin/DomainKeys.pm", | |
| 290 "lib/Mail/SpamAssassin/Plugin/Pyzor.pm", | |
| 291 "lib/Mail/SpamAssassin/Plugin/Razor2.pm", | |
| 292 "lib/Mail/SpamAssassin/Plugin/SPF.pm", | |
| 293 "lib/Mail/SpamAssassin/SpamdForkScaling.pm", | |
| 294 "spamd/spamd.raw", | |
| 295 ])) | |
| 296 self.failUnlessEqual(c.comments, | |
| 297 "Bug 4696: consolidated fixes for timeout bugs\n") | |
| 298 | |
| 299 | |
| 300 class TestBzrLaunchpadEmail(unittest.TestCase): | |
| 301 def get(self, msg, **kwargs): | |
| 302 msg = util.sibpath(__file__, "mail/" + msg) | |
| 303 s = mail.BzrLaunchpadEmailMaildirSource(None, None, **kwargs) | |
| 304 if not os.path.exists(msg): | |
| 305 raise unittest.SkipTest("'%s' not found" % msg) | |
| 306 return s.parse_file(open(msg, "r")) | |
| 307 | |
| 308 # Modified file | |
| 309 def test1(self): | |
| 310 c = self.get("launchpad.1") | |
| 311 self.failUnlessEqual(c.revision, "2700") | |
| 312 self.failUnlessEqual(c.who, "Kristian Nielsen <knielsen@loke>") | |
| 313 self.failUnlessEqual(c.branch, "lp:~knielsen/maria/tmp-buildbot-test") | |
| 314 self.failUnlessEqual(time.gmtime(c.when)[0:6], (2009, 5, 15, 6, 40, 43)) | |
| 315 self.failUnlessEqual(c.comments, "test commit 2\n") | |
| 316 self.failUnlessEqual(set(c.files), set(["README MODIFIED", | |
| 317 "Makefile.am MODIFIED"])) | |
| 318 | |
| 319 # Added file and branchMap match with lp: | |
| 320 def test2(self): | |
| 321 c = self.get("launchpad.2", | |
| 322 branchMap = { "lp:~knielsen/maria/tmp-buildbot-test" : "5.1
", | |
| 323 "foobar" : "baz" }, | |
| 324 defaultBranch = "bogux") | |
| 325 self.failUnlessEqual(c.revision, "2701") | |
| 326 self.failUnlessEqual(c.who, "Kristian Nielsen <knielsen@loke>") | |
| 327 self.failUnlessEqual(c.branch, "5.1") | |
| 328 self.failUnlessEqual(time.gmtime(c.when)[0:6], (2009, 5, 15, 8, 35, 43)) | |
| 329 self.failUnlessEqual(c.comments, "test add file\n") | |
| 330 self.failUnlessEqual(set(c.files), set(["test-add-file ADDED"])) | |
| 331 | |
| 332 # Rename file and branchMap match without lp: | |
| 333 def test3(self): | |
| 334 c = self.get("launchpad.3", | |
| 335 branchMap = { "~knielsen/maria/tmp-buildbot-test" : "5.1", | |
| 336 "foobar" : "baz" }, | |
| 337 defaultBranch = "bogux") | |
| 338 self.failUnlessEqual(c.revision, "2702") | |
| 339 self.failUnlessEqual(c.who, "Kristian Nielsen <knielsen@loke>") | |
| 340 self.failUnlessEqual(c.branch, "5.1") | |
| 341 self.failUnlessEqual(time.gmtime(c.when)[0:6], (2009, 5, 15, 8, 36, 24)) | |
| 342 self.failUnlessEqual(c.comments, "test rename file\n") | |
| 343 self.failUnlessEqual(set(c.files), set(["test-add-file RENAMED test-rena
me-file"])) | |
| 344 | |
| 345 # Remove file and branchMap fallback to defaultBranch | |
| 346 def test4(self): | |
| 347 c = self.get("launchpad.4", | |
| 348 branchMap = { "lp::~knielsen/maria/tmp-buildbot-test" : "5.
1", | |
| 349 "foobar" : "baz" }, | |
| 350 defaultBranch = "db") | |
| 351 self.failUnlessEqual(c.revision, "2703") | |
| 352 self.failUnlessEqual(c.who, "Kristian Nielsen <knielsen@loke>") | |
| 353 self.failUnlessEqual(c.branch, "db") | |
| 354 self.failUnlessEqual(time.gmtime(c.when)[0:6], (2009, 5, 15, 8, 36, 35)) | |
| 355 self.failUnlessEqual(c.comments, "test remove file\n") | |
| 356 self.failUnlessEqual(set(c.files), set(["test-rename-file REMOVED"])) | |
| 357 | |
| 358 # MIME decoding of message body and branch name fallback to repository name | |
| 359 def test5(self): | |
| 360 c = self.get("launchpad.5", | |
| 361 branchMap = { "lp::~knielsen/maria/tmp-buildbot-test" : "5.
1", | |
| 362 "foobar" : "baz" }) | |
| 363 self.failUnlessEqual(c.revision, "2704") | |
| 364 self.failUnlessEqual(c.who, "Kristian Nielsen <knielsen@loke>") | |
| 365 self.failUnlessEqual(c.branch, "lp:~knielsen/maria/tmp-buildbot-test") | |
| 366 self.failUnlessEqual(time.gmtime(c.when)[0:6], (2009, 5, 15, 8, 39, 58)) | |
| 367 self.failUnlessEqual(c.comments, "10\n") | |
| 368 self.failUnlessEqual(set(c.files), set(["tricky=>rename ADDED"])) | |
| 369 | |
| 370 # Both rename and modify in same message. | |
| 371 def test6(self): | |
| 372 c = self.get("launchpad.6") | |
| 373 self.failUnlessEqual(c.revision, "2706") | |
| 374 self.failUnlessEqual(c.who, "Kristian Nielsen <knielsen@loke>") | |
| 375 self.failUnlessEqual(c.branch, "lp:~knielsen/maria/tmp-buildbot-test") | |
| 376 self.failUnlessEqual(time.gmtime(c.when)[0:6], (2009, 5, 15, 8, 47, 13)) | |
| 377 self.failUnlessEqual(c.comments, "rename+mod\n") | |
| 378 self.failUnlessEqual(set(c.files), | |
| 379 set(["renamed with => tricky <= name RENAMED better
_name.txt", | |
| 380 "better_name.txt MODIFIED"])) | |
| 381 | |
| 382 # Test equality comparison (for working config reload). | |
| 383 def test_bzr_mail_reload(self): | |
| 384 s0 = mail.BzrLaunchpadEmailMaildirSource("/dir1") | |
| 385 s1 = mail.BzrLaunchpadEmailMaildirSource("/dir2") | |
| 386 self.failIfEqual(s0,s1) | |
| 387 s2 = mail.BzrLaunchpadEmailMaildirSource("/dir1", prefix = "lp:") | |
| 388 self.failIfEqual(s0,s2) | |
| 389 s3 = mail.BzrLaunchpadEmailMaildirSource("/dir1", prefix = "pl:") | |
| 390 self.failIfEqual(s2,s3) | |
| 391 s4 = mail.BzrLaunchpadEmailMaildirSource("/dir1", | |
| 392 branchMap = { "a" : "A" }) | |
| 393 self.failIfEqual(s0,s4) | |
| 394 s5 = mail.BzrLaunchpadEmailMaildirSource("/dir1", | |
| 395 branchMap = { "a" : "A", "b" :
"B" }) | |
| 396 self.failIfEqual(s4,s5) | |
| 397 s6 = mail.BzrLaunchpadEmailMaildirSource("/dir1", | |
| 398 defaultBranch = "b1") | |
| 399 self.failIfEqual(s0,s6) | |
| 400 s7 = mail.BzrLaunchpadEmailMaildirSource("/dir1", | |
| 401 defaultBranch = "b2") | |
| 402 self.failIfEqual(s6,s7) | |
| 403 s8 = mail.BzrLaunchpadEmailMaildirSource("/dir1", | |
| 404 prefix = "lp", | |
| 405 branchMap = { "c" : "C" }, | |
| 406 defaultBranch = "b3") | |
| 407 self.failIfEqual(s6,s8) | |
| 408 s9 = mail.BzrLaunchpadEmailMaildirSource("/dir1", | |
| 409 prefix = "lp", | |
| 410 branchMap = { "c" : "C" }, | |
| 411 defaultBranch = "b3") | |
| 412 s9.dummy = 42 | |
| 413 self.assertEqual(s8,s9) | |
| OLD | NEW |