117 lines
4.0 KiB
Python
117 lines
4.0 KiB
Python
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
import unittest
|
|
|
|
import fixtures # type: ignore
|
|
|
|
from typing import Any, Optional, Dict, List
|
|
|
|
import autopage
|
|
from autopage import command
|
|
|
|
|
|
_PagerConfig = command.PagerConfig
|
|
|
|
|
|
class ConfigTest(unittest.TestCase):
|
|
def setUp(self) -> None:
|
|
class TestCommand(command.PagerCommand):
|
|
def __init__(self) -> None:
|
|
self.config: Optional[_PagerConfig] = None
|
|
|
|
def command(self) -> List[str]:
|
|
return []
|
|
|
|
def environment_variables(
|
|
self,
|
|
config: _PagerConfig) -> Optional[Dict[str, str]]:
|
|
self.config = config
|
|
return None
|
|
|
|
self.test_command = TestCommand()
|
|
|
|
def _get_ap_config(self, **args: Any) -> command.PagerConfig:
|
|
ap = autopage.AutoPager(pager_command=self.test_command, **args)
|
|
ap._pager_env()
|
|
config = self.test_command.config
|
|
assert config is not None
|
|
return config
|
|
|
|
def test_defaults(self) -> None:
|
|
config = self._get_ap_config()
|
|
self.assertTrue(config.color)
|
|
self.assertFalse(config.line_buffering_requested)
|
|
self.assertFalse(config.reset_terminal)
|
|
|
|
def test_nocolor(self) -> None:
|
|
config = self._get_ap_config(allow_color=False)
|
|
self.assertFalse(config.color)
|
|
self.assertFalse(config.line_buffering_requested)
|
|
self.assertFalse(config.reset_terminal)
|
|
|
|
def test_reset(self) -> None:
|
|
config = self._get_ap_config(reset_on_exit=True)
|
|
self.assertTrue(config.color)
|
|
self.assertFalse(config.line_buffering_requested)
|
|
self.assertTrue(config.reset_terminal)
|
|
|
|
def test_linebuffered(self) -> None:
|
|
config = self._get_ap_config(line_buffering=True)
|
|
self.assertTrue(config.color)
|
|
self.assertTrue(config.line_buffering_requested)
|
|
self.assertFalse(config.reset_terminal)
|
|
|
|
def test_not_linebuffered(self) -> None:
|
|
config = self._get_ap_config(line_buffering=False)
|
|
self.assertTrue(config.color)
|
|
self.assertFalse(config.line_buffering_requested)
|
|
self.assertFalse(config.reset_terminal)
|
|
|
|
|
|
class EnvironmentBuildTest(unittest.TestCase):
|
|
class TestCommand(command.PagerCommand):
|
|
def __init__(self, env: Optional[Dict[str, str]]):
|
|
self._env = env
|
|
|
|
def command(self) -> List[str]:
|
|
return ['foo']
|
|
|
|
def environment_variables(self,
|
|
config: _PagerConfig) -> Optional[Dict[str,
|
|
str]]:
|
|
return self._env
|
|
|
|
def test_env(self) -> None:
|
|
cmd = self.TestCommand({"FOO": "bar"})
|
|
ap = autopage.AutoPager(pager_command=cmd)
|
|
with fixtures.EnvironmentVariable('BAZ', 'quux'):
|
|
env = ap._pager_env()
|
|
self.assertIsNotNone(env)
|
|
assert env is not None
|
|
self.assertEqual('quux', env['BAZ'])
|
|
self.assertEqual('bar', env['FOO'])
|
|
|
|
def test_env_empty(self) -> None:
|
|
cmd = self.TestCommand({})
|
|
ap = autopage.AutoPager(pager_command=cmd)
|
|
with fixtures.EnvironmentVariable('BAZ', 'quux'):
|
|
env = ap._pager_env()
|
|
self.assertIsNone(env)
|
|
|
|
def test_env_none(self) -> None:
|
|
cmd = self.TestCommand(None)
|
|
ap = autopage.AutoPager(pager_command=cmd)
|
|
with fixtures.EnvironmentVariable('BAZ', 'quux'):
|
|
env = ap._pager_env()
|
|
self.assertIsNone(env)
|