Skip to content

Commit 985ef87

Browse files
committed
More test_logging coverage improvements.
1 parent 26fe4b7 commit 985ef87

File tree

4 files changed

+57
-14
lines changed

4 files changed

+57
-14
lines changed

Lib/logging/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -890,7 +890,7 @@ def handleError(self, record):
890890
None, sys.stderr)
891891
sys.stderr.write('Logged from file %s, line %s\n' % (
892892
record.filename, record.lineno))
893-
except IOError:
893+
except IOError: #pragma: no cover
894894
pass # see issue 5971
895895
finally:
896896
del ei

Lib/logging/config.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
try:
3131
import _thread as thread
3232
import threading
33-
except ImportError:
33+
except ImportError: #pragma: no cover
3434
thread = None
3535

3636
from socketserver import ThreadingTCPServer, StreamRequestHandler
@@ -786,7 +786,7 @@ def listen(port=DEFAULT_LOGGING_CONFIG_PORT):
786786
and which you can join() when appropriate. To stop the server, call
787787
stopListening().
788788
"""
789-
if not thread:
789+
if not thread: #pragma: no cover
790790
raise NotImplementedError("listen() needs threading to work")
791791

792792
class ConfigStreamHandler(StreamRequestHandler):
@@ -825,7 +825,7 @@ def handle(self):
825825
file = io.StringIO(chunk)
826826
try:
827827
fileConfig(file)
828-
except (KeyboardInterrupt, SystemExit):
828+
except (KeyboardInterrupt, SystemExit): #pragma: no cover
829829
raise
830830
except:
831831
traceback.print_exc()

Lib/logging/handlers.py

+9-9
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131

3232
try:
3333
import codecs
34-
except ImportError:
34+
except ImportError: #pragma: no cover
3535
codecs = None
3636

3737
#
@@ -57,7 +57,7 @@ def __init__(self, filename, mode, encoding=None, delay=0):
5757
"""
5858
Use the specified filename for streamed logging
5959
"""
60-
if codecs is None:
60+
if codecs is None: #pragma: no cover
6161
encoding = None
6262
logging.FileHandler.__init__(self, filename, mode, encoding, delay)
6363
self.mode = mode
@@ -74,7 +74,7 @@ def emit(self, record):
7474
if self.shouldRollover(record):
7575
self.doRollover()
7676
logging.FileHandler.emit(self, record)
77-
except (KeyboardInterrupt, SystemExit):
77+
except (KeyboardInterrupt, SystemExit): #pragma: no cover
7878
raise
7979
except:
8080
self.handleError(record)
@@ -542,7 +542,7 @@ def emit(self, record):
542542
try:
543543
s = self.makePickle(record)
544544
self.send(s)
545-
except (KeyboardInterrupt, SystemExit):
545+
except (KeyboardInterrupt, SystemExit): #pragma: no cover
546546
raise
547547
except:
548548
self.handleError(record)
@@ -794,7 +794,7 @@ def emit(self, record):
794794
self.socket.sendto(msg, self.address)
795795
else:
796796
self.socket.sendall(msg)
797-
except (KeyboardInterrupt, SystemExit):
797+
except (KeyboardInterrupt, SystemExit): #pragma: no cover
798798
raise
799799
except:
800800
self.handleError(record)
@@ -871,7 +871,7 @@ def emit(self, record):
871871
smtp.login(self.username, self.password)
872872
smtp.sendmail(self.fromaddr, self.toaddrs, msg)
873873
smtp.quit()
874-
except (KeyboardInterrupt, SystemExit):
874+
except (KeyboardInterrupt, SystemExit): #pragma: no cover
875875
raise
876876
except:
877877
self.handleError(record)
@@ -958,7 +958,7 @@ def emit(self, record):
958958
type = self.getEventType(record)
959959
msg = self.format(record)
960960
self._welu.ReportEvent(self.appname, id, cat, type, [msg])
961-
except (KeyboardInterrupt, SystemExit):
961+
except (KeyboardInterrupt, SystemExit): #pragma: no cover
962962
raise
963963
except:
964964
self.handleError(record)
@@ -1043,7 +1043,7 @@ def emit(self, record):
10431043
h.putheader('Authorization', s)
10441044
h.endheaders(data if self.method == "POST" else None)
10451045
h.getresponse() #can't do anything with the result
1046-
except (KeyboardInterrupt, SystemExit):
1046+
except (KeyboardInterrupt, SystemExit): #pragma: no cover
10471047
raise
10481048
except:
10491049
self.handleError(record)
@@ -1213,7 +1213,7 @@ def emit(self, record):
12131213
"""
12141214
try:
12151215
self.enqueue(self.prepare(record))
1216-
except (KeyboardInterrupt, SystemExit):
1216+
except (KeyboardInterrupt, SystemExit): #pragma: no cover
12171217
raise
12181218
except:
12191219
self.handleError(record)

Lib/test/test_logging.py

+44-1
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,10 @@ def filterfunc(record):
351351
finally:
352352
handler.removeFilter(filterfunc)
353353

354+
def test_empty_filter(self):
355+
f = logging.Filter()
356+
r = logging.makeLogRecord({'name': 'spam.eggs'})
357+
self.assertTrue(f.filter(r))
354358

355359
#
356360
# First, we define our levels. There can be as many as you want - the only
@@ -519,11 +523,22 @@ def test_error_handling(self):
519523
h = TestStreamHandler(BadStream())
520524
r = logging.makeLogRecord({})
521525
old_raise = logging.raiseExceptions
526+
old_stderr = sys.stderr
522527
try:
523528
h.handle(r)
524529
self.assertIs(h.error_record, r)
530+
h = logging.StreamHandler(BadStream())
531+
sys.stderr = sio = io.StringIO()
532+
h.handle(r)
533+
self.assertTrue('\nRuntimeError: '
534+
'deliberate mistake\n' in sio.getvalue())
535+
logging.raiseExceptions = False
536+
sys.stderr = sio = io.StringIO()
537+
h.handle(r)
538+
self.assertEqual('', sio.getvalue())
525539
finally:
526540
logging.raiseExceptions = old_raise
541+
sys.stderr = old_stderr
527542

528543
class MemoryHandlerTest(BaseTest):
529544

@@ -2237,6 +2252,34 @@ def test_time(self):
22372252
f = logging.Formatter('%(asctime)s %(message)s')
22382253
self.assertEqual(f.formatTime(r), '1993-04-21 08:03:00,123')
22392254
self.assertEqual(f.formatTime(r, '%Y:%d'), '1993:21')
2255+
f.format(r)
2256+
self.assertEqual(r.asctime, '1993-04-21 08:03:00,123')
2257+
2258+
class TestBufferingFormatter(logging.BufferingFormatter):
2259+
def formatHeader(self, records):
2260+
return '[(%d)' % len(records)
2261+
2262+
def formatFooter(self, records):
2263+
return '(%d)]' % len(records)
2264+
2265+
class BufferingFormatterTest(unittest.TestCase):
2266+
def setUp(self):
2267+
self.records = [
2268+
logging.makeLogRecord({'msg': 'one'}),
2269+
logging.makeLogRecord({'msg': 'two'}),
2270+
]
2271+
2272+
def test_default(self):
2273+
f = logging.BufferingFormatter()
2274+
self.assertEqual('', f.format([]))
2275+
self.assertEqual('onetwo', f.format(self.records))
2276+
2277+
def test_custom(self):
2278+
f = TestBufferingFormatter()
2279+
self.assertEqual('[(2)onetwo(2)]', f.format(self.records))
2280+
lf = logging.Formatter('<%(message)s>')
2281+
f = TestBufferingFormatter(lf)
2282+
self.assertEqual('[(2)<one><two>(2)]', f.format(self.records))
22402283

22412284
class ExceptionTest(BaseTest):
22422285
def test_formatting(self):
@@ -2957,7 +3000,7 @@ def test_main():
29573000
CustomLevelsAndFiltersTest, HandlerTest, MemoryHandlerTest,
29583001
ConfigFileTest, SocketHandlerTest, MemoryTest,
29593002
EncodingTest, WarningsTest, ConfigDictTest, ManagerTest,
2960-
FormatterTest, StreamHandlerTest,
3003+
FormatterTest, BufferingFormatterTest, StreamHandlerTest,
29613004
LogRecordFactoryTest, ChildLoggerTest, QueueHandlerTest,
29623005
ShutdownTest, ModuleLevelMiscTest, BasicConfigTest,
29633006
LoggerAdapterTest, LoggerTest,

0 commit comments

Comments
 (0)