| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2011 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 patch.py.""" | 6 """Unit tests for patch.py.""" |
| 7 | 7 |
| 8 import logging | 8 import logging |
| 9 import os | 9 import os |
| 10 import sys | 10 import sys |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 '+bar\n') | 126 '+bar\n') |
| 127 | 127 |
| 128 | 128 |
| 129 NEW = ( | 129 NEW = ( |
| 130 '--- /dev/null\n' | 130 '--- /dev/null\n' |
| 131 '+++ foo\n' | 131 '+++ foo\n' |
| 132 '@@ -0,0 +1 @@\n' | 132 '@@ -0,0 +1 @@\n' |
| 133 '+bar\n') | 133 '+bar\n') |
| 134 | 134 |
| 135 | 135 |
| 136 DELETE = ( |
| 137 '--- tools/clang_check/README.chromium\n' |
| 138 '+++ /dev/null\n' |
| 139 '@@ -1,1 +0,0 @@\n' |
| 140 '-bar\n') |
| 141 |
| 142 |
| 136 class PatchTest(unittest.TestCase): | 143 class PatchTest(unittest.TestCase): |
| 137 def testFilePatchDelete(self): | 144 def testFilePatchDelete(self): |
| 138 c = patch.FilePatchDelete('foo', False) | 145 p = patch.FilePatchDelete('foo', False) |
| 139 self.assertEquals(c.filename, 'foo') | 146 self.assertEquals(p.filename, 'foo') |
| 140 self.assertEquals(c.is_binary, False) | 147 self.assertEquals(p.is_binary, False) |
| 141 self.assertEquals(c.is_delete, True) | 148 self.assertEquals(p.is_delete, True) |
| 142 self.assertEquals(c.is_new, False) | 149 self.assertEquals(p.is_new, False) |
| 143 try: | 150 try: |
| 144 c.get() | 151 p.get() |
| 145 self.fail() | 152 self.fail() |
| 146 except NotImplementedError: | 153 except NotImplementedError: |
| 147 pass | 154 pass |
| 148 c = patch.FilePatchDelete('foo', True) | 155 p = patch.FilePatchDelete('foo', True) |
| 149 self.assertEquals(c.filename, 'foo') | 156 self.assertEquals(p.filename, 'foo') |
| 150 self.assertEquals(c.is_binary, True) | 157 self.assertEquals(p.is_binary, True) |
| 151 self.assertEquals(c.is_delete, True) | 158 self.assertEquals(p.is_delete, True) |
| 152 self.assertEquals(c.is_new, False) | 159 self.assertEquals(p.is_new, False) |
| 153 try: | 160 try: |
| 154 c.get() | 161 p.get() |
| 155 self.fail() | 162 self.fail() |
| 156 except NotImplementedError: | 163 except NotImplementedError: |
| 157 pass | 164 pass |
| 158 | 165 |
| 159 def testFilePatchBinary(self): | 166 def testFilePatchBinary(self): |
| 160 c = patch.FilePatchBinary('foo', 'data', [], is_new=False) | 167 p = patch.FilePatchBinary('foo', 'data', [], is_new=False) |
| 161 self.assertEquals(c.filename, 'foo') | 168 self.assertEquals(p.filename, 'foo') |
| 162 self.assertEquals(c.is_binary, True) | 169 self.assertEquals(p.is_binary, True) |
| 163 self.assertEquals(c.is_delete, False) | 170 self.assertEquals(p.is_delete, False) |
| 164 self.assertEquals(c.is_new, False) | 171 self.assertEquals(p.is_new, False) |
| 165 self.assertEquals(c.get(), 'data') | 172 self.assertEquals(p.get(), 'data') |
| 166 | 173 |
| 167 def testFilePatchBinaryNew(self): | 174 def testFilePatchBinaryNew(self): |
| 168 c = patch.FilePatchBinary('foo', 'data', [], is_new=True) | 175 p = patch.FilePatchBinary('foo', 'data', [], is_new=True) |
| 169 self.assertEquals(c.filename, 'foo') | 176 self.assertEquals(p.filename, 'foo') |
| 170 self.assertEquals(c.is_binary, True) | 177 self.assertEquals(p.is_binary, True) |
| 171 self.assertEquals(c.is_delete, False) | 178 self.assertEquals(p.is_delete, False) |
| 172 self.assertEquals(c.is_new, True) | 179 self.assertEquals(p.is_new, True) |
| 173 self.assertEquals(c.get(), 'data') | 180 self.assertEquals(p.get(), 'data') |
| 174 | 181 |
| 175 def testFilePatchDiff(self): | 182 def testFilePatchDiff(self): |
| 176 c = patch.FilePatchDiff('chrome/file.cc', SVN_PATCH, []) | 183 p = patch.FilePatchDiff('chrome/file.cc', SVN_PATCH, []) |
| 177 self.assertEquals(c.filename, 'chrome/file.cc') | 184 self.assertEquals(p.filename, 'chrome/file.cc') |
| 178 self.assertEquals(c.is_binary, False) | 185 self.assertEquals(p.is_binary, False) |
| 179 self.assertEquals(c.is_delete, False) | 186 self.assertEquals(p.is_delete, False) |
| 180 self.assertEquals(c.is_git_diff, False) | 187 self.assertEquals(p.is_git_diff, False) |
| 181 self.assertEquals(c.is_new, False) | 188 self.assertEquals(p.is_new, False) |
| 182 self.assertEquals(c.patchlevel, 0) | 189 self.assertEquals(p.patchlevel, 0) |
| 183 self.assertEquals(c.get(), SVN_PATCH) | 190 self.assertEquals(p.get(), SVN_PATCH) |
| 184 | 191 |
| 185 def testFilePatchDiffHeaderMode(self): | 192 def testFilePatchDiffHeaderMode(self): |
| 186 diff = ( | 193 diff = ( |
| 187 'diff --git a/git_cl/git-cl b/git_cl/git-cl\n' | 194 'diff --git a/git_cl/git-cl b/git_cl/git-cl\n' |
| 188 'old mode 100644\n' | 195 'old mode 100644\n' |
| 189 'new mode 100755\n') | 196 'new mode 100755\n') |
| 190 c = patch.FilePatchDiff('git_cl/git-cl', diff, []) | 197 p = patch.FilePatchDiff('git_cl/git-cl', diff, []) |
| 191 self.assertEquals(c.filename, 'git_cl/git-cl') | 198 self.assertEquals(p.filename, 'git_cl/git-cl') |
| 192 self.assertEquals(c.is_binary, False) | 199 self.assertEquals(p.is_binary, False) |
| 193 self.assertEquals(c.is_delete, False) | 200 self.assertEquals(p.is_delete, False) |
| 194 self.assertEquals(c.is_git_diff, True) | 201 self.assertEquals(p.is_git_diff, True) |
| 195 self.assertEquals(c.is_new, False) | 202 self.assertEquals(p.is_new, False) |
| 196 self.assertEquals(c.patchlevel, 1) | 203 self.assertEquals(p.patchlevel, 1) |
| 197 self.assertEquals(c.get(), diff) | 204 self.assertEquals(p.get(), diff) |
| 205 self.assertEquals([('svn:executable', '*')], p.svn_properties) |
| 198 | 206 |
| 199 def testFilePatchDiffHeaderModeIndex(self): | 207 def testFilePatchDiffHeaderModeIndex(self): |
| 200 diff = ( | 208 diff = ( |
| 201 'Index: Junk\n' | 209 'Index: Junk\n' |
| 202 'diff --git a/git_cl/git-cl b/git_cl/git-cl\n' | 210 'diff --git a/git_cl/git-cl b/git_cl/git-cl\n' |
| 203 'old mode 100644\n' | 211 'old mode 100644\n' |
| 204 'new mode 100755\n') | 212 'new mode 100755\n') |
| 205 c = patch.FilePatchDiff('git_cl/git-cl', diff, []) | 213 p = patch.FilePatchDiff('git_cl/git-cl', diff, []) |
| 206 self.assertEquals(c.filename, 'git_cl/git-cl') | 214 self.assertEquals(p.filename, 'git_cl/git-cl') |
| 207 self.assertEquals(c.is_binary, False) | 215 self.assertEquals(p.is_binary, False) |
| 208 self.assertEquals(c.is_delete, False) | 216 self.assertEquals(p.is_delete, False) |
| 209 self.assertEquals(c.is_git_diff, True) | 217 self.assertEquals(p.is_git_diff, True) |
| 210 self.assertEquals(c.is_new, False) | 218 self.assertEquals(p.is_new, False) |
| 211 self.assertEquals(c.patchlevel, 1) | 219 self.assertEquals(p.patchlevel, 1) |
| 212 self.assertEquals(c.get(), diff) | 220 self.assertEquals(p.get(), diff) |
| 213 | 221 |
| 214 def testFilePatchDiffSvnNew(self): | 222 def testFilePatchDiffSvnNew(self): |
| 215 # The code path is different for git and svn. | 223 # The code path is different for git and svn. |
| 216 c = patch.FilePatchDiff('foo', NEW, []) | 224 p = patch.FilePatchDiff('foo', NEW, []) |
| 217 self.assertEquals(c.filename, 'foo') | 225 self.assertEquals(p.filename, 'foo') |
| 218 self.assertEquals(c.is_binary, False) | 226 self.assertEquals(p.is_binary, False) |
| 219 self.assertEquals(c.is_delete, False) | 227 self.assertEquals(p.is_delete, False) |
| 220 self.assertEquals(c.is_git_diff, False) | 228 self.assertEquals(p.is_git_diff, False) |
| 221 self.assertEquals(c.is_new, True) | 229 self.assertEquals(p.is_new, True) |
| 222 self.assertEquals(c.patchlevel, 0) | 230 self.assertEquals(p.patchlevel, 0) |
| 223 self.assertEquals(c.get(), NEW) | 231 self.assertEquals(p.get(), NEW) |
| 224 | 232 |
| 225 def testFilePatchDiffGitNew(self): | 233 def testFilePatchDiffGitNew(self): |
| 226 # The code path is different for git and svn. | 234 # The code path is different for git and svn. |
| 227 c = patch.FilePatchDiff('foo', GIT_NEW, []) | 235 p = patch.FilePatchDiff('foo', GIT_NEW, []) |
| 228 self.assertEquals(c.filename, 'foo') | 236 self.assertEquals(p.filename, 'foo') |
| 229 self.assertEquals(c.is_binary, False) | 237 self.assertEquals(p.is_binary, False) |
| 230 self.assertEquals(c.is_delete, False) | 238 self.assertEquals(p.is_delete, False) |
| 231 self.assertEquals(c.is_git_diff, True) | 239 self.assertEquals(p.is_git_diff, True) |
| 232 self.assertEquals(c.is_new, True) | 240 self.assertEquals(p.is_new, True) |
| 233 self.assertEquals(c.patchlevel, 1) | 241 self.assertEquals(p.patchlevel, 1) |
| 234 self.assertEquals(c.get(), GIT_NEW) | 242 self.assertEquals(p.get(), GIT_NEW) |
| 235 | 243 |
| 236 def testFilePatchDiffBad(self): | 244 def testFilePatchDiffBad(self): |
| 237 try: | 245 try: |
| 238 patch.FilePatchDiff('foo', 'data', []) | 246 patch.FilePatchDiff('foo', 'data', []) |
| 239 self.fail() | 247 self.fail() |
| 240 except patch.UnsupportedPatchFormat: | 248 except patch.UnsupportedPatchFormat: |
| 241 pass | 249 pass |
| 242 | 250 |
| 243 def testFilePatchDiffEmpty(self): | 251 def testFilePatchDiffEmpty(self): |
| 244 try: | 252 try: |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 437 def testBackSlash(self): | 445 def testBackSlash(self): |
| 438 mangled_patch = SVN_PATCH.replace('chrome/', 'chrome\\') | 446 mangled_patch = SVN_PATCH.replace('chrome/', 'chrome\\') |
| 439 patches = patch.PatchSet([ | 447 patches = patch.PatchSet([ |
| 440 patch.FilePatchDiff('chrome\\file.cc', mangled_patch, []), | 448 patch.FilePatchDiff('chrome\\file.cc', mangled_patch, []), |
| 441 patch.FilePatchDelete('other\\place\\foo', True), | 449 patch.FilePatchDelete('other\\place\\foo', True), |
| 442 ]) | 450 ]) |
| 443 expected = ['chrome/file.cc', 'other/place/foo'] | 451 expected = ['chrome/file.cc', 'other/place/foo'] |
| 444 self.assertEquals(expected, patches.filenames) | 452 self.assertEquals(expected, patches.filenames) |
| 445 self.assertEquals(SVN_PATCH, patches.patches[0].get()) | 453 self.assertEquals(SVN_PATCH, patches.patches[0].get()) |
| 446 | 454 |
| 447 def testGitPatches(self): | 455 def testDelete(self): |
| 448 # Shouldn't throw. | 456 p = patch.FilePatchDiff('tools/clang_check/README.chromium', DELETE, []) |
| 449 patch.FilePatchDiff('tools/clang_check/README.chromium', GIT_DELETE, []) | 457 self.assertEquals(p.filename, 'tools/clang_check/README.chromium') |
| 450 patch.FilePatchDiff('tools/run_local_server.sh', GIT_RENAME, []) | 458 self.assertEquals(p.is_binary, False) |
| 451 patch.FilePatchDiff( | 459 self.assertEquals(p.is_delete, True) |
| 460 self.assertEquals(p.is_new, False) |
| 461 self.assertEquals(p.get(), DELETE) |
| 462 self.assertEquals([], p.svn_properties) |
| 463 |
| 464 def testGitDelete(self): |
| 465 p = patch.FilePatchDiff('tools/clang_check/README.chromium', GIT_DELETE, []) |
| 466 self.assertEquals(p.filename, 'tools/clang_check/README.chromium') |
| 467 self.assertEquals(p.is_binary, False) |
| 468 self.assertEquals(p.is_delete, True) |
| 469 self.assertEquals(p.is_new, False) |
| 470 self.assertEquals(p.get(), GIT_DELETE) |
| 471 self.assertEquals([], p.svn_properties) |
| 472 |
| 473 def testGitRename(self): |
| 474 p = patch.FilePatchDiff('tools/run_local_server.sh', GIT_RENAME, []) |
| 475 self.assertEquals(p.filename, 'tools/run_local_server.sh') |
| 476 self.assertEquals(p.is_binary, False) |
| 477 self.assertEquals(p.is_delete, False) |
| 478 self.assertEquals(p.is_new, False) |
| 479 self.assertEquals(p.get(), GIT_RENAME) |
| 480 self.assertEquals([], p.svn_properties) |
| 481 |
| 482 def testGitRenamePartial(self): |
| 483 p = patch.FilePatchDiff( |
| 452 'chrome/browser/chromeos/views/webui_menu_widget.h', | 484 'chrome/browser/chromeos/views/webui_menu_widget.h', |
| 453 GIT_RENAME_PARTIAL, []) | 485 GIT_RENAME_PARTIAL, []) |
| 454 patch.FilePatchDiff('pp', GIT_COPY, []) | 486 self.assertEquals( |
| 455 patch.FilePatchDiff('foo', GIT_NEW, []) | 487 p.filename, 'chrome/browser/chromeos/views/webui_menu_widget.h') |
| 456 self.assertTrue(True) | 488 self.assertEquals(p.is_binary, False) |
| 489 self.assertEquals(p.is_delete, False) |
| 490 self.assertEquals(p.is_new, False) |
| 491 self.assertEquals(p.get(), GIT_RENAME_PARTIAL) |
| 492 self.assertEquals([], p.svn_properties) |
| 493 |
| 494 def testGitCopy(self): |
| 495 p = patch.FilePatchDiff('pp', GIT_COPY, []) |
| 496 self.assertEquals(p.filename, 'pp') |
| 497 self.assertEquals(p.is_binary, False) |
| 498 self.assertEquals(p.is_delete, False) |
| 499 self.assertEquals(p.is_new, False) |
| 500 self.assertEquals(p.get(), GIT_COPY) |
| 501 self.assertEquals([], p.svn_properties) |
| 502 |
| 503 def testGitNew(self): |
| 504 p = patch.FilePatchDiff('foo', GIT_NEW, []) |
| 505 self.assertEquals(p.filename, 'foo') |
| 506 self.assertEquals(p.is_binary, False) |
| 507 self.assertEquals(p.is_delete, False) |
| 508 self.assertEquals(p.is_new, True) |
| 509 self.assertEquals(p.get(), GIT_NEW) |
| 510 self.assertEquals([], p.svn_properties) |
| 457 | 511 |
| 458 def testOnlyHeader(self): | 512 def testOnlyHeader(self): |
| 459 p = patch.FilePatchDiff('file_a', '--- file_a\n+++ file_a\n', []) | 513 p = patch.FilePatchDiff('file_a', '--- file_a\n+++ file_a\n', []) |
| 460 self.assertTrue(p) | 514 self.assertTrue(p) |
| 461 | 515 |
| 462 def testSmallest(self): | 516 def testSmallest(self): |
| 463 p = patch.FilePatchDiff( | 517 p = patch.FilePatchDiff( |
| 464 'file_a', '--- file_a\n+++ file_a\n@@ -0,0 +1 @@\n+foo\n', []) | 518 'file_a', '--- file_a\n+++ file_a\n@@ -0,0 +1 @@\n+foo\n', []) |
| 465 self.assertTrue(p) | 519 self.assertTrue(p) |
| 466 | 520 |
| 467 def testInverted(self): | 521 def testInverted(self): |
| 468 try: | 522 try: |
| 469 patch.FilePatchDiff( | 523 patch.FilePatchDiff( |
| 470 'file_a', '+++ file_a\n--- file_a\n@@ -0,0 +1 @@\n+foo\n', []) | 524 'file_a', '+++ file_a\n--- file_a\n@@ -0,0 +1 @@\n+foo\n', []) |
| 471 self.fail() | 525 self.fail() |
| 472 except patch.UnsupportedPatchFormat: | 526 except patch.UnsupportedPatchFormat: |
| 473 pass | 527 pass |
| 474 | 528 |
| 475 def testInvertedOnlyHeader(self): | 529 def testInvertedOnlyHeader(self): |
| 476 try: | 530 try: |
| 477 patch.FilePatchDiff('file_a', '+++ file_a\n--- file_a\n', []) | 531 patch.FilePatchDiff('file_a', '+++ file_a\n--- file_a\n', []) |
| 478 self.fail() | 532 self.fail() |
| 479 except patch.UnsupportedPatchFormat: | 533 except patch.UnsupportedPatchFormat: |
| 480 pass | 534 pass |
| 481 | 535 |
| 482 def testRenameOnlyHeader(self): | 536 def testRenameOnlyHeader(self): |
| 483 p = patch.FilePatchDiff('file_b', '--- file_a\n+++ file_b\n', []) | 537 p = patch.FilePatchDiff('file_b', '--- file_a\n+++ file_b\n', []) |
| 484 self.assertTrue(p) | 538 self.assertEquals(p.filename, 'file_b') |
| 539 self.assertEquals(p.is_binary, False) |
| 540 self.assertEquals(p.is_delete, False) |
| 541 # Should it be marked as new? |
| 542 self.assertEquals(p.is_new, False) |
| 543 self.assertEquals(p.get(), '--- file_a\n+++ file_b\n') |
| 544 self.assertEquals([], p.svn_properties) |
| 485 | 545 |
| 486 def testGitCopy(self): | 546 def testGitCopyPartial(self): |
| 487 diff = ( | 547 diff = ( |
| 488 'diff --git a/wtf b/wtf2\n' | 548 'diff --git a/wtf b/wtf2\n' |
| 489 'similarity index 98%\n' | 549 'similarity index 98%\n' |
| 490 'copy from wtf\n' | 550 'copy from wtf\n' |
| 491 'copy to wtf2\n' | 551 'copy to wtf2\n' |
| 492 'index 79fbaf3..3560689 100755\n' | 552 'index 79fbaf3..3560689 100755\n' |
| 493 '--- a/wtf\n' | 553 '--- a/wtf\n' |
| 494 '+++ b/wtf2\n' | 554 '+++ b/wtf2\n' |
| 495 '@@ -1,4 +1,4 @@\n' | 555 '@@ -1,4 +1,4 @@\n' |
| 496 '-#!/usr/bin/env python\n' | 556 '-#!/usr/bin/env python\n' |
| 497 '+#!/usr/bin/env python1.3\n' | 557 '+#!/usr/bin/env python1.3\n' |
| 498 ' # Copyright (c) 2010 The Chromium Authors. All rights reserved.\n' | 558 ' # Copyright (c) 2010 The Chromium Authors. All rights reserved.\n' |
| 499 ' # blah blah blah as\n' | 559 ' # blah blah blah as\n' |
| 500 ' # found in the LICENSE file.\n') | 560 ' # found in the LICENSE file.\n') |
| 501 p = patch.FilePatchDiff('wtf2', diff, []) | 561 p = patch.FilePatchDiff('wtf2', diff, []) |
| 502 self.assertTrue(p) | 562 self.assertEquals(p.filename, 'wtf2') |
| 563 self.assertEquals(p.is_binary, False) |
| 564 self.assertEquals(p.is_delete, False) |
| 565 # Should it be marked as new? |
| 566 self.assertEquals(p.is_new, False) |
| 567 self.assertEquals(p.get(), diff) |
| 568 self.assertEquals([], p.svn_properties) |
| 503 | 569 |
| 504 def testGitExe(self): | 570 def testGitExe(self): |
| 505 diff = ( | 571 diff = ( |
| 506 'diff --git a/natsort_test.py b/natsort_test.py\n' | 572 'diff --git a/natsort_test.py b/natsort_test.py\n' |
| 507 'new file mode 100755\n' | 573 'new file mode 100755\n' |
| 508 '--- /dev/null\n' | 574 '--- /dev/null\n' |
| 509 '+++ b/natsort_test.py\n' | 575 '+++ b/natsort_test.py\n' |
| 510 '@@ -0,0 +1,1 @@\n' | 576 '@@ -0,0 +1,1 @@\n' |
| 511 '+#!/usr/bin/env python\n') | 577 '+#!/usr/bin/env python\n') |
| 512 self.assertEquals( | 578 p = patch.FilePatchDiff('natsort_test.py', diff, []) |
| 513 [('svn:executable', '*')], | 579 self.assertEquals(p.filename, 'natsort_test.py') |
| 514 patch.FilePatchDiff('natsort_test.py', diff, []).svn_properties) | 580 self.assertEquals(p.is_binary, False) |
| 581 self.assertEquals(p.is_delete, False) |
| 582 self.assertEquals(p.is_new, True) |
| 583 self.assertEquals(p.get(), diff) |
| 584 self.assertEquals([('svn:executable', '*')], p.svn_properties) |
| 585 |
| 586 def testGitExe2(self): |
| 515 diff = ( | 587 diff = ( |
| 516 'diff --git a/natsort_test.py b/natsort_test.py\n' | 588 'diff --git a/natsort_test.py b/natsort_test.py\n' |
| 517 'new file mode 100644\n' | 589 'new file mode 100644\n' |
| 518 '--- /dev/null\n' | 590 '--- /dev/null\n' |
| 519 '+++ b/natsort_test.py\n' | 591 '+++ b/natsort_test.py\n' |
| 520 '@@ -0,0 +1,1 @@\n' | 592 '@@ -0,0 +1,1 @@\n' |
| 521 '+#!/usr/bin/env python\n') | 593 '+#!/usr/bin/env python\n') |
| 522 self.assertEquals( | 594 p = patch.FilePatchDiff('natsort_test.py', diff, []) |
| 523 [], patch.FilePatchDiff('natsort_test.py', diff, []).svn_properties) | 595 self.assertEquals(p.filename, 'natsort_test.py') |
| 596 self.assertEquals(p.is_binary, False) |
| 597 self.assertEquals(p.is_delete, False) |
| 598 self.assertEquals(p.is_new, True) |
| 599 self.assertEquals(p.get(), diff) |
| 600 self.assertEquals([], p.svn_properties) |
| 524 | 601 |
| 525 | 602 |
| 526 if __name__ == '__main__': | 603 if __name__ == '__main__': |
| 527 logging.basicConfig(level= | 604 logging.basicConfig(level= |
| 528 [logging.WARNING, logging.INFO, logging.DEBUG][ | 605 [logging.WARNING, logging.INFO, logging.DEBUG][ |
| 529 min(2, sys.argv.count('-v'))]) | 606 min(2, sys.argv.count('-v'))]) |
| 530 unittest.main() | 607 unittest.main() |
| OLD | NEW |