This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: unittest warnings counter
Type: enhancement Stage: patch review
Components: Library (Lib) Versions: Python 3.5
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: michael.foord Nosy List: berker.peksag, ezio.melotti, giampaolo.rodola, michael.foord, pitrou, rbcollins
Priority: normal Keywords: needs review, patch

Created on 2013-07-06 12:37 by giampaolo.rodola, last changed 2022-04-11 14:57 by admin.

Files
File name Uploaded Description Edit
unittest.patch giampaolo.rodola, 2013-07-06 12:37 review
issue18381.diff berker.peksag, 2014-05-25 15:39 review
issue18381_v2.diff berker.peksag, 2014-06-05 00:12 review
Messages (6)
msg192430 - (view) Author: Giampaolo Rodola' (giampaolo.rodola) * (Python committer) Date: 2013-07-06 12:37
...as per my original proposal on python-ideas:
http://mail.python.org/pipermail/python-ideas/2013-June/021450.html
Patch is in attachment.
msg194719 - (view) Author: Michael Foord (michael.foord) * (Python committer) Date: 2013-08-09 09:13
Looks good to me, except the backslash continuation is unneeded. Needs documentation.
msg219095 - (view) Author: Berker Peksag (berker.peksag) * (Python committer) Date: 2014-05-25 15:39
I get a test failure when I run the test suite with unittest.patch:

test_Exit (unittest.test.test_program.Test_TestProgram) ... test test_unittest crashed -- Traceback (most recent call last):
  File "/home/berker/projects/cpython-default/Lib/test/regrtest.py", line 1278, in runtest_inner
    test_runner()
  File "/home/berker/projects/cpython-default/Lib/test/test_unittest.py", line 8, in test_main
    support.run_unittest(unittest.test.suite())
  File "/home/berker/projects/cpython-default/Lib/test/support/__init__.py", line 1764, in run_unittest
    _run_suite(suite)
  File "/home/berker/projects/cpython-default/Lib/test/support/__init__.py", line 1730, in _run_suite
    result = runner.run(suite)
  File "/home/berker/projects/cpython-default/Lib/unittest/runner.py", line 178, in run
    test(result)
  File "/home/berker/projects/cpython-default/Lib/unittest/suite.py", line 87, in __call__
    return self.run(*args, **kwds)
  File "/home/berker/projects/cpython-default/Lib/unittest/suite.py", line 125, in run
    test(result)
  File "/home/berker/projects/cpython-default/Lib/unittest/suite.py", line 87, in __call__
    return self.run(*args, **kwds)
  File "/home/berker/projects/cpython-default/Lib/unittest/suite.py", line 125, in run
    test(result)
  File "/home/berker/projects/cpython-default/Lib/unittest/suite.py", line 87, in __call__
    return self.run(*args, **kwds)
  File "/home/berker/projects/cpython-default/Lib/unittest/suite.py", line 125, in run
    test(result)
  File "/home/berker/projects/cpython-default/Lib/unittest/suite.py", line 87, in __call__
    return self.run(*args, **kwds)
  File "/home/berker/projects/cpython-default/Lib/unittest/suite.py", line 125, in run
    test(result)
  File "/home/berker/projects/cpython-default/Lib/unittest/case.py", line 647, in __call__
    return self.run(*args, **kwds)
  File "/home/berker/projects/cpython-default/Lib/unittest/case.py", line 597, in run
    testMethod()
  File "/home/berker/projects/cpython-default/Lib/unittest/test/test_program.py", line 119, in test_Exit
    testLoader=self.FooBarLoader())
  File "/home/berker/projects/cpython-default/Lib/unittest/case.py", line 726, in assertRaises
    return context.handle('assertRaises', callableObj, args, kwargs)
  File "/home/berker/projects/cpython-default/Lib/unittest/case.py", line 173, in handle
    callable_obj(*args, **kwargs)
  File "/home/berker/projects/cpython-default/Lib/unittest/main.py", line 93, in __init__
    self.runTests()
  File "/home/berker/projects/cpython-default/Lib/unittest/main.py", line 244, in runTests
    self.result = testRunner.run(self.test)
  File "/home/berker/projects/cpython-default/Lib/unittest/runner.py", line 178, in run
    test(result)
  File "/home/berker/projects/cpython-default/Lib/unittest/suite.py", line 87, in __call__
    return self.run(*args, **kwds)
  File "/home/berker/projects/cpython-default/Lib/unittest/suite.py", line 125, in run
    test(result)
  File "/home/berker/projects/cpython-default/Lib/unittest/suite.py", line 87, in __call__
    return self.run(*args, **kwds)
  File "/home/berker/projects/cpython-default/Lib/unittest/suite.py", line 125, in run
    test(result)
  File "/home/berker/projects/cpython-default/Lib/unittest/case.py", line 647, in __call__
    return self.run(*args, **kwds)
  File "/home/berker/projects/cpython-default/Lib/unittest/case.py", line 597, in run
    testMethod()
  File "/home/berker/projects/cpython-default/Lib/unittest/test/test_program.py", line 60, in testFail
    assert False
AssertionError

The new patch (see issue18381.diff) fixes that failure. Other changes:

* Added documentation
* Added a test case for addWarning and TestResult.warnings
* Added "print warning" feature
msg219730 - (view) Author: Giampaolo Rodola' (giampaolo.rodola) * (Python committer) Date: 2014-06-03 22:46
FWICT Berker's patch LGTM. Michael, are you OK with committing this?
msg219776 - (view) Author: Berker Peksag (berker.peksag) * (Python committer) Date: 2014-06-05 00:12
Thanks for the review, Giampaolo.

Attached a new patch which fixes text_logging and test_doctest tests.

However, this patch will broke the current behavior of test.support.check_warnings. See Lib/test/test_xml_etree.py for example:

test test_xml_etree crashed -- Traceback (most recent call last):
  File "/home/berker/projects/cpython-default/Lib/test/regrtest.py", line 1278, in runtest_inner
    test_runner()
  File "/home/berker/projects/cpython-default/Lib/test/test_xml_etree.py", line 2580, in test_main
    support.run_unittest(*test_classes)
  File "/home/berker/projects/cpython-default/Lib/test/test_xml_etree.py", line 2537, in __exit__
    self.checkwarnings.__exit__(*args)
  File "/home/berker/projects/cpython-default/Lib/contextlib.py", line 66, in __exit__
    next(self.gen)
  File "/home/berker/projects/cpython-default/Lib/test/support/__init__.py", line 1081, in _filterwarnings
    missing[0])
AssertionError: filter ("This search is broken in 1.3 and earlier, and will be fixed in a future version.  If you rely on the current behaviour, change it to '.+'", FutureWarning) did not catch any warning
msg225280 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2014-08-13 14:02
Ouch. I've just been bitten by the fact that unittest enables all warnings by default in 3.4, and this change would definitely make things worse. I would like to see a simple, documented way of disabling this new behaviour. I'm proposing a `catch_warnings` flag on both TestProgram and TestResult (defaulting to True if you like).

(it would be even nicer if this were more flexible, e.g. I want unittest to catch ResourceWarning but not NumbaWarning, but that's icing on the cake)

By the way, perhaps the tests should also exercise the interaction with assertWarns() calls.
History
Date User Action Args
2022-04-11 14:57:47adminsetgithub: 62581
2014-08-13 14:02:20pitrousetnosy: + pitrou
messages: + msg225280
2014-06-05 00:12:49berker.peksagsetfiles: + issue18381_v2.diff

messages: + msg219776
2014-06-03 22:46:13giampaolo.rodolasetmessages: + msg219730
2014-05-25 15:39:50berker.peksagsetfiles: + issue18381.diff
versions: + Python 3.5, - Python 3.4
nosy: + berker.peksag

messages: + msg219095
2013-08-09 09:13:56michael.foordsetassignee: michael.foord
messages: + msg194719
2013-08-08 17:18:00ezio.melottisettype: enhancement
stage: patch review
2013-07-18 10:17:26pitrousetnosy: + rbcollins
2013-07-06 12:37:39giampaolo.rodolacreate