forked from extern/httpie-cli
80 lines
2.2 KiB
Python
80 lines
2.2 KiB
Python
import os
|
|
import sys
|
|
|
|
import pexpect
|
|
import pytest
|
|
|
|
from .base import TempAppDirTestCase
|
|
from .utils import get_http_prompt_path
|
|
from httpie.prompt import config
|
|
|
|
|
|
class TestInteraction(TempAppDirTestCase):
|
|
|
|
def setUp(self):
|
|
super(TestInteraction, self).setUp()
|
|
|
|
# Use temporary directory as user config home.
|
|
# Will restore it in tearDown().
|
|
self.orig_config_home = os.getenv('XDG_CONFIG_HOME')
|
|
os.environ['XDG_CONFIG_HOME'] = self.temp_dir
|
|
|
|
# Make sure pexpect uses the same terminal environment
|
|
self.orig_term = os.getenv('TERM')
|
|
os.environ['TERM'] = 'screen-256color'
|
|
|
|
def tearDown(self):
|
|
super(TestInteraction, self).tearDown()
|
|
|
|
os.environ['XDG_CONFIG_HOME'] = self.orig_config_home
|
|
|
|
if self.orig_term:
|
|
os.environ['TERM'] = self.orig_term
|
|
else:
|
|
os.environ.pop('TERM', None)
|
|
|
|
def write_config(self, content):
|
|
config_path = config.get_user_config_path()
|
|
with open(config_path, 'a') as f:
|
|
f.write(content)
|
|
|
|
@pytest.mark.skipif(sys.platform == 'win32',
|
|
reason="pexpect doesn't work well on Windows")
|
|
@pytest.mark.slow
|
|
def test_interaction(self):
|
|
bin_path = get_http_prompt_path()
|
|
child = pexpect.spawn(bin_path, env=os.environ)
|
|
|
|
# TODO: Test more interaction
|
|
|
|
child.sendline('exit')
|
|
child.expect_exact('Goodbye!', timeout=20)
|
|
child.close()
|
|
|
|
@pytest.mark.skipif(sys.platform == 'win32',
|
|
reason="pexpect doesn't work well on Windows")
|
|
@pytest.mark.slow
|
|
def test_vi_mode(self):
|
|
self.write_config('vi = True\n')
|
|
|
|
bin_path = get_http_prompt_path()
|
|
child = pexpect.spawn(bin_path, env=os.environ)
|
|
|
|
child.expect_exact('http://localhost:8000>')
|
|
|
|
# Enter 'htpie', switch to command mode (ESC),
|
|
# move two chars left (hh), and insert (i) a 't'
|
|
child.send('htpie')
|
|
child.send('\x1b')
|
|
child.sendline('hhit')
|
|
|
|
child.expect_exact('http http://localhost:8000')
|
|
|
|
# Enter 'exit'
|
|
child.send('\x1b')
|
|
child.send('i')
|
|
child.sendline('exit')
|
|
|
|
child.expect_exact('Goodbye!', timeout=20)
|
|
child.close()
|