Skip to content

Commit

Permalink
Only use resize signal if supported
Browse files Browse the repository at this point in the history
  • Loading branch information
avylove committed Oct 22, 2017
1 parent d02a711 commit 32027c3
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 3 deletions.
11 changes: 8 additions & 3 deletions enlighten.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@

SERIES_STD = u' ▏▎▍▌▋▊▉█'

RESIZE_SUPPORTED = hasattr(signal, 'SIGWINCH')

__version__ = '1.0.6'


Expand Down Expand Up @@ -548,7 +550,8 @@ def __init__(self, stream=None, counter_class=Counter, **kwargs):
self.width = self.term.width
self.set_scroll = kwargs.pop('set_scroll', True)
self.resize_lock = False
self.sigwinch_orig = signal.getsignal(signal.SIGWINCH)
if RESIZE_SUPPORTED:
self.sigwinch_orig = signal.getsignal(signal.SIGWINCH)

self.defaults = kwargs # Counter defaults

Expand Down Expand Up @@ -668,7 +671,8 @@ def _set_scroll_area(self, force=False):
# Set exit handling only once
if not self.process_exit:
atexit.register(self._at_exit)
signal.signal(signal.SIGWINCH, self._resize_handler)
if RESIZE_SUPPORTED:
signal.signal(signal.SIGWINCH, self._resize_handler)
self.process_exit = True

if self.set_scroll:
Expand Down Expand Up @@ -752,7 +756,8 @@ def stop(self):
stream = self.stream
positions = self.counters.values()

signal.signal(signal.SIGWINCH, self.sigwinch_orig)
if RESIZE_SUPPORTED:
signal.signal(signal.SIGWINCH, self.sigwinch_orig)

try:
for num in range(self.scroll_offset - 1, 0, -1):
Expand Down
48 changes: 48 additions & 0 deletions tests/test_enlighten.py
Original file line number Diff line number Diff line change
Expand Up @@ -1133,6 +1133,54 @@ def test_context_manager(self):

self.assertFalse(mgr.enabled)

def test_no_resize_signal(self):

# Test normal case initialization
stdmgr = enlighten.Manager(stream=self.tty.stdout)
self.assertTrue(hasattr(stdmgr, 'sigwinch_orig'))
stdmgr.counters[MockCounter(manager=stdmgr)] = 3
stdmgr.counters[MockCounter(manager=stdmgr)] = 4

# Test no resize signal initialization
with mock.patch.object(enlighten, 'RESIZE_SUPPORTED', False):
manager = enlighten.Manager(stream=self.tty.stdout)
self.assertFalse(hasattr(manager, 'sigwinch_orig'))

manager.counters[MockCounter(manager=manager)] = 3
manager.counters[MockCounter(manager=manager)] = 4

# Test set_scroll_area()
with mock.patch.object(enlighten.signal, 'signal',
wraps=enlighten.signal.signal) as mocksignal:
with mock.patch('enlighten.atexit'):

# Test no resize signal set_scroll_area
with mock.patch.object(enlighten, 'RESIZE_SUPPORTED', False):
with mock.patch.object(manager.term, 'change_scroll'):
manager._set_scroll_area()

self.assertFalse(mocksignal.called)

# Test normal case set_scroll_area
with mock.patch.object(stdmgr.term, 'change_scroll'):
stdmgr._set_scroll_area()
self.assertTrue(mocksignal.called)

# Test stop()
with mock.patch.object(enlighten.signal, 'signal',
wraps=enlighten.signal.signal) as mocksignal:

with mock.patch('enlighten.Terminal.reset'):

# Test no resize signal stop
with mock.patch.object(enlighten, 'RESIZE_SUPPORTED', False):
manager.stop()
self.assertFalse(mocksignal.called)

# Test normal case stop
stdmgr.stop()
self.assertTrue(mocksignal.called)


class TestGetManager(TestCase):

Expand Down

0 comments on commit 32027c3

Please sign in to comment.