| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright (c) 2010 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """Unit tests for presubmit_support.py and presubmit_canned_checks.py.""" | 6 """Unit tests for presubmit_support.py and presubmit_canned_checks.py.""" |
| 7 | 7 |
| 8 # pylint is too confused. |
| 9 # pylint: disable=E1101,E1103,W0212,W0403 |
| 10 |
| 8 import StringIO | 11 import StringIO |
| 9 | 12 |
| 10 # Fixes include path. | 13 # Fixes include path. |
| 11 from super_mox import mox, SuperMoxTestBase | 14 from super_mox import mox, SuperMoxTestBase |
| 12 | 15 |
| 13 import presubmit_support as presubmit | 16 import presubmit_support as presubmit |
| 14 # Shortcut. | 17 # Shortcut. |
| 15 presubmit_canned_checks = presubmit.presubmit_canned_checks | 18 presubmit_canned_checks = presubmit.presubmit_canned_checks |
| 16 | 19 |
| 17 | 20 |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 159 ' STORY =http://foo/ \t', | 162 ' STORY =http://foo/ \t', |
| 160 'and some more regular text \t') | 163 'and some more regular text \t') |
| 161 files = [ | 164 files = [ |
| 162 ['A', 'foo/blat.cc'], | 165 ['A', 'foo/blat.cc'], |
| 163 ['M', 'binary.dll'], # a binary file | 166 ['M', 'binary.dll'], # a binary file |
| 164 ['A', 'isdir'], # a directory | 167 ['A', 'isdir'], # a directory |
| 165 ['?', 'flop/notfound.txt'], # not found in SVN, still exists locally | 168 ['?', 'flop/notfound.txt'], # not found in SVN, still exists locally |
| 166 ['D', 'boo/flap.h'], | 169 ['D', 'boo/flap.h'], |
| 167 ] | 170 ] |
| 168 blat = presubmit.os.path.join(self.fake_root_dir, 'foo', 'blat.cc') | 171 blat = presubmit.os.path.join(self.fake_root_dir, 'foo', 'blat.cc') |
| 169 notfound = presubmit.os.path.join(self.fake_root_dir, 'flop', 'notfound.txt'
) | 172 notfound = presubmit.os.path.join( |
| 173 self.fake_root_dir, 'flop', 'notfound.txt') |
| 170 flap = presubmit.os.path.join(self.fake_root_dir, 'boo', 'flap.h') | 174 flap = presubmit.os.path.join(self.fake_root_dir, 'boo', 'flap.h') |
| 171 binary = presubmit.os.path.join(self.fake_root_dir, 'binary.dll') | 175 binary = presubmit.os.path.join(self.fake_root_dir, 'binary.dll') |
| 172 isdir = presubmit.os.path.join(self.fake_root_dir, 'isdir') | 176 isdir = presubmit.os.path.join(self.fake_root_dir, 'isdir') |
| 173 presubmit.os.path.exists(blat).AndReturn(True) | 177 presubmit.os.path.exists(blat).AndReturn(True) |
| 174 presubmit.os.path.isdir(blat).AndReturn(False) | 178 presubmit.os.path.isdir(blat).AndReturn(False) |
| 175 presubmit.os.path.exists(binary).AndReturn(True) | 179 presubmit.os.path.exists(binary).AndReturn(True) |
| 176 presubmit.os.path.isdir(binary).AndReturn(False) | 180 presubmit.os.path.isdir(binary).AndReturn(False) |
| 177 presubmit.os.path.exists(isdir).AndReturn(True) | 181 presubmit.os.path.exists(isdir).AndReturn(True) |
| 178 presubmit.os.path.isdir(isdir).AndReturn(True) | 182 presubmit.os.path.isdir(isdir).AndReturn(True) |
| 179 presubmit.os.path.exists(notfound).AndReturn(True) | 183 presubmit.os.path.exists(notfound).AndReturn(True) |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 328 presubmit.os.path.isfile(root_path).AndReturn(True) | 332 presubmit.os.path.isfile(root_path).AndReturn(True) |
| 329 presubmit.os.path.isfile(haspresubmit_path).AndReturn(True) | 333 presubmit.os.path.isfile(haspresubmit_path).AndReturn(True) |
| 330 presubmit.gclient_utils.FileRead(root_path, | 334 presubmit.gclient_utils.FileRead(root_path, |
| 331 'rU').AndReturn(self.presubmit_text) | 335 'rU').AndReturn(self.presubmit_text) |
| 332 presubmit.gclient_utils.FileRead(haspresubmit_path, | 336 presubmit.gclient_utils.FileRead(haspresubmit_path, |
| 333 'rU').AndReturn(self.presubmit_text) | 337 'rU').AndReturn(self.presubmit_text) |
| 334 presubmit.random.randint(0, 4).AndReturn(1) | 338 presubmit.random.randint(0, 4).AndReturn(1) |
| 335 self.mox.ReplayAll() | 339 self.mox.ReplayAll() |
| 336 | 340 |
| 337 output = StringIO.StringIO() | 341 output = StringIO.StringIO() |
| 338 input = StringIO.StringIO('y\n') | 342 input_buf = StringIO.StringIO('y\n') |
| 339 change = presubmit.Change('mychange', '\n'.join(description_lines), | 343 change = presubmit.Change('mychange', '\n'.join(description_lines), |
| 340 self.fake_root_dir, files, 0, 0) | 344 self.fake_root_dir, files, 0, 0) |
| 341 self.failIf(presubmit.DoPresubmitChecks(change, False, True, output, input, | 345 self.failIf(presubmit.DoPresubmitChecks( |
| 342 None, False)) | 346 change, False, True, output, input_buf, None, False)) |
| 343 self.assertEqual(output.getvalue().count('!!'), 2) | 347 self.assertEqual(output.getvalue().count('!!'), 2) |
| 344 self.checkstdout('Running presubmit hooks...\n') | 348 self.checkstdout('Running presubmit hooks...\n') |
| 345 | 349 |
| 346 def testDoPresubmitChecksPromptsAfterWarnings(self): | 350 def testDoPresubmitChecksPromptsAfterWarnings(self): |
| 347 join = presubmit.os.path.join | 351 join = presubmit.os.path.join |
| 348 description_lines = ('Hello there', | 352 description_lines = ('Hello there', |
| 349 'this is a change', | 353 'this is a change', |
| 350 'NOSUCHKEY=http://tracker/123') | 354 'NOSUCHKEY=http://tracker/123') |
| 351 files = [ | 355 files = [ |
| 352 ['A', join('haspresubmit', 'blat.cc')], | 356 ['A', join('haspresubmit', 'blat.cc')], |
| 353 ] | 357 ] |
| 354 presubmit_path = join(self.fake_root_dir, 'PRESUBMIT.py') | 358 presubmit_path = join(self.fake_root_dir, 'PRESUBMIT.py') |
| 355 haspresubmit_path = join(self.fake_root_dir, 'haspresubmit', 'PRESUBMIT.py') | 359 haspresubmit_path = join(self.fake_root_dir, 'haspresubmit', 'PRESUBMIT.py') |
| 356 inherit_path = presubmit.os.path.join(self.fake_root_dir, | 360 inherit_path = presubmit.os.path.join(self.fake_root_dir, |
| 357 self._INHERIT_SETTINGS) | 361 self._INHERIT_SETTINGS) |
| 358 for i in range(2): | 362 for _ in range(2): |
| 359 presubmit.os.path.isfile(inherit_path).AndReturn(False) | 363 presubmit.os.path.isfile(inherit_path).AndReturn(False) |
| 360 presubmit.os.path.isfile(presubmit_path).AndReturn(True) | 364 presubmit.os.path.isfile(presubmit_path).AndReturn(True) |
| 361 presubmit.os.path.isfile(haspresubmit_path).AndReturn(True) | 365 presubmit.os.path.isfile(haspresubmit_path).AndReturn(True) |
| 362 presubmit.gclient_utils.FileRead(presubmit_path, 'rU' | 366 presubmit.gclient_utils.FileRead(presubmit_path, 'rU' |
| 363 ).AndReturn(self.presubmit_text) | 367 ).AndReturn(self.presubmit_text) |
| 364 presubmit.gclient_utils.FileRead(haspresubmit_path, 'rU' | 368 presubmit.gclient_utils.FileRead(haspresubmit_path, 'rU' |
| 365 ).AndReturn(self.presubmit_text) | 369 ).AndReturn(self.presubmit_text) |
| 366 presubmit.random.randint(0, 4).AndReturn(1) | 370 presubmit.random.randint(0, 4).AndReturn(1) |
| 367 presubmit.random.randint(0, 4).AndReturn(1) | 371 presubmit.random.randint(0, 4).AndReturn(1) |
| 368 self.mox.ReplayAll() | 372 self.mox.ReplayAll() |
| 369 | 373 |
| 370 output = StringIO.StringIO() | 374 output = StringIO.StringIO() |
| 371 input = StringIO.StringIO('n\n') # say no to the warning | 375 input_buf = StringIO.StringIO('n\n') # say no to the warning |
| 372 change = presubmit.Change('mychange', '\n'.join(description_lines), | 376 change = presubmit.Change('mychange', '\n'.join(description_lines), |
| 373 self.fake_root_dir, files, 0, 0) | 377 self.fake_root_dir, files, 0, 0) |
| 374 self.failIf(presubmit.DoPresubmitChecks(change, False, True, output, input, | 378 self.failIf(presubmit.DoPresubmitChecks( |
| 375 None, True)) | 379 change, False, True, output, input_buf, None, True)) |
| 376 self.assertEqual(output.getvalue().count('??'), 2) | 380 self.assertEqual(output.getvalue().count('??'), 2) |
| 377 | 381 |
| 378 output = StringIO.StringIO() | 382 output = StringIO.StringIO() |
| 379 input = StringIO.StringIO('y\n') # say yes to the warning | 383 input_buf = StringIO.StringIO('y\n') # say yes to the warning |
| 380 self.failUnless(presubmit.DoPresubmitChecks(change, False, True, output, | 384 self.failUnless(presubmit.DoPresubmitChecks( |
| 381 input, None, True)) | 385 change, False, True, output, input_buf, None, True)) |
| 382 self.assertEquals(output.getvalue().count('??'), 2) | 386 self.assertEquals(output.getvalue().count('??'), 2) |
| 383 self.checkstdout('Running presubmit hooks...\nRunning presubmit hooks...\n') | 387 self.checkstdout('Running presubmit hooks...\nRunning presubmit hooks...\n') |
| 384 | 388 |
| 385 def testDoPresubmitChecksNoWarningPromptIfErrors(self): | 389 def testDoPresubmitChecksNoWarningPromptIfErrors(self): |
| 386 join = presubmit.os.path.join | 390 join = presubmit.os.path.join |
| 387 description_lines = ('Hello there', | 391 description_lines = ('Hello there', |
| 388 'this is a change', | 392 'this is a change', |
| 389 'NOSUCHKEY=http://tracker/123', | 393 'NOSUCHKEY=http://tracker/123', |
| 390 'REALLYNOSUCHKEY=http://tracker/123') | 394 'REALLYNOSUCHKEY=http://tracker/123') |
| 391 files = [ | 395 files = [ |
| 392 ['A', join('haspresubmit', 'blat.cc')], | 396 ['A', join('haspresubmit', 'blat.cc')], |
| 393 ] | 397 ] |
| 394 presubmit_path = join(self.fake_root_dir, 'PRESUBMIT.py') | 398 presubmit_path = join(self.fake_root_dir, 'PRESUBMIT.py') |
| 395 haspresubmit_path = join(self.fake_root_dir, 'haspresubmit', | 399 haspresubmit_path = join(self.fake_root_dir, 'haspresubmit', |
| 396 'PRESUBMIT.py') | 400 'PRESUBMIT.py') |
| 397 inherit_path = presubmit.os.path.join(self.fake_root_dir, | 401 inherit_path = presubmit.os.path.join(self.fake_root_dir, |
| 398 self._INHERIT_SETTINGS) | 402 self._INHERIT_SETTINGS) |
| 399 presubmit.os.path.isfile(inherit_path).AndReturn(False) | 403 presubmit.os.path.isfile(inherit_path).AndReturn(False) |
| 400 presubmit.os.path.isfile(presubmit_path).AndReturn(True) | 404 presubmit.os.path.isfile(presubmit_path).AndReturn(True) |
| 401 presubmit.os.path.isfile(haspresubmit_path).AndReturn(True) | 405 presubmit.os.path.isfile(haspresubmit_path).AndReturn(True) |
| 402 presubmit.gclient_utils.FileRead(presubmit_path, 'rU' | 406 presubmit.gclient_utils.FileRead(presubmit_path, 'rU' |
| 403 ).AndReturn(self.presubmit_text) | 407 ).AndReturn(self.presubmit_text) |
| 404 presubmit.gclient_utils.FileRead(haspresubmit_path, 'rU').AndReturn( | 408 presubmit.gclient_utils.FileRead(haspresubmit_path, 'rU').AndReturn( |
| 405 self.presubmit_text) | 409 self.presubmit_text) |
| 406 presubmit.random.randint(0, 4).AndReturn(1) | 410 presubmit.random.randint(0, 4).AndReturn(1) |
| 407 self.mox.ReplayAll() | 411 self.mox.ReplayAll() |
| 408 | 412 |
| 409 output = StringIO.StringIO() | 413 output = StringIO.StringIO() |
| 410 input = StringIO.StringIO() # should be unused | 414 input_buf = StringIO.StringIO() # should be unused |
| 411 change = presubmit.Change('mychange', '\n'.join(description_lines), | 415 change = presubmit.Change('mychange', '\n'.join(description_lines), |
| 412 self.fake_root_dir, files, 0, 0) | 416 self.fake_root_dir, files, 0, 0) |
| 413 self.failIf(presubmit.DoPresubmitChecks(change, False, True, output, input, | 417 self.failIf(presubmit.DoPresubmitChecks( |
| 414 None, False)) | 418 change, False, True, output, input_buf, None, False)) |
| 415 self.assertEqual(output.getvalue().count('??'), 2) | 419 self.assertEqual(output.getvalue().count('??'), 2) |
| 416 self.assertEqual(output.getvalue().count('XX!!XX'), 2) | 420 self.assertEqual(output.getvalue().count('XX!!XX'), 2) |
| 417 self.assertEqual(output.getvalue().count('(y/N)'), 0) | 421 self.assertEqual(output.getvalue().count('(y/N)'), 0) |
| 418 self.checkstdout('Running presubmit hooks...\n') | 422 self.checkstdout('Running presubmit hooks...\n') |
| 419 | 423 |
| 420 def testDoDefaultPresubmitChecksAndFeedback(self): | 424 def testDoDefaultPresubmitChecksAndFeedback(self): |
| 421 join = presubmit.os.path.join | 425 join = presubmit.os.path.join |
| 422 description_lines = ('Hello there', | 426 description_lines = ('Hello there', |
| 423 'this is a change', | 427 'this is a change', |
| 424 'STORY=http://tracker/123') | 428 'STORY=http://tracker/123') |
| (...skipping 11 matching lines...) Expand all Loading... |
| 436 presubmit.os.path.isfile(inherit_path).AndReturn(False) | 440 presubmit.os.path.isfile(inherit_path).AndReturn(False) |
| 437 presubmit.os.path.isfile(join(self.fake_root_dir, 'PRESUBMIT.py') | 441 presubmit.os.path.isfile(join(self.fake_root_dir, 'PRESUBMIT.py') |
| 438 ).AndReturn(False) | 442 ).AndReturn(False) |
| 439 presubmit.os.path.isfile(join(self.fake_root_dir, | 443 presubmit.os.path.isfile(join(self.fake_root_dir, |
| 440 'haspresubmit', | 444 'haspresubmit', |
| 441 'PRESUBMIT.py')).AndReturn(False) | 445 'PRESUBMIT.py')).AndReturn(False) |
| 442 presubmit.random.randint(0, 4).AndReturn(0) | 446 presubmit.random.randint(0, 4).AndReturn(0) |
| 443 self.mox.ReplayAll() | 447 self.mox.ReplayAll() |
| 444 | 448 |
| 445 output = StringIO.StringIO() | 449 output = StringIO.StringIO() |
| 446 input = StringIO.StringIO('y\n') | 450 input_buf = StringIO.StringIO('y\n') |
| 447 # Always fail. | 451 # Always fail. |
| 448 change = presubmit.Change('mychange', '\n'.join(description_lines), | 452 change = presubmit.Change('mychange', '\n'.join(description_lines), |
| 449 self.fake_root_dir, files, 0, 0) | 453 self.fake_root_dir, files, 0, 0) |
| 450 self.failIf(presubmit.DoPresubmitChecks(change, False, True, output, input, | 454 self.failIf(presubmit.DoPresubmitChecks( |
| 451 DEFAULT_SCRIPT, False)) | 455 change, False, True, output, input_buf, DEFAULT_SCRIPT, False)) |
| 452 text = ('Warning, no presubmit.py found.\n' | 456 text = ('Warning, no presubmit.py found.\n' |
| 453 'Running default presubmit script.\n' | 457 'Running default presubmit script.\n' |
| 454 '** Presubmit ERRORS **\n!!\n\n' | 458 '** Presubmit ERRORS **\n!!\n\n' |
| 455 'Was the presubmit check useful? Please send feedback & hate mail ' | 459 'Was the presubmit check useful? Please send feedback & hate mail ' |
| 456 'to maruel@chromium.org!\n') | 460 'to maruel@chromium.org!\n') |
| 457 self.assertEquals(output.getvalue(), text) | 461 self.assertEquals(output.getvalue(), text) |
| 458 self.checkstdout('Running presubmit hooks...\n') | 462 self.checkstdout('Running presubmit hooks...\n') |
| 459 | 463 |
| 460 def testDirectoryHandling(self): | 464 def testDirectoryHandling(self): |
| 461 files = [ | 465 files = [ |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 509 def CheckChangeOnCommit(input_api, output_api): | 513 def CheckChangeOnCommit(input_api, output_api): |
| 510 raise Exception("Test error") | 514 raise Exception("Test error") |
| 511 """ | 515 """ |
| 512 presubmit.random.randint(0, 4).AndReturn(1) | 516 presubmit.random.randint(0, 4).AndReturn(1) |
| 513 inherit_path = presubmit.os.path.join(self.fake_root_dir, | 517 inherit_path = presubmit.os.path.join(self.fake_root_dir, |
| 514 self._INHERIT_SETTINGS) | 518 self._INHERIT_SETTINGS) |
| 515 presubmit.os.path.isfile(inherit_path).AndReturn(False) | 519 presubmit.os.path.isfile(inherit_path).AndReturn(False) |
| 516 self.mox.ReplayAll() | 520 self.mox.ReplayAll() |
| 517 | 521 |
| 518 output = StringIO.StringIO() | 522 output = StringIO.StringIO() |
| 519 input = StringIO.StringIO('y\n') | 523 input_buf = StringIO.StringIO('y\n') |
| 520 change = presubmit.Change( | 524 change = presubmit.Change( |
| 521 'foo', "Blah Blah\n\nSTORY=http://tracker.com/42\nBUG=boo\n", | 525 'foo', "Blah Blah\n\nSTORY=http://tracker.com/42\nBUG=boo\n", |
| 522 self.fake_root_dir, None, 0, 0) | 526 self.fake_root_dir, None, 0, 0) |
| 523 self.failUnless(presubmit.DoPresubmitChecks(change, False, True, output, | 527 self.failUnless(presubmit.DoPresubmitChecks( |
| 524 input, DEFAULT_SCRIPT, False)) | 528 change, False, True, output, input_buf, DEFAULT_SCRIPT, False)) |
| 525 self.assertEquals(output.getvalue(), | 529 self.assertEquals(output.getvalue(), |
| 526 ('Warning, no presubmit.py found.\n' | 530 ('Warning, no presubmit.py found.\n' |
| 527 'Running default presubmit script.\n' | 531 'Running default presubmit script.\n' |
| 528 '** Presubmit Messages **\n' | 532 '** Presubmit Messages **\n' |
| 529 'http://tracker.com/42\n\n')) | 533 'http://tracker.com/42\n\n')) |
| 530 self.checkstdout('Running presubmit hooks...\n') | 534 self.checkstdout('Running presubmit hooks...\n') |
| 531 | 535 |
| 532 def testGetTrySlavesExecuter(self): | 536 def testGetTrySlavesExecuter(self): |
| 533 self.mox.ReplayAll() | 537 self.mox.ReplayAll() |
| 534 | 538 |
| (...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 810 presubmit.normpath(item[1][i])) | 814 presubmit.normpath(item[1][i])) |
| 811 # Same number of expected results. | 815 # Same number of expected results. |
| 812 self.assertEquals(sorted([f.LocalPath().replace(presubmit.os.sep, '/') | 816 self.assertEquals(sorted([f.LocalPath().replace(presubmit.os.sep, '/') |
| 813 for f in results]), | 817 for f in results]), |
| 814 sorted(item[1])) | 818 sorted(item[1])) |
| 815 | 819 |
| 816 def testCustomFilter(self): | 820 def testCustomFilter(self): |
| 817 def FilterSourceFile(affected_file): | 821 def FilterSourceFile(affected_file): |
| 818 return 'a' in affected_file.LocalPath() | 822 return 'a' in affected_file.LocalPath() |
| 819 files = [('A', 'eeaee'), ('M', 'eeabee'), ('M', 'eebcee')] | 823 files = [('A', 'eeaee'), ('M', 'eeabee'), ('M', 'eebcee')] |
| 820 for (action, item) in files: | 824 for _, item in files: |
| 821 item = presubmit.os.path.join(self.fake_root_dir, item) | 825 item = presubmit.os.path.join(self.fake_root_dir, item) |
| 822 presubmit.os.path.exists(item).AndReturn(True) | 826 presubmit.os.path.exists(item).AndReturn(True) |
| 823 presubmit.os.path.isdir(item).AndReturn(False) | 827 presubmit.os.path.isdir(item).AndReturn(False) |
| 824 presubmit.scm.SVN.GetFileProperty(item, 'svn:mime-type').AndReturn(None) | 828 presubmit.scm.SVN.GetFileProperty(item, 'svn:mime-type').AndReturn(None) |
| 825 self.mox.ReplayAll() | 829 self.mox.ReplayAll() |
| 826 | 830 |
| 827 change = presubmit.SvnChange('mychange', '', self.fake_root_dir, files, 0, | 831 change = presubmit.SvnChange('mychange', '', self.fake_root_dir, files, 0, |
| 828 0) | 832 0) |
| 829 input_api = presubmit.InputApi(change, | 833 input_api = presubmit.InputApi(change, |
| 830 presubmit.os.path.join(self.fake_root_dir, | 834 presubmit.os.path.join(self.fake_root_dir, |
| 831 'PRESUBMIT.py'), | 835 'PRESUBMIT.py'), |
| 832 False) | 836 False) |
| 833 got_files = input_api.AffectedSourceFiles(FilterSourceFile) | 837 got_files = input_api.AffectedSourceFiles(FilterSourceFile) |
| 834 self.assertEquals(len(got_files), 2) | 838 self.assertEquals(len(got_files), 2) |
| 835 self.assertEquals(got_files[0].LocalPath(), 'eeaee') | 839 self.assertEquals(got_files[0].LocalPath(), 'eeaee') |
| 836 self.assertEquals(got_files[1].LocalPath(), 'eeabee') | 840 self.assertEquals(got_files[1].LocalPath(), 'eeabee') |
| 837 | 841 |
| 838 def testLambdaFilter(self): | 842 def testLambdaFilter(self): |
| 839 white_list = presubmit.InputApi.DEFAULT_BLACK_LIST + (r".*?a.*?",) | 843 white_list = presubmit.InputApi.DEFAULT_BLACK_LIST + (r".*?a.*?",) |
| 840 black_list = [r".*?b.*?"] | 844 black_list = [r".*?b.*?"] |
| 841 files = [('A', 'eeaee'), ('M', 'eeabee'), ('M', 'eebcee'), ('M', 'eecaee')] | 845 files = [('A', 'eeaee'), ('M', 'eeabee'), ('M', 'eebcee'), ('M', 'eecaee')] |
| 842 for (action, item) in files: | 846 for _, item in files: |
| 843 item = presubmit.os.path.join(self.fake_root_dir, item) | 847 item = presubmit.os.path.join(self.fake_root_dir, item) |
| 844 presubmit.os.path.exists(item).AndReturn(True) | 848 presubmit.os.path.exists(item).AndReturn(True) |
| 845 presubmit.os.path.isdir(item).AndReturn(False) | 849 presubmit.os.path.isdir(item).AndReturn(False) |
| 846 presubmit.scm.SVN.GetFileProperty(item, 'svn:mime-type').AndReturn(None) | 850 presubmit.scm.SVN.GetFileProperty(item, 'svn:mime-type').AndReturn(None) |
| 847 self.mox.ReplayAll() | 851 self.mox.ReplayAll() |
| 848 | 852 |
| 849 change = presubmit.SvnChange('mychange', '', self.fake_root_dir, files, 0, | 853 change = presubmit.SvnChange('mychange', '', self.fake_root_dir, files, 0, |
| 850 0) | 854 0) |
| 851 input_api = presubmit.InputApi(change, './PRESUBMIT.py', False) | 855 input_api = presubmit.InputApi(change, './PRESUBMIT.py', False) |
| 852 # Sample usage of overiding the default white and black lists. | 856 # Sample usage of overiding the default white and black lists. |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 921 presubmit.gclient_utils.FileRead(path, 'x').AndReturn(None) | 925 presubmit.gclient_utils.FileRead(path, 'x').AndReturn(None) |
| 922 self.mox.ReplayAll() | 926 self.mox.ReplayAll() |
| 923 | 927 |
| 924 change = presubmit.Change('foo', 'foo', self.fake_root_dir, [('M', 'AA')], | 928 change = presubmit.Change('foo', 'foo', self.fake_root_dir, [('M', 'AA')], |
| 925 0, 0) | 929 0, 0) |
| 926 input_api = presubmit.InputApi( | 930 input_api = presubmit.InputApi( |
| 927 change, presubmit.os.path.join(self.fake_root_dir, '/p'), False) | 931 change, presubmit.os.path.join(self.fake_root_dir, '/p'), False) |
| 928 input_api.ReadFile(path, 'x') | 932 input_api.ReadFile(path, 'x') |
| 929 | 933 |
| 930 def testReadFileAffectedFileDenied(self): | 934 def testReadFileAffectedFileDenied(self): |
| 931 file = presubmit.AffectedFile('boo', 'M', 'Unrelated') | 935 fileobj = presubmit.AffectedFile('boo', 'M', 'Unrelated') |
| 932 self.mox.ReplayAll() | 936 self.mox.ReplayAll() |
| 933 | 937 |
| 934 change = presubmit.Change('foo', 'foo', self.fake_root_dir, [('M', 'AA')], | 938 change = presubmit.Change('foo', 'foo', self.fake_root_dir, [('M', 'AA')], |
| 935 0, 0) | 939 0, 0) |
| 936 input_api = presubmit.InputApi( | 940 input_api = presubmit.InputApi( |
| 937 change, presubmit.os.path.join(self.fake_root_dir, '/p'), False) | 941 change, presubmit.os.path.join(self.fake_root_dir, '/p'), False) |
| 938 self.assertRaises(IOError, input_api.ReadFile, file, 'x') | 942 self.assertRaises(IOError, input_api.ReadFile, fileobj, 'x') |
| 939 | 943 |
| 940 def testReadFileAffectedFileAccepted(self): | 944 def testReadFileAffectedFileAccepted(self): |
| 941 file = presubmit.AffectedFile('AA/boo', 'M', self.fake_root_dir) | 945 fileobj = presubmit.AffectedFile('AA/boo', 'M', self.fake_root_dir) |
| 942 presubmit.gclient_utils.FileRead(file.AbsoluteLocalPath(), 'x' | 946 presubmit.gclient_utils.FileRead(fileobj.AbsoluteLocalPath(), 'x' |
| 943 ).AndReturn(None) | 947 ).AndReturn(None) |
| 944 self.mox.ReplayAll() | 948 self.mox.ReplayAll() |
| 945 | 949 |
| 946 change = presubmit.Change('foo', 'foo', self.fake_root_dir, [('M', 'AA')], | 950 change = presubmit.Change('foo', 'foo', self.fake_root_dir, [('M', 'AA')], |
| 947 0, 0) | 951 0, 0) |
| 948 input_api = presubmit.InputApi( | 952 input_api = presubmit.InputApi( |
| 949 change, presubmit.os.path.join(self.fake_root_dir, '/p'), False) | 953 change, presubmit.os.path.join(self.fake_root_dir, '/p'), False) |
| 950 input_api.ReadFile(file, 'x') | 954 input_api.ReadFile(fileobj, 'x') |
| 951 | 955 |
| 952 | 956 |
| 953 class OuputApiUnittest(PresubmitTestsBase): | 957 class OuputApiUnittest(PresubmitTestsBase): |
| 954 """Tests presubmit.OutputApi.""" | 958 """Tests presubmit.OutputApi.""" |
| 955 def testMembersChanged(self): | 959 def testMembersChanged(self): |
| 956 self.mox.ReplayAll() | 960 self.mox.ReplayAll() |
| 957 members = [ | 961 members = [ |
| 958 'MailTextResult', 'PresubmitError', 'PresubmitNotifyResult', | 962 'MailTextResult', 'PresubmitError', 'PresubmitNotifyResult', |
| 959 'PresubmitPromptWarning', 'PresubmitResult', | 963 'PresubmitPromptWarning', 'PresubmitResult', |
| 960 ] | 964 ] |
| (...skipping 21 matching lines...) Expand all Loading... |
| 982 error = presubmit.OutputApi.PresubmitError('!!!') | 986 error = presubmit.OutputApi.PresubmitError('!!!') |
| 983 self.failIf(error._Handle(output, unused_input)) | 987 self.failIf(error._Handle(output, unused_input)) |
| 984 self.failUnless(output.getvalue().count('!!!')) | 988 self.failUnless(output.getvalue().count('!!!')) |
| 985 | 989 |
| 986 output = StringIO.StringIO() | 990 output = StringIO.StringIO() |
| 987 notify = presubmit.OutputApi.PresubmitNotifyResult('?see?') | 991 notify = presubmit.OutputApi.PresubmitNotifyResult('?see?') |
| 988 self.failUnless(notify._Handle(output, unused_input)) | 992 self.failUnless(notify._Handle(output, unused_input)) |
| 989 self.failUnless(output.getvalue().count('?see?')) | 993 self.failUnless(output.getvalue().count('?see?')) |
| 990 | 994 |
| 991 output = StringIO.StringIO() | 995 output = StringIO.StringIO() |
| 992 input = StringIO.StringIO('y') | 996 input_buf = StringIO.StringIO('y') |
| 993 warning = presubmit.OutputApi.PresubmitPromptWarning('???') | 997 warning = presubmit.OutputApi.PresubmitPromptWarning('???') |
| 994 self.failUnless(warning._Handle(output, input)) | 998 self.failUnless(warning._Handle(output, input_buf)) |
| 995 self.failUnless(output.getvalue().count('???')) | 999 self.failUnless(output.getvalue().count('???')) |
| 996 | 1000 |
| 997 output = StringIO.StringIO() | 1001 output = StringIO.StringIO() |
| 998 input = StringIO.StringIO('n') | 1002 input_buf = StringIO.StringIO('n') |
| 999 warning = presubmit.OutputApi.PresubmitPromptWarning('???') | 1003 warning = presubmit.OutputApi.PresubmitPromptWarning('???') |
| 1000 self.failIf(warning._Handle(output, input)) | 1004 self.failIf(warning._Handle(output, input_buf)) |
| 1001 self.failUnless(output.getvalue().count('???')) | 1005 self.failUnless(output.getvalue().count('???')) |
| 1002 | 1006 |
| 1003 output = StringIO.StringIO() | 1007 output = StringIO.StringIO() |
| 1004 input = StringIO.StringIO('\n') | 1008 input_buf = StringIO.StringIO('\n') |
| 1005 warning = presubmit.OutputApi.PresubmitPromptWarning('???') | 1009 warning = presubmit.OutputApi.PresubmitPromptWarning('???') |
| 1006 self.failIf(warning._Handle(output, input)) | 1010 self.failIf(warning._Handle(output, input_buf)) |
| 1007 self.failUnless(output.getvalue().count('???')) | 1011 self.failUnless(output.getvalue().count('???')) |
| 1008 | 1012 |
| 1009 | 1013 |
| 1010 class AffectedFileUnittest(PresubmitTestsBase): | 1014 class AffectedFileUnittest(PresubmitTestsBase): |
| 1011 def testMembersChanged(self): | 1015 def testMembersChanged(self): |
| 1012 self.mox.ReplayAll() | 1016 self.mox.ReplayAll() |
| 1013 members = [ | 1017 members = [ |
| 1014 'AbsoluteLocalPath', 'Action', 'IsDirectory', 'IsTextFile', 'LocalPath', | 1018 'AbsoluteLocalPath', 'Action', 'IsDirectory', 'IsTextFile', 'LocalPath', |
| 1015 'NewContents', 'OldContents', 'OldFileTempPath', 'Property', 'ServerPath', | 1019 'NewContents', 'OldContents', 'OldFileTempPath', 'Property', 'ServerPath', |
| 1016 ] | 1020 ] |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1057 def testIsDirectory(self): | 1061 def testIsDirectory(self): |
| 1058 presubmit.os.path.exists('foo.cc').AndReturn(True) | 1062 presubmit.os.path.exists('foo.cc').AndReturn(True) |
| 1059 presubmit.os.path.isdir('foo.cc').AndReturn(True) | 1063 presubmit.os.path.isdir('foo.cc').AndReturn(True) |
| 1060 self.mox.ReplayAll() | 1064 self.mox.ReplayAll() |
| 1061 affected_file = presubmit.SvnAffectedFile('foo.cc', 'A') | 1065 affected_file = presubmit.SvnAffectedFile('foo.cc', 'A') |
| 1062 # Verify cache coherency. | 1066 # Verify cache coherency. |
| 1063 self.failUnless(affected_file.IsDirectory()) | 1067 self.failUnless(affected_file.IsDirectory()) |
| 1064 self.failUnless(affected_file.IsDirectory()) | 1068 self.failUnless(affected_file.IsDirectory()) |
| 1065 | 1069 |
| 1066 def testIsTextFile(self): | 1070 def testIsTextFile(self): |
| 1067 list = [presubmit.SvnAffectedFile('foo/blat.txt', 'M'), | 1071 files = [presubmit.SvnAffectedFile('foo/blat.txt', 'M'), |
| 1068 presubmit.SvnAffectedFile('foo/binary.blob', 'M'), | 1072 presubmit.SvnAffectedFile('foo/binary.blob', 'M'), |
| 1069 presubmit.SvnAffectedFile('blat/flop.txt', 'D')] | 1073 presubmit.SvnAffectedFile('blat/flop.txt', 'D')] |
| 1070 blat = presubmit.os.path.join('foo', 'blat.txt') | 1074 blat = presubmit.os.path.join('foo', 'blat.txt') |
| 1071 blob = presubmit.os.path.join('foo', 'binary.blob') | 1075 blob = presubmit.os.path.join('foo', 'binary.blob') |
| 1072 presubmit.os.path.exists(blat).AndReturn(True) | 1076 presubmit.os.path.exists(blat).AndReturn(True) |
| 1073 presubmit.os.path.isdir(blat).AndReturn(False) | 1077 presubmit.os.path.isdir(blat).AndReturn(False) |
| 1074 presubmit.os.path.exists(blob).AndReturn(True) | 1078 presubmit.os.path.exists(blob).AndReturn(True) |
| 1075 presubmit.os.path.isdir(blob).AndReturn(False) | 1079 presubmit.os.path.isdir(blob).AndReturn(False) |
| 1076 presubmit.scm.SVN.GetFileProperty(blat, 'svn:mime-type').AndReturn(None) | 1080 presubmit.scm.SVN.GetFileProperty(blat, 'svn:mime-type').AndReturn(None) |
| 1077 presubmit.scm.SVN.GetFileProperty(blob, 'svn:mime-type' | 1081 presubmit.scm.SVN.GetFileProperty(blob, 'svn:mime-type' |
| 1078 ).AndReturn('application/octet-stream') | 1082 ).AndReturn('application/octet-stream') |
| 1079 self.mox.ReplayAll() | 1083 self.mox.ReplayAll() |
| 1080 | 1084 |
| 1081 output = filter(lambda x: x.IsTextFile(), list) | 1085 output = filter(lambda x: x.IsTextFile(), files) |
| 1082 self.failUnless(len(output) == 1) | 1086 self.failUnless(len(output) == 1) |
| 1083 self.failUnless(list[0] == output[0]) | 1087 self.failUnless(files[0] == output[0]) |
| 1084 | 1088 |
| 1085 | 1089 |
| 1086 class GclChangeUnittest(PresubmitTestsBase): | 1090 class GclChangeUnittest(PresubmitTestsBase): |
| 1087 def testMembersChanged(self): | 1091 def testMembersChanged(self): |
| 1088 members = [ | 1092 members = [ |
| 1089 'AbsoluteLocalPaths', 'AffectedFiles', 'AffectedTextFiles', | 1093 'AbsoluteLocalPaths', 'AffectedFiles', 'AffectedTextFiles', |
| 1090 'DescriptionText', 'FullDescriptionText', 'LocalPaths', 'Name', | 1094 'DescriptionText', 'FullDescriptionText', 'LocalPaths', 'Name', |
| 1091 'RepositoryRoot', 'RightHandSideLines', 'ServerPaths', | 1095 'RepositoryRoot', 'RightHandSideLines', 'ServerPaths', |
| 1092 'issue', 'patchset', 'scm', 'tags', | 1096 'issue', 'patchset', 'scm', 'tags', |
| 1093 ] | 1097 ] |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1205 input_api2.ReadFile(affected_file2, 'rb').AndReturn(content2) | 1209 input_api2.ReadFile(affected_file2, 'rb').AndReturn(content2) |
| 1206 affected_file2.LocalPath().AndReturn('bar.cc') | 1210 affected_file2.LocalPath().AndReturn('bar.cc') |
| 1207 self.mox.ReplayAll() | 1211 self.mox.ReplayAll() |
| 1208 | 1212 |
| 1209 results = check(input_api1, presubmit.OutputApi) | 1213 results = check(input_api1, presubmit.OutputApi) |
| 1210 self.assertEquals(results, []) | 1214 self.assertEquals(results, []) |
| 1211 results2 = check(input_api2, presubmit.OutputApi) | 1215 results2 = check(input_api2, presubmit.OutputApi) |
| 1212 self.assertEquals(len(results2), 1) | 1216 self.assertEquals(len(results2), 1) |
| 1213 self.assertEquals(results2[0].__class__, error_type) | 1217 self.assertEquals(results2[0].__class__, error_type) |
| 1214 | 1218 |
| 1215 def SvnPropertyTest(self, check, property, value1, value2, committing, | 1219 def SvnPropertyTest(self, check, property_name, value1, value2, committing, |
| 1216 error_type, use_source_file): | 1220 error_type, use_source_file): |
| 1217 change1 = presubmit.SvnChange('mychange', '', self.fake_root_dir, [], 0, 0) | 1221 change1 = presubmit.SvnChange('mychange', '', self.fake_root_dir, [], 0, 0) |
| 1218 input_api1 = self.MockInputApi(change1, committing) | 1222 input_api1 = self.MockInputApi(change1, committing) |
| 1219 files1 = [ | 1223 files1 = [ |
| 1220 presubmit.SvnAffectedFile('foo/bar.cc', 'A'), | 1224 presubmit.SvnAffectedFile('foo/bar.cc', 'A'), |
| 1221 presubmit.SvnAffectedFile('foo.cc', 'M'), | 1225 presubmit.SvnAffectedFile('foo.cc', 'M'), |
| 1222 ] | 1226 ] |
| 1223 if use_source_file: | 1227 if use_source_file: |
| 1224 input_api1.AffectedSourceFiles(None).AndReturn(files1) | 1228 input_api1.AffectedSourceFiles(None).AndReturn(files1) |
| 1225 else: | 1229 else: |
| 1226 input_api1.AffectedFiles(include_deleted=False).AndReturn(files1) | 1230 input_api1.AffectedFiles(include_deleted=False).AndReturn(files1) |
| 1227 presubmit.scm.SVN.GetFileProperty(presubmit.normpath('foo/bar.cc'), | 1231 presubmit.scm.SVN.GetFileProperty(presubmit.normpath('foo/bar.cc'), |
| 1228 property).AndReturn(value1) | 1232 property_name).AndReturn(value1) |
| 1229 presubmit.scm.SVN.GetFileProperty(presubmit.normpath('foo.cc'), | 1233 presubmit.scm.SVN.GetFileProperty(presubmit.normpath('foo.cc'), |
| 1230 property).AndReturn(value1) | 1234 property_name).AndReturn(value1) |
| 1231 change2 = presubmit.SvnChange('mychange', '', self.fake_root_dir, [], 0, 0) | 1235 change2 = presubmit.SvnChange('mychange', '', self.fake_root_dir, [], 0, 0) |
| 1232 input_api2 = self.MockInputApi(change2, committing) | 1236 input_api2 = self.MockInputApi(change2, committing) |
| 1233 files2 = [ | 1237 files2 = [ |
| 1234 presubmit.SvnAffectedFile('foo/bar.cc', 'A'), | 1238 presubmit.SvnAffectedFile('foo/bar.cc', 'A'), |
| 1235 presubmit.SvnAffectedFile('foo.cc', 'M'), | 1239 presubmit.SvnAffectedFile('foo.cc', 'M'), |
| 1236 ] | 1240 ] |
| 1237 if use_source_file: | 1241 if use_source_file: |
| 1238 input_api2.AffectedSourceFiles(None).AndReturn(files2) | 1242 input_api2.AffectedSourceFiles(None).AndReturn(files2) |
| 1239 else: | 1243 else: |
| 1240 input_api2.AffectedFiles(include_deleted=False).AndReturn(files2) | 1244 input_api2.AffectedFiles(include_deleted=False).AndReturn(files2) |
| 1241 | 1245 |
| 1242 presubmit.scm.SVN.GetFileProperty(presubmit.normpath('foo/bar.cc'), | 1246 presubmit.scm.SVN.GetFileProperty(presubmit.normpath('foo/bar.cc'), |
| 1243 property).AndReturn(value2) | 1247 property_name).AndReturn(value2) |
| 1244 presubmit.scm.SVN.GetFileProperty(presubmit.normpath('foo.cc'), | 1248 presubmit.scm.SVN.GetFileProperty(presubmit.normpath('foo.cc'), |
| 1245 property).AndReturn(value2) | 1249 property_name).AndReturn(value2) |
| 1246 self.mox.ReplayAll() | 1250 self.mox.ReplayAll() |
| 1247 | 1251 |
| 1248 results1 = check(input_api1, presubmit.OutputApi, None) | 1252 results1 = check(input_api1, presubmit.OutputApi, None) |
| 1249 self.assertEquals(results1, []) | 1253 self.assertEquals(results1, []) |
| 1250 results2 = check(input_api2, presubmit.OutputApi, None) | 1254 results2 = check(input_api2, presubmit.OutputApi, None) |
| 1251 self.assertEquals(len(results2), 1) | 1255 self.assertEquals(len(results2), 1) |
| 1252 self.assertEquals(results2[0].__class__, error_type) | 1256 self.assertEquals(results2[0].__class__, error_type) |
| 1253 | 1257 |
| 1254 def testCannedCheckChangeHasBugField(self): | 1258 def testCannedCheckChangeHasBugField(self): |
| 1255 self.DescriptionTest(presubmit_canned_checks.CheckChangeHasBugField, | 1259 self.DescriptionTest(presubmit_canned_checks.CheckChangeHasBugField, |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1364 results1 = presubmit_canned_checks.CheckChangeHasNoTabs(input_api1, | 1368 results1 = presubmit_canned_checks.CheckChangeHasNoTabs(input_api1, |
| 1365 presubmit.OutputApi, None) | 1369 presubmit.OutputApi, None) |
| 1366 self.assertEquals(len(results1), 1) | 1370 self.assertEquals(len(results1), 1) |
| 1367 self.assertEquals(results1[0].__class__, | 1371 self.assertEquals(results1[0].__class__, |
| 1368 presubmit.OutputApi.PresubmitPromptWarning) | 1372 presubmit.OutputApi.PresubmitPromptWarning) |
| 1369 self.assertEquals(results1[0]._long_text, | 1373 self.assertEquals(results1[0]._long_text, |
| 1370 'makefile.foo, line 46') | 1374 'makefile.foo, line 46') |
| 1371 | 1375 |
| 1372 | 1376 |
| 1373 def testCannedCheckLongLines(self): | 1377 def testCannedCheckLongLines(self): |
| 1374 check = lambda x,y,z: presubmit_canned_checks.CheckLongLines(x, y, 10, z) | 1378 check = lambda x, y, z: presubmit_canned_checks.CheckLongLines(x, y, 10, z) |
| 1375 self.ContentTest(check, '', 'blah blah blah', | 1379 self.ContentTest(check, '', 'blah blah blah', |
| 1376 presubmit.OutputApi.PresubmitPromptWarning) | 1380 presubmit.OutputApi.PresubmitPromptWarning) |
| 1377 | 1381 |
| 1378 def testCheckChangeSvnEolStyleCommit(self): | 1382 def testCheckChangeSvnEolStyleCommit(self): |
| 1379 # Test CheckSvnProperty at the same time. | 1383 # Test CheckSvnProperty at the same time. |
| 1380 self.SvnPropertyTest(presubmit_canned_checks.CheckChangeSvnEolStyle, | 1384 self.SvnPropertyTest(presubmit_canned_checks.CheckChangeSvnEolStyle, |
| 1381 'svn:eol-style', 'LF', '', True, | 1385 'svn:eol-style', 'LF', '', True, |
| 1382 presubmit.OutputApi.PresubmitError, True) | 1386 presubmit.OutputApi.PresubmitError, True) |
| 1383 | 1387 |
| 1384 def testCheckChangeSvnEolStyleUpload(self): | 1388 def testCheckChangeSvnEolStyleUpload(self): |
| 1385 self.SvnPropertyTest(presubmit_canned_checks.CheckChangeSvnEolStyle, | 1389 self.SvnPropertyTest(presubmit_canned_checks.CheckChangeSvnEolStyle, |
| 1386 'svn:eol-style', 'LF', '', False, | 1390 'svn:eol-style', 'LF', '', False, |
| 1387 presubmit.OutputApi.PresubmitNotifyResult, True) | 1391 presubmit.OutputApi.PresubmitNotifyResult, True) |
| 1388 | 1392 |
| 1389 def _LicenseCheck(self, text, license, committing, expected_result, **kwargs): | 1393 def _LicenseCheck(self, text, license_text, committing, expected_result, |
| 1394 **kwargs): |
| 1390 change = self.mox.CreateMock(presubmit.SvnChange) | 1395 change = self.mox.CreateMock(presubmit.SvnChange) |
| 1391 change.scm = 'svn' | 1396 change.scm = 'svn' |
| 1392 input_api = self.MockInputApi(change, committing) | 1397 input_api = self.MockInputApi(change, committing) |
| 1393 affected_file = self.mox.CreateMock(presubmit.SvnAffectedFile) | 1398 affected_file = self.mox.CreateMock(presubmit.SvnAffectedFile) |
| 1394 input_api.AffectedSourceFiles(42).AndReturn([affected_file]) | 1399 input_api.AffectedSourceFiles(42).AndReturn([affected_file]) |
| 1395 input_api.ReadFile(affected_file, 'rb').AndReturn(text) | 1400 input_api.ReadFile(affected_file, 'rb').AndReturn(text) |
| 1396 if expected_result: | 1401 if expected_result: |
| 1397 affected_file.LocalPath().AndReturn('bleh') | 1402 affected_file.LocalPath().AndReturn('bleh') |
| 1398 | 1403 |
| 1399 self.mox.ReplayAll() | 1404 self.mox.ReplayAll() |
| 1400 result = presubmit_canned_checks.CheckLicense( | 1405 result = presubmit_canned_checks.CheckLicense( |
| 1401 input_api, presubmit.OutputApi, license, source_file_filter=42, | 1406 input_api, presubmit.OutputApi, license_text, |
| 1407 source_file_filter=42, |
| 1402 **kwargs) | 1408 **kwargs) |
| 1403 if expected_result: | 1409 if expected_result: |
| 1404 self.assertEqual(len(result), 1) | 1410 self.assertEqual(len(result), 1) |
| 1405 self.assertEqual(result[0].__class__, expected_result) | 1411 self.assertEqual(result[0].__class__, expected_result) |
| 1406 else: | 1412 else: |
| 1407 self.assertEqual(result, []) | 1413 self.assertEqual(result, []) |
| 1408 | 1414 |
| 1409 def testCheckLicenseSuccess(self): | 1415 def testCheckLicenseSuccess(self): |
| 1410 text = ( | 1416 text = ( |
| 1411 "#!/bin/python\n" | 1417 "#!/bin/python\n" |
| 1412 "# Copyright (c) 2037 Nobody.\n" | 1418 "# Copyright (c) 2037 Nobody.\n" |
| 1413 "# All Rights Reserved.\n" | 1419 "# All Rights Reserved.\n" |
| 1414 "print 'foo'\n" | 1420 "print 'foo'\n" |
| 1415 ) | 1421 ) |
| 1416 license = ( | 1422 license_text = ( |
| 1417 r".*? Copyright \(c\) 2037 Nobody." "\n" | 1423 r".*? Copyright \(c\) 2037 Nobody." "\n" |
| 1418 r".*? All Rights Reserved\." "\n" | 1424 r".*? All Rights Reserved\." "\n" |
| 1419 ) | 1425 ) |
| 1420 self._LicenseCheck(text, license, True, None) | 1426 self._LicenseCheck(text, license_text, True, None) |
| 1421 | 1427 |
| 1422 def testCheckLicenseFailCommit(self): | 1428 def testCheckLicenseFailCommit(self): |
| 1423 text = ( | 1429 text = ( |
| 1424 "#!/bin/python\n" | 1430 "#!/bin/python\n" |
| 1425 "# Copyright (c) 2037 Nobody.\n" | 1431 "# Copyright (c) 2037 Nobody.\n" |
| 1426 "# All Rights Reserved.\n" | 1432 "# All Rights Reserved.\n" |
| 1427 "print 'foo'\n" | 1433 "print 'foo'\n" |
| 1428 ) | 1434 ) |
| 1429 license = ( | 1435 license_text = ( |
| 1430 r".*? Copyright \(c\) 0007 Nobody." "\n" | 1436 r".*? Copyright \(c\) 0007 Nobody." "\n" |
| 1431 r".*? All Rights Reserved\." "\n" | 1437 r".*? All Rights Reserved\." "\n" |
| 1432 ) | 1438 ) |
| 1433 self._LicenseCheck(text, license, True, | 1439 self._LicenseCheck(text, license_text, True, |
| 1434 presubmit.OutputApi.PresubmitPromptWarning) | 1440 presubmit.OutputApi.PresubmitPromptWarning) |
| 1435 | 1441 |
| 1436 def testCheckLicenseFailUpload(self): | 1442 def testCheckLicenseFailUpload(self): |
| 1437 text = ( | 1443 text = ( |
| 1438 "#!/bin/python\n" | 1444 "#!/bin/python\n" |
| 1439 "# Copyright (c) 2037 Nobody.\n" | 1445 "# Copyright (c) 2037 Nobody.\n" |
| 1440 "# All Rights Reserved.\n" | 1446 "# All Rights Reserved.\n" |
| 1441 "print 'foo'\n" | 1447 "print 'foo'\n" |
| 1442 ) | 1448 ) |
| 1443 license = ( | 1449 license_text = ( |
| 1444 r".*? Copyright \(c\) 0007 Nobody." "\n" | 1450 r".*? Copyright \(c\) 0007 Nobody." "\n" |
| 1445 r".*? All Rights Reserved\." "\n" | 1451 r".*? All Rights Reserved\." "\n" |
| 1446 ) | 1452 ) |
| 1447 self._LicenseCheck(text, license, False, | 1453 self._LicenseCheck(text, license_text, False, |
| 1448 presubmit.OutputApi.PresubmitNotifyResult) | 1454 presubmit.OutputApi.PresubmitNotifyResult) |
| 1449 | 1455 |
| 1450 def testCheckLicenseEmptySuccess(self): | 1456 def testCheckLicenseEmptySuccess(self): |
| 1451 text = '' | 1457 text = '' |
| 1452 license = ( | 1458 license_text = ( |
| 1453 r".*? Copyright \(c\) 2037 Nobody." "\n" | 1459 r".*? Copyright \(c\) 2037 Nobody." "\n" |
| 1454 r".*? All Rights Reserved\." "\n" | 1460 r".*? All Rights Reserved\." "\n" |
| 1455 ) | 1461 ) |
| 1456 self._LicenseCheck(text, license, True, None, accept_empty_files=True) | 1462 self._LicenseCheck(text, license_text, True, None, accept_empty_files=True) |
| 1457 | 1463 |
| 1458 def testCannedCheckSvnAccidentalSubmission(self): | 1464 def testCannedCheckSvnAccidentalSubmission(self): |
| 1459 modified_dir_file = 'foo/' | 1465 modified_dir_file = 'foo/' |
| 1460 accidental_submssion_file = 'foo/bar.cc' | 1466 accidental_submssion_file = 'foo/bar.cc' |
| 1461 | 1467 |
| 1462 change = self.mox.CreateMock(presubmit.SvnChange) | 1468 change = self.mox.CreateMock(presubmit.SvnChange) |
| 1463 change.scm = 'svn' | 1469 change.scm = 'svn' |
| 1464 change.GetModifiedFiles().AndReturn([modified_dir_file]) | 1470 change.GetModifiedFiles().AndReturn([modified_dir_file]) |
| 1465 change.GetAllModifiedFiles().AndReturn([modified_dir_file, | 1471 change.GetAllModifiedFiles().AndReturn([modified_dir_file, |
| 1466 accidental_submssion_file]) | 1472 accidental_submssion_file]) |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1748 results = presubmit_canned_checks.CheckBuildbotPendingBuilds( | 1754 results = presubmit_canned_checks.CheckBuildbotPendingBuilds( |
| 1749 input_api, presubmit.OutputApi, 'uurl', 2, ('foo')) | 1755 input_api, presubmit.OutputApi, 'uurl', 2, ('foo')) |
| 1750 self.assertEquals(len(results), 1) | 1756 self.assertEquals(len(results), 1) |
| 1751 self.assertEquals(results[0].__class__, | 1757 self.assertEquals(results[0].__class__, |
| 1752 presubmit.OutputApi.PresubmitNotifyResult) | 1758 presubmit.OutputApi.PresubmitNotifyResult) |
| 1753 | 1759 |
| 1754 | 1760 |
| 1755 if __name__ == '__main__': | 1761 if __name__ == '__main__': |
| 1756 import unittest | 1762 import unittest |
| 1757 unittest.main() | 1763 unittest.main() |
| OLD | NEW |