class TestHelpPager(unittest.TestCase): def setUp(self): self.renderer = PosixHelpRenderer() self.save_pager = os.environ.get('PAGER', None) self.save_manpager = os.environ.get('MANPAGER', None) def tearDown(self): if self.save_pager is not None: os.environ['PAGER'] = self.save_pager if self.save_manpager is not None: os.environ['MANPAGER'] = self.save_manpager def test_no_env_vars(self): if 'PAGER' in os.environ: del os.environ['PAGER'] if 'MANPAGER' in os.environ: del os.environ['MANPAGER'] self.assertEqual(self.renderer.get_pager(), self.renderer.PAGER) def test_manpager(self): if 'PAGER' in os.environ: del os.environ['PAGER'] os.environ['MANPAGER'] = 'foobar' self.assertEqual(self.renderer.get_pager(), 'foobar') def test_pager(self): if 'MANPAGER' in os.environ: del os.environ['MANPAGER'] os.environ['PAGER'] = 'fiebaz' self.assertEqual(self.renderer.get_pager(), 'fiebaz') def test_both(self): os.environ['MANPAGER'] = 'foobar' os.environ['PAGER'] = 'fiebaz' self.assertEqual(self.renderer.get_pager(), 'foobar')
class TestHelpPager(unittest.TestCase): def setUp(self): self.environ = {} self.environ_patch = mock.patch('os.environ', self.environ) self.environ_patch.start() self.renderer = PosixHelpRenderer() def tearDown(self): self.environ_patch.stop() def test_no_env_vars(self): self.assertEqual(self.renderer.get_pager_cmdline(), self.renderer.PAGER.split()) def test_manpager(self): pager_cmd = 'foobar' os.environ['MANPAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) def test_pager(self): pager_cmd = 'fiebaz' os.environ['PAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) def test_both(self): os.environ['MANPAGER'] = 'foobar' os.environ['PAGER'] = 'fiebaz' self.assertEqual(self.renderer.get_pager_cmdline(), 'foobar'.split()) def test_manpager_with_args(self): pager_cmd = 'less -X' os.environ['MANPAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) def test_pager_with_args(self): pager_cmd = 'less -X --clearscreen' os.environ['PAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) @unittest.skipIf(sys.platform.startswith('win'), "requires posix system") @mock.patch('sys.exit', mock.Mock()) def test_no_groff_exists(self): renderer = FakePosixHelpRenderer() # Simulate neither rst2man.py nor rst2man existing on the path. renderer.exists_on_path['groff'] = False with self.assertRaisesRegexp(ExecutableNotFoundError, 'Could not find executable named "groff"'): renderer.render('foo') def test_shlex_split_for_pager_var(self): pager_cmd = '/bin/sh -c "col -bx | vim -c \'set ft=man\' -"' os.environ['PAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), ['/bin/sh', '-c', "col -bx | vim -c 'set ft=man' -"])
class TestHelpPager(unittest.TestCase): def setUp(self): self.environ = {} self.environ_patch = mock.patch('os.environ', self.environ) self.environ_patch.start() self.renderer = PosixHelpRenderer() def tearDown(self): self.environ_patch.stop() def test_no_env_vars(self): self.assertEqual(self.renderer.get_pager_cmdline(), self.renderer.PAGER.split()) def test_manpager(self): pager_cmd = 'foobar' os.environ['MANPAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) def test_pager(self): pager_cmd = 'fiebaz' os.environ['PAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) def test_both(self): os.environ['MANPAGER'] = 'foobar' os.environ['PAGER'] = 'fiebaz' self.assertEqual(self.renderer.get_pager_cmdline(), 'foobar'.split()) def test_manpager_with_args(self): pager_cmd = 'less -X' os.environ['MANPAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) def test_pager_with_args(self): pager_cmd = 'less -X --clearscreen' os.environ['PAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) @unittest.skipIf(sys.platform.startswith('win'), "requires posix system") @mock.patch('sys.exit', mock.Mock()) def test_no_groff_exists(self): renderer = FakePosixHelpRenderer() # Simulate neither rst2man.py nor rst2man existing on the path. renderer.exists_on_path['groff'] = False with self.assertRaisesRegexp( ExecutableNotFoundError, 'Could not find executable named "groff"'): renderer.render('foo') def test_shlex_split_for_pager_var(self): pager_cmd = '/bin/sh -c "col -bx | vim -c \'set ft=man\' -"' os.environ['PAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), ['/bin/sh', '-c', "col -bx | vim -c 'set ft=man' -"])
class TestHelpPager(unittest.TestCase): def setUp(self): self.renderer = PosixHelpRenderer() self.save_pager = os.environ.get('PAGER', None) self.save_manpager = os.environ.get('MANPAGER', None) def tearDown(self): if self.save_pager is not None: os.environ['PAGER'] = self.save_pager if self.save_manpager is not None: os.environ['MANPAGER'] = self.save_manpager def test_no_env_vars(self): if 'PAGER' in os.environ: del os.environ['PAGER'] if 'MANPAGER' in os.environ: del os.environ['MANPAGER'] self.assertEqual(self.renderer.get_pager_cmdline(), self.renderer.PAGER.split()) def test_manpager(self): pager_cmd = 'foobar' if 'PAGER' in os.environ: del os.environ['PAGER'] os.environ['MANPAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) def test_pager(self): pager_cmd = 'fiebaz' if 'MANPAGER' in os.environ: del os.environ['MANPAGER'] os.environ['PAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) def test_both(self): os.environ['MANPAGER'] = 'foobar' os.environ['PAGER'] = 'fiebaz' self.assertEqual(self.renderer.get_pager_cmdline(), 'foobar'.split()) def test_manpager_with_args(self): pager_cmd = 'less -X' if 'PAGER' in os.environ: del os.environ['PAGER'] os.environ['MANPAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) def test_pager_with_args(self): pager_cmd = 'less -X --clearscreen' if 'MANPAGER' in os.environ: del os.environ['MANPAGER'] os.environ['PAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split())
def __init__(self, output_stream=sys.stdout): HelpSpyMixin.__init__(self) PosixHelpRenderer.__init__(self, output_stream)
def setUp(self): self.environ = {} self.environ_patch = mock.patch('os.environ', self.environ) self.environ_patch.start() self.renderer = PosixHelpRenderer()
class TestHelpPager(unittest.TestCase): def setUp(self): self.environ = {} self.environ_patch = mock.patch('os.environ', self.environ) self.environ_patch.start() self.renderer = PosixHelpRenderer() def tearDown(self): self.environ_patch.stop() def test_no_env_vars(self): self.assertEqual(self.renderer.get_pager_cmdline(), self.renderer.PAGER.split()) def test_manpager(self): pager_cmd = 'foobar' os.environ['MANPAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) def test_pager(self): pager_cmd = 'fiebaz' os.environ['PAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) def test_both(self): os.environ['MANPAGER'] = 'foobar' os.environ['PAGER'] = 'fiebaz' self.assertEqual(self.renderer.get_pager_cmdline(), 'foobar'.split()) def test_manpager_with_args(self): pager_cmd = 'less -X' os.environ['MANPAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) def test_pager_with_args(self): pager_cmd = 'less -X --clearscreen' os.environ['PAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) @unittest.skipIf(sys.platform.startswith('win'), "requires posix system") def test_no_groff_exists(self): renderer = FakePosixHelpRenderer() renderer.exists_on_path['groff'] = False with self.assertRaisesRegexp(ExecutableNotFoundError, 'Could not find executable named "groff"'): renderer.render('foo') def test_shlex_split_for_pager_var(self): pager_cmd = '/bin/sh -c "col -bx | vim -c \'set ft=man\' -"' os.environ['PAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), ['/bin/sh', '-c', "col -bx | vim -c 'set ft=man' -"]) def test_can_render_contents(self): renderer = FakePosixHelpRenderer() renderer.exists_on_path['groff'] = True renderer.mock_popen.communicate.return_value = ('rendered', '') renderer.render('foo') self.assertEqual(renderer.popen_calls[-1][0], (['less', '-R'],)) def test_can_page_output_on_windows(self): renderer = FakeWindowsHelpRenderer() renderer.mock_popen.communicate.return_value = ('rendered', '') renderer.render('foo') self.assertEqual(renderer.popen_calls[-1][0], (['more'],)) @unittest.skipIf(platform.system() not in ['Darwin', 'Linux'], "Ctrl-C not valid on windows.") def test_can_handle_ctrl_c(self): class CtrlCRenderer(FakePosixHelpRenderer): def _popen(self, *args, **kwargs): if self._is_pager_call(args): os.kill(os.getpid(), signal.SIGINT) return self.mock_popen def _is_pager_call(self, args): return 'less' in args[0] renderer = CtrlCRenderer() renderer.mock_popen.communicate.return_value = ('send to pager', '') renderer.exists_on_path['groff'] = True renderer.render('foo') last_call = renderer.mock_popen.communicate.call_args_list[-1] self.assertEqual(last_call, mock.call(input='send to pager'))
class TestHelpPager(unittest.TestCase): def setUp(self): self.environ = {} self.environ_patch = mock.patch('os.environ', self.environ) self.environ_patch.start() self.renderer = PosixHelpRenderer() def tearDown(self): self.environ_patch.stop() def test_no_env_vars(self): self.assertEqual(self.renderer.get_pager_cmdline(), self.renderer.PAGER.split()) def test_manpager(self): pager_cmd = 'foobar' os.environ['MANPAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) def test_pager(self): pager_cmd = 'fiebaz' os.environ['PAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) def test_both(self): os.environ['MANPAGER'] = 'foobar' os.environ['PAGER'] = 'fiebaz' self.assertEqual(self.renderer.get_pager_cmdline(), 'foobar'.split()) def test_manpager_with_args(self): pager_cmd = 'less -X' os.environ['MANPAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) def test_pager_with_args(self): pager_cmd = 'less -X --clearscreen' os.environ['PAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) @mock.patch('sys.exit', mock.Mock()) def test_with_rst2man_py_exists(self): renderer = FakePosixHelpRenderer() renderer.exists_on_path['rst2man.py'] = True renderer.exists_on_path['rst2man'] = False renderer.exists_on_path['groff'] = True renderer.render('foo') # First call should be to rst2man.py not rst2man # List of tuples, so the first popen call's first position args # first element is the cmdlist ['rst2man.py'] self.assertEqual(renderer.popen_calls[0][0][0], ['rst2man.py']) @mock.patch('sys.exit', mock.Mock()) def test_with_rst2man_py_does_not_exist(self): renderer = FakePosixHelpRenderer() renderer.exists_on_path['rst2man.py'] = False renderer.exists_on_path['rst2man'] = True renderer.exists_on_path['groff'] = True renderer.render('foo') # First call should be to rst2man not rst2man.py self.assertEqual(renderer.popen_calls[0][0][0], ['rst2man']) @mock.patch('sys.exit', mock.Mock()) def test_no_rst2man_exists(self): renderer = FakePosixHelpRenderer() # Simulate neither rst2man.py nor rst2man existing on the path. renderer.exists_on_path['rst2man.py'] = False renderer.exists_on_path['rst2man'] = False with self.assertRaisesRegexp(ExecutableNotFoundError, 'Could not find executable named "rst2man.py"'): renderer.render('foo')
class TestHelpPager(unittest.TestCase): def setUp(self): self.environ = {} self.environ_patch = mock.patch('os.environ', self.environ) self.environ_patch.start() self.renderer = PosixHelpRenderer() def tearDown(self): self.environ_patch.stop() def test_no_env_vars(self): self.assertEqual(self.renderer.get_pager_cmdline(), self.renderer.PAGER.split()) def test_manpager(self): pager_cmd = 'foobar' os.environ['MANPAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) def test_pager(self): pager_cmd = 'fiebaz' os.environ['PAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) def test_both(self): os.environ['MANPAGER'] = 'foobar' os.environ['PAGER'] = 'fiebaz' self.assertEqual(self.renderer.get_pager_cmdline(), 'foobar'.split()) def test_manpager_with_args(self): pager_cmd = 'less -X' os.environ['MANPAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) def test_pager_with_args(self): pager_cmd = 'less -X --clearscreen' os.environ['PAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) @unittest.skipIf(sys.platform.startswith('win'), "requires posix system") def test_no_groff_exists(self): renderer = FakePosixHelpRenderer() renderer.exists_on_path['groff'] = False with self.assertRaisesRegexp(ExecutableNotFoundError, 'Could not find executable named "groff"'): renderer.render('foo') def test_shlex_split_for_pager_var(self): pager_cmd = '/bin/sh -c "col -bx | vim -c \'set ft=man\' -"' os.environ['PAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), ['/bin/sh', '-c', "col -bx | vim -c 'set ft=man' -"]) def test_can_render_contents(self): renderer = FakePosixHelpRenderer() renderer.exists_on_path['groff'] = True renderer.mock_popen.communicate.return_value = ('rendered', '') renderer.render('foo') self.assertEqual(renderer.popen_calls[-1][0], (['less', '-R'],)) def test_can_page_output_on_windows(self): renderer = FakeWindowsHelpRenderer() renderer.mock_popen.communicate.return_value = ('rendered', '') renderer.render('foo') self.assertEqual(renderer.popen_calls[-1][0], (['more'],))
def setUp(self): self.renderer = PosixHelpRenderer() self.save_pager = os.environ.get('PAGER', None) self.save_manpager = os.environ.get('MANPAGER', None)
class TestHelpPager(unittest.TestCase): def setUp(self): self.environ = {} self.environ_patch = mock.patch('os.environ', self.environ) self.environ_patch.start() self.renderer = PosixHelpRenderer() def tearDown(self): self.environ_patch.stop() def test_no_env_vars(self): self.assertEqual(self.renderer.get_pager_cmdline(), self.renderer.PAGER.split()) def test_manpager(self): pager_cmd = 'foobar' os.environ['MANPAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) def test_pager(self): pager_cmd = 'fiebaz' os.environ['PAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) def test_both(self): os.environ['MANPAGER'] = 'foobar' os.environ['PAGER'] = 'fiebaz' self.assertEqual(self.renderer.get_pager_cmdline(), 'foobar'.split()) def test_manpager_with_args(self): pager_cmd = 'less -X' os.environ['MANPAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) def test_pager_with_args(self): pager_cmd = 'less -X --clearscreen' os.environ['PAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) @skip_if_windows('Requires posix system.') def test_no_groff_exists(self): renderer = FakePosixHelpRenderer() renderer.exists_on_path['groff'] = False expected_error = 'Could not find executable named "groff"' with self.assertRaisesRegexp(ExecutableNotFoundError, expected_error): renderer.render('foo') @skip_if_windows('Requires POSIX system.') def test_no_pager_exists(self): fake_pager = 'foobar' os.environ['MANPAGER'] = fake_pager stdout = six.StringIO() renderer = FakePosixHelpRenderer(output_stream=stdout) renderer.exists_on_path[fake_pager] = False renderer.exists_on_path['groff'] = True renderer.mock_popen.communicate.return_value = (b'foo', '') renderer.render('foo') self.assertEqual(stdout.getvalue(), 'foo\n') def test_shlex_split_for_pager_var(self): pager_cmd = '/bin/sh -c "col -bx | vim -c \'set ft=man\' -"' os.environ['PAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), ['/bin/sh', '-c', "col -bx | vim -c 'set ft=man' -"]) def test_can_render_contents(self): renderer = FakePosixHelpRenderer() renderer.exists_on_path['groff'] = True renderer.exists_on_path['less'] = True renderer.mock_popen.communicate.return_value = ('rendered', '') renderer.render('foo') self.assertEqual(renderer.popen_calls[-1][0], (['less', '-R'], )) def test_can_page_output_on_windows(self): renderer = FakeWindowsHelpRenderer() renderer.mock_popen.communicate.return_value = ('rendered', '') renderer.render('foo') self.assertEqual(renderer.popen_calls[-1][0], (['more'], )) @skip_if_windows("Ctrl-C not valid on windows.") def test_can_handle_ctrl_c(self): class CtrlCRenderer(FakePosixHelpRenderer): def _popen(self, *args, **kwargs): if self._is_pager_call(args): os.kill(os.getpid(), signal.SIGINT) return self.mock_popen def _is_pager_call(self, args): return 'less' in args[0] renderer = CtrlCRenderer() renderer.mock_popen.communicate.return_value = ('send to pager', '') renderer.exists_on_path['groff'] = True renderer.exists_on_path['less'] = True renderer.render('foo') last_call = renderer.mock_popen.communicate.call_args_list[-1] self.assertEqual(last_call, mock.call(input='send to pager'))
class TestHelpPager(unittest.TestCase): def setUp(self): self.environ = {} self.environ_patch = mock.patch('os.environ', self.environ) self.environ_patch.start() self.renderer = PosixHelpRenderer() def tearDown(self): self.environ_patch.stop() def test_no_env_vars(self): self.assertEqual(self.renderer.get_pager_cmdline(), self.renderer.PAGER.split()) def test_manpager(self): pager_cmd = 'foobar' os.environ['MANPAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) def test_pager(self): pager_cmd = 'fiebaz' os.environ['PAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) def test_both(self): os.environ['MANPAGER'] = 'foobar' os.environ['PAGER'] = 'fiebaz' self.assertEqual(self.renderer.get_pager_cmdline(), 'foobar'.split()) def test_manpager_with_args(self): pager_cmd = 'less -X' os.environ['MANPAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) def test_pager_with_args(self): pager_cmd = 'less -X --clearscreen' os.environ['PAGER'] = pager_cmd self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split()) @mock.patch('sys.exit', mock.Mock()) def test_with_rst2man_py_exists(self): renderer = FakePosixHelpRenderer() renderer.exists_on_path['rst2man.py'] = True renderer.exists_on_path['rst2man'] = False renderer.exists_on_path['groff'] = True renderer.render('foo') # First call should be to rst2man.py not rst2man # List of tuples, so the first popen call's first position args # first element is the cmdlist ['rst2man.py'] self.assertEqual(renderer.popen_calls[0][0][0], ['rst2man.py']) @mock.patch('sys.exit', mock.Mock()) def test_with_rst2man_py_does_not_exist(self): renderer = FakePosixHelpRenderer() renderer.exists_on_path['rst2man.py'] = False renderer.exists_on_path['rst2man'] = True renderer.exists_on_path['groff'] = True renderer.render('foo') # First call should be to rst2man not rst2man.py self.assertEqual(renderer.popen_calls[0][0][0], ['rst2man']) @mock.patch('sys.exit', mock.Mock()) def test_no_rst2man_exists(self): renderer = FakePosixHelpRenderer() # Simulate neither rst2man.py nor rst2man existing on the path. renderer.exists_on_path['rst2man.py'] = False renderer.exists_on_path['rst2man'] = False with self.assertRaisesRegexp( ExecutableNotFoundError, 'Could not find executable named "rst2man.py"'): renderer.render('foo')