mirror of
https://github.com/clearml/wexpect-venv
synced 2025-02-24 13:23:09 +00:00
[ADD] first unittests copied from pexpect
This commit is contained in:
parent
75042b1658
commit
18a1bfd60f
105
tests/PexpectTestCase.py
Normal file
105
tests/PexpectTestCase.py
Normal file
@ -0,0 +1,105 @@
|
||||
|
||||
'''
|
||||
PEXPECT LICENSE
|
||||
|
||||
This license is approved by the OSI and FSF as GPL-compatible.
|
||||
http://opensource.org/licenses/isc-license.txt
|
||||
|
||||
Copyright (c) 2012, Noah Spurrier <noah@noah.org>
|
||||
PERMISSION TO USE, COPY, MODIFY, AND/OR DISTRIBUTE THIS SOFTWARE FOR ANY
|
||||
PURPOSE WITH OR WITHOUT FEE IS HEREBY GRANTED, PROVIDED THAT THE ABOVE
|
||||
COPYRIGHT NOTICE AND THIS PERMISSION NOTICE APPEAR IN ALL COPIES.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
'''
|
||||
from __future__ import print_function
|
||||
|
||||
import contextlib
|
||||
import unittest
|
||||
import signal
|
||||
import sys
|
||||
import os
|
||||
|
||||
|
||||
class PexpectTestCase(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.PYTHONBIN = sys.executable
|
||||
self.original_path = os.getcwd()
|
||||
tests_dir = os.path.dirname(__file__)
|
||||
self.project_dir = project_dir = os.path.dirname(tests_dir)
|
||||
|
||||
# all tests are executed in this folder; there are many auxiliary
|
||||
# programs in this folder executed by spawn().
|
||||
os.chdir(tests_dir)
|
||||
|
||||
# If the pexpect raises an exception after fork(), but before
|
||||
# exec(), our test runner *also* forks. We prevent this by
|
||||
# storing our pid and asserting equality on tearDown.
|
||||
self.pid = os.getpid()
|
||||
|
||||
coverage_rc = os.path.join(project_dir, '.coveragerc')
|
||||
os.environ['COVERAGE_PROCESS_START'] = coverage_rc
|
||||
os.environ['COVERAGE_FILE'] = os.path.join(project_dir, '.coverage')
|
||||
print('\n', self.id(), end=' ')
|
||||
sys.stdout.flush()
|
||||
|
||||
# some build agents will ignore SIGHUP and SIGINT, which python
|
||||
# inherits. This causes some of the tests related to terminate()
|
||||
# to fail. We set them to the default handlers that they should
|
||||
# be, and restore them back to their SIG_IGN value on tearDown.
|
||||
#
|
||||
# I'm not entirely convinced they need to be restored, only our
|
||||
# test runner is affected.
|
||||
self.restore_ignored_signals = [
|
||||
value for value in (signal.SIGINT,)
|
||||
if signal.getsignal(value) == signal.SIG_IGN]
|
||||
if signal.SIGINT in self.restore_ignored_signals:
|
||||
# SIGINT should be set to signal.default_int_handler
|
||||
signal.signal(signal.SIGINT, signal.default_int_handler)
|
||||
unittest.TestCase.setUp(self)
|
||||
|
||||
def tearDown(self):
|
||||
# restore original working folder
|
||||
os.chdir(self.original_path)
|
||||
|
||||
if self.pid != os.getpid():
|
||||
# The build server pattern-matches phrase 'Test runner has forked!'
|
||||
print("Test runner has forked! This means a child process raised "
|
||||
"an exception before exec() in a test case, the error is "
|
||||
"more than likely found above this line in stderr.",
|
||||
file=sys.stderr)
|
||||
exit(1)
|
||||
|
||||
# restore signal handlers
|
||||
for signal_value in self.restore_ignored_signals:
|
||||
signal.signal(signal_value, signal.SIG_IGN)
|
||||
|
||||
if sys.version_info < (2, 7):
|
||||
# We want to use these methods, which are new/improved in 2.7, but
|
||||
# we are still supporting 2.6 for the moment. This section can be
|
||||
# removed when we drop Python 2.6 support.
|
||||
@contextlib.contextmanager
|
||||
def assertRaises(self, excClass):
|
||||
try:
|
||||
yield
|
||||
except Exception as e:
|
||||
assert isinstance(e, excClass)
|
||||
else:
|
||||
raise AssertionError("%s was not raised" % excClass)
|
||||
|
||||
@contextlib.contextmanager
|
||||
def assertRaisesRegexp(self, excClass, pattern):
|
||||
import re
|
||||
try:
|
||||
yield
|
||||
except Exception as e:
|
||||
assert isinstance(e, excClass)
|
||||
assert re.match(pattern, str(e))
|
||||
else:
|
||||
raise AssertionError("%s was not raised" % excClass)
|
25
tests/__init__.py
Normal file
25
tests/__init__.py
Normal file
@ -0,0 +1,25 @@
|
||||
|
||||
'''
|
||||
PEXPECT LICENSE
|
||||
|
||||
This license is approved by the OSI and FSF as GPL-compatible.
|
||||
http://opensource.org/licenses/isc-license.txt
|
||||
|
||||
Copyright (c) 2012, Noah Spurrier <noah@noah.org>
|
||||
PERMISSION TO USE, COPY, MODIFY, AND/OR DISTRIBUTE THIS SOFTWARE FOR ANY
|
||||
PURPOSE WITH OR WITHOUT FEE IS HEREBY GRANTED, PROVIDED THAT THE ABOVE
|
||||
COPYRIGHT NOTICE AND THIS PERMISSION NOTICE APPEAR IN ALL COPIES.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
'''
|
||||
|
||||
# __init__.py
|
||||
# The mere presence of this file makes the dir a package.
|
||||
pass
|
||||
|
40
tests/test_command_list_split.py
Normal file
40
tests/test_command_list_split.py
Normal file
@ -0,0 +1,40 @@
|
||||
#!/usr/bin/env python
|
||||
'''
|
||||
PEXPECT LICENSE
|
||||
|
||||
This license is approved by the OSI and FSF as GPL-compatible.
|
||||
http://opensource.org/licenses/isc-license.txt
|
||||
|
||||
Copyright (c) 2012, Noah Spurrier <noah@noah.org>
|
||||
PERMISSION TO USE, COPY, MODIFY, AND/OR DISTRIBUTE THIS SOFTWARE FOR ANY
|
||||
PURPOSE WITH OR WITHOUT FEE IS HEREBY GRANTED, PROVIDED THAT THE ABOVE
|
||||
COPYRIGHT NOTICE AND THIS PERMISSION NOTICE APPEAR IN ALL COPIES.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
'''
|
||||
import wexpect
|
||||
import unittest
|
||||
from . import PexpectTestCase
|
||||
|
||||
class SplitCommandLineTestCase(PexpectTestCase.PexpectTestCase):
|
||||
def testSplitSizes(self):
|
||||
assert len(wexpect.split_command_line(r'')) == 0
|
||||
assert len(wexpect.split_command_line(r'one')) == 1
|
||||
assert len(wexpect.split_command_line(r'one two')) == 2
|
||||
assert len(wexpect.split_command_line(r'one two')) == 2
|
||||
assert len(wexpect.split_command_line(r'one two')) == 2
|
||||
assert len(wexpect.split_command_line(r'one\ one')) == 1
|
||||
assert len(wexpect.split_command_line('\'one one\'')) == 1
|
||||
assert len(wexpect.split_command_line(r'one\"one')) == 1
|
||||
assert len(wexpect.split_command_line(r'This\' is a\'\ test')) == 3
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
suite = unittest.makeSuite(SplitCommandLineTestCase,'test')
|
45
tests/test_delay.py
Normal file
45
tests/test_delay.py
Normal file
@ -0,0 +1,45 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from . import PexpectTestCase
|
||||
import wexpect
|
||||
|
||||
|
||||
class TestCaseDelay(PexpectTestCase.PexpectTestCase):
|
||||
"""
|
||||
Tests for various delay attributes.
|
||||
"""
|
||||
def test_delaybeforesend(self):
|
||||
"""
|
||||
Test various values for delaybeforesend.
|
||||
"""
|
||||
p = wexpect.spawn("cat")
|
||||
|
||||
p.delaybeforesend = 1
|
||||
p.sendline("line 1")
|
||||
p.expect("line 1")
|
||||
|
||||
p.delaybeforesend = 0.0
|
||||
p.sendline("line 2")
|
||||
p.expect("line 2")
|
||||
|
||||
p.delaybeforesend = None
|
||||
p.sendline("line 3")
|
||||
p.expect("line 3")
|
||||
|
||||
def test_delayafterread(self):
|
||||
"""
|
||||
Test various values for delayafterread.
|
||||
"""
|
||||
p = wexpect.spawn("cat")
|
||||
|
||||
p.delayafterread = 1
|
||||
p.sendline("line 1")
|
||||
p.expect("line 1")
|
||||
|
||||
p.delayafterread = 0.0
|
||||
p.sendline("line 2")
|
||||
p.expect("line 2")
|
||||
|
||||
p.delayafterread = None
|
||||
p.sendline("line 3")
|
||||
p.expect("line 3")
|
Loading…
Reference in New Issue
Block a user