3 # Copyright 2000-2010 Steven Knight
5 # This module is free software, and you may redistribute it and/or modify
6 # it under the same terms as Python itself, so long as this copyright message
7 # and disclaimer are retained in their original form.
9 # IN NO EVENT SHALL THE AUTHOR BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
10 # SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF
11 # THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
14 # THE AUTHOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT
15 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
16 # PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS,
17 # AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
18 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
20 # Python License: https://docs.python.org/3/license.html#psf-license
23 Unit tests for the TestCommon.py module.
31 from textwrap
import dedent
33 # Strip the current directory so we get the right TestCommon.py module.
34 sys
.path
= sys
.path
[1:]
39 # this used to be a custom function, now use the stdlib equivalent
43 expected_newline
= '\\n'
46 def assert_display(expect
, result
, error
=None):
48 expect
= expect
.pattern
49 except AttributeError:
53 f
"{'EXPECTED: ':*<80}\n",
57 '' if error
is None else error
,
60 return ''.join(display
)
63 class TestCommonTestCase(unittest
.TestCase
):
64 """Base class for TestCommon test cases, fixture and utility methods."""
67 def setUp(self
) -> None:
68 self
.orig_cwd
= os
.getcwd()
69 if self
.create_run_env
:
70 self
.run_env
= TestCmd
.TestCmd(workdir
= '')
72 def tearDown(self
) -> None:
73 os
.chdir(self
.orig_cwd
)
75 def set_up_execution_scripts(self
) -> None:
76 run_env
= self
.run_env
78 run_env
.subdir('sub dir')
80 self
.python
= sys
.executable
82 self
.pass_script
= run_env
.workpath('sub dir', 'pass')
83 self
.fail_script
= run_env
.workpath('sub dir', 'fail')
84 self
.stdout_script
= run_env
.workpath('sub dir', 'stdout')
85 self
.stderr_script
= run_env
.workpath('sub dir', 'stderr')
86 self
.signal_script
= run_env
.workpath('sub dir', 'signal')
87 self
.stdin_script
= run_env
.workpath('sub dir', 'stdin')
89 preamble
= "import sys"
90 stdout
= "; sys.stdout.write(r'%s: STDOUT: ' + repr(sys.argv[1:]) + '\\n')"
91 stderr
= "; sys.stderr.write(r'%s: STDERR: ' + repr(sys.argv[1:]) + '\\n')"
92 exit0
= "; sys.exit(0)"
93 exit1
= "; sys.exit(1)"
94 if sys
.platform
== 'win32':
95 wrapper
= '@python -c "%s" %%1 %%2 %%3 %%4 %%5 %%6 %%7 %%8 %%9\n'
97 wrapper
= '#! /usr/bin/env python\n%s\n'
98 wrapper
= '#! /usr/bin/env python\n%s\n'
100 pass_body
= preamble
+ stdout
% self
.pass_script
+ exit0
101 fail_body
= preamble
+ stdout
% self
.fail_script
+ exit1
102 stderr_body
= preamble
+ stderr
% self
.stderr_script
+ exit0
104 run_env
.write(self
.pass_script
, wrapper
% pass_body
)
105 run_env
.write(self
.fail_script
, wrapper
% fail_body
)
106 run_env
.write(self
.stderr_script
, wrapper
% stderr_body
)
108 signal_body
= lstrip("""\
111 os.kill(os.getpid(), signal.SIGTERM)
114 run_env
.write(self
.signal_script
, wrapper
% signal_body
)
116 stdin_body
= lstrip("""\
118 input = sys.stdin.read()[:-1]
119 sys.stdout.write(r'%s: STDOUT: ' + repr(input) + '\\n')
120 sys.stderr.write(r'%s: STDERR: ' + repr(input) + '\\n')
121 """ % (self
.stdin_script
, self
.stdin_script
))
123 run_env
.write(self
.stdin_script
, wrapper
% stdin_body
)
125 def run_execution_test(self
, script
, expect_stdout
, expect_stderr
) -> None:
126 self
.set_up_execution_scripts()
128 run_env
= self
.run_env
130 os
.chdir(run_env
.workpath('sub dir'))
132 # Everything before this prepared our "source directory."
133 # Now do the real test.
134 script
= script
% self
.__dict
__
135 run_env
.run(program
=sys
.executable
, stdin
=script
)
137 stdout
= run_env
.stdout()
138 stderr
= run_env
.stderr()
140 expect_stdout
= expect_stdout
% self
.__dict
__
141 assert stdout
== expect_stdout
, assert_display(expect_stdout
,
146 match
= expect_stderr
.match
147 except AttributeError:
148 expect_stderr
= expect_stderr
% self
.__dict
__
149 assert stderr
== expect_stderr
, assert_display(expect_stderr
,
152 assert expect_stderr
.match(stderr
), assert_display(expect_stderr
,
156 class __init__TestCase(TestCommonTestCase
):
157 def test___init__(self
) -> None:
158 """Test initialization"""
159 run_env
= self
.run_env
161 os
.chdir(run_env
.workdir
)
163 from TestCommon import TestCommon
164 tc = TestCommon(workdir='')
168 run_env
.run(program
=sys
.executable
, stdin
=script
)
169 stdout
= run_env
.stdout()[:-1]
170 assert stdout
!= run_env
.workdir
, stdout
171 stderr
= run_env
.stderr()
172 assert stderr
== "", stderr
175 class banner_TestCase(TestCommonTestCase
):
176 create_run_env
= False
177 def test_banner(self
) -> None:
179 tc
= TestCommon
.TestCommon(workdir
='')
181 b
= tc
.banner('xyzzy ')
182 assert b
== "xyzzy ==========================================================================", b
186 b
= tc
.banner('xyzzy ')
187 assert b
== "xyzzy ====", b
189 b
= tc
.banner('xyzzy ', 20)
190 assert b
== "xyzzy ==============", b
194 b
= tc
.banner('xyzzy ')
195 assert b
== "xyzzy ----", b
197 class must_be_writable_TestCase(TestCommonTestCase
):
198 def test_file_does_not_exists(self
) -> None:
199 """Test must_be_writable(): file does not exist"""
200 run_env
= self
.run_env
203 from TestCommon import TestCommon
204 tc = TestCommon(workdir='')
205 tc.must_be_writable('file1')
208 run_env
.run(program
=sys
.executable
, stdin
=script
)
209 stdout
= run_env
.stdout()
210 assert stdout
== "Missing files: `file1'\n", stdout
211 stderr
= run_env
.stderr()
212 assert stderr
.find("FAILED") != -1, stderr
214 def test_writable_file_exists(self
) -> None:
215 """Test must_be_writable(): writable file exists"""
216 run_env
= self
.run_env
221 from TestCommon import TestCommon
222 tc = TestCommon(workdir='')
223 tc.write('file1', "file1\\n")
224 f1 = tc.workpath('file1')
225 mode = os.stat(f1).st_mode
226 os.chmod(f1, mode | stat.S_IWUSR)
227 tc.must_be_writable('file1')
230 run_env
.run(program
=sys
.executable
, stdin
=script
)
231 stdout
= run_env
.stdout()
232 assert stdout
== "", stdout
233 stderr
= run_env
.stderr()
234 assert stderr
== "PASSED\n", stderr
236 def test_non_writable_file_exists(self
) -> None:
237 """Test must_be_writable(): non-writable file exists"""
238 run_env
= self
.run_env
243 from TestCommon import TestCommon
244 tc = TestCommon(workdir='')
245 tc.write('file1', "file1\\n")
246 f1 = tc.workpath('file1')
247 mode = os.stat(f1).st_mode
248 os.chmod(f1, mode & ~stat.S_IWUSR)
249 tc.must_be_writable('file1')
252 run_env
.run(program
=sys
.executable
, stdin
=script
)
253 stdout
= run_env
.stdout()
254 assert stdout
== "Unwritable files: `file1'\n", stdout
255 stderr
= run_env
.stderr()
256 assert stderr
.find("FAILED") != -1, stderr
258 def test_file_specified_as_list(self
) -> None:
259 """Test must_be_writable(): file specified as list"""
260 run_env
= self
.run_env
265 from TestCommon import TestCommon
266 tc = TestCommon(workdir='')
268 tc.write(['sub', 'file1'], "sub/file1\\n")
269 f1 = tc.workpath('sub', 'file1')
270 mode = os.stat(f1).st_mode
271 os.chmod(f1, mode | stat.S_IWUSR)
272 tc.must_be_writable(['sub', 'file1'])
275 run_env
.run(program
=sys
.executable
, stdin
=script
)
276 stdout
= run_env
.stdout()
277 assert stdout
== "", stdout
278 stderr
= run_env
.stderr()
279 assert stderr
== "PASSED\n", stderr
282 class must_contain_TestCase(TestCommonTestCase
):
283 def test_success(self
) -> None:
284 """Test must_contain(): success"""
285 run_env
= self
.run_env
288 from TestCommon import TestCommon
289 tc = TestCommon(workdir='')
290 tc.write('file1', "file1 contents\\n")
291 tc.must_contain('file1', "1 c")
294 run_env
.run(program
=sys
.executable
, stdin
=script
)
295 stdout
= run_env
.stdout()
296 assert stdout
== "", stdout
297 stderr
= run_env
.stderr()
298 assert stderr
== "PASSED\n", stderr
300 def test_success_index_0(self
) -> None:
301 """Test must_contain(): success at index 0"""
302 run_env
= self
.run_env
305 from TestCommon import TestCommon
306 tc = TestCommon(workdir='')
307 tc.write('file1', "file1 contents\\n")
308 tc.must_contain('file1', "file1 c")
311 run_env
.run(program
=sys
.executable
, stdin
=script
)
312 stdout
= run_env
.stdout()
313 assert stdout
== "", stdout
314 stderr
= run_env
.stderr()
315 assert stderr
== "PASSED\n", stderr
317 def test_file_missing(self
) -> None:
318 """Test must_contain(): file missing"""
319 run_env
= self
.run_env
322 from TestCommon import TestCommon
323 tc = TestCommon(workdir='')
324 tc.must_contain('file1', "1 c\\n")
327 run_env
.run(program
=sys
.executable
, stdin
=script
)
328 stdout
= run_env
.stdout()
329 assert stdout
== "", stdout
330 stderr
= run_env
.stderr()
331 assert stderr
.find("No such file or directory:") != -1, stderr
333 def test_failure(self
) -> None:
334 """Test must_contain(): failure"""
335 run_env
= self
.run_env
338 from TestCommon import TestCommon
339 tc = TestCommon(workdir='')
340 tc.write('file1', "file1 does not match\\n")
341 tc.must_contain('file1', "1 c")
345 File `file1' does not contain required string.
346 Required string ================================================================
348 file1 contents =================================================================
349 b'file1 does not match\\n'
351 run_env
.run(program
=sys
.executable
, stdin
=script
)
352 stdout
= run_env
.stdout()
353 assert stdout
== expect
, f
"got:\n{stdout}\nexpected:\n{expect}"
354 stderr
= run_env
.stderr()
355 assert stderr
.find("FAILED") != -1, stderr
357 def test_mode(self
) -> None:
358 """Test must_contain(): mode"""
359 run_env
= self
.run_env
362 from TestCommon import TestCommon
363 tc = TestCommon(workdir='')
364 tc.write('file1', "file1 contents\\n", mode='w')
365 tc.must_contain('file1', "1 c", mode='r')
366 tc.write('file2', "file2 contents\\n", mode='wb')
367 tc.must_contain('file2', "2 c", mode='rb')
370 run_env
.run(program
=sys
.executable
, stdin
=script
)
371 stdout
= run_env
.stdout()
372 assert stdout
== "", stdout
373 stderr
= run_env
.stderr()
374 assert stderr
== "PASSED\n", stderr
378 class must_contain_all_lines_TestCase(TestCommonTestCase
):
379 def test_success(self
) -> None:
380 """Test must_contain_all_lines(): success"""
381 run_env
= self
.run_env
385 test = TestCommon.TestCommon(workdir='')
399 test.must_contain_all_lines(output, lines)
401 test.must_contain_all_lines(output, ['www\\n'])
406 run_env
.run(program
=sys
.executable
, stdin
=script
)
407 stdout
= run_env
.stdout()
408 assert stdout
== "", stdout
409 stderr
= run_env
.stderr()
410 assert stderr
== "PASSED\n", stderr
412 def test_failure(self
) -> None:
413 """Test must_contain_all_lines(): failure"""
414 run_env
= self
.run_env
418 test = TestCommon.TestCommon(workdir='')
430 test.must_contain_all_lines(output, lines)
436 Missing expected lines from output:
437 'xxx%(expected_newline)s'
438 'yyy%(expected_newline)s'
439 output =========================================================================
444 run_env
.run(program
=sys
.executable
, stdin
=script
)
445 stdout
= run_env
.stdout()
446 stderr
= run_env
.stderr()
447 assert stdout
== expect
, assert_display(expect
, stdout
, stderr
)
448 assert stderr
.find("FAILED") != -1, stderr
450 def test_find(self
) -> None:
451 """Test must_contain_all_lines(): find"""
452 run_env
= self
.run_env
457 test = TestCommon.TestCommon(workdir='')
471 def re_search(output, line):
472 return re.compile(line, re.S).search(output)
474 test.must_contain_all_lines(output, lines, find=re_search)
479 run_env
.run(program
=sys
.executable
, stdin
=script
)
480 stdout
= run_env
.stdout()
481 assert stdout
== "", stdout
482 stderr
= run_env
.stderr()
483 assert stderr
== "PASSED\n", stderr
485 def test_title(self
) -> None:
486 """Test must_contain_all_lines(): title"""
487 run_env
= self
.run_env
491 test = TestCommon.TestCommon(workdir='')
503 test.must_contain_all_lines(output, lines, title='STDERR')
509 Missing expected lines from STDERR:
510 'xxx%(expected_newline)s'
511 'yyy%(expected_newline)s'
512 STDERR =========================================================================
517 run_env
.run(program
=sys
.executable
, stdin
=script
)
518 stdout
= run_env
.stdout()
519 stderr
= run_env
.stderr()
520 assert stdout
== expect
, assert_display(expect
, stdout
, stderr
)
521 assert stderr
.find("FAILED") != -1, stderr
525 class must_contain_any_line_TestCase(TestCommonTestCase
):
526 def test_success(self
) -> None:
527 """Test must_contain_any_line(): success"""
528 run_env
= self
.run_env
532 test = TestCommon.TestCommon(workdir='')
546 test.must_contain_any_line(output, lines)
548 test.must_contain_any_line(output, ['www\\n'])
553 run_env
.run(program
=sys
.executable
, stdin
=script
)
554 stdout
= run_env
.stdout()
555 assert stdout
== "", stdout
556 stderr
= run_env
.stderr()
557 assert stderr
== "PASSED\n", stderr
559 def test_failure(self
) -> None:
560 """Test must_contain_any_line(): failure"""
561 run_env
= self
.run_env
565 test = TestCommon.TestCommon(workdir='')
577 test.must_contain_any_line(output, lines)
583 Missing any expected line from output:
584 'xxx%(expected_newline)s'
585 'yyy%(expected_newline)s'
586 output =========================================================================
591 run_env
.run(program
=sys
.executable
, stdin
=script
)
592 stdout
= run_env
.stdout()
593 stderr
= run_env
.stderr()
594 assert stdout
== expect
, assert_display(expect
, stdout
, stderr
)
595 assert stderr
.find("FAILED") != -1, stderr
597 def test_find(self
) -> None:
598 """Test must_contain_any_line(): find"""
599 run_env
= self
.run_env
604 test = TestCommon.TestCommon(workdir='')
618 def re_search(output, line):
619 return re.compile(line, re.S).search(output)
620 test.must_contain_any_line(output, lines, find=re_search)
625 run_env
.run(program
=sys
.executable
, stdin
=script
)
626 stdout
= run_env
.stdout()
627 assert stdout
== "", stdout
628 stderr
= run_env
.stderr()
629 assert stderr
== "PASSED\n", stderr
631 def test_title(self
) -> None:
632 """Test must_contain_any_line(): title"""
633 run_env
= self
.run_env
637 test = TestCommon.TestCommon(workdir='')
649 test.must_contain_any_line(output, lines, title='STDOUT')
655 Missing any expected line from STDOUT:
656 'xxx%(expected_newline)s'
657 'yyy%(expected_newline)s'
658 STDOUT =========================================================================
663 run_env
.run(program
=sys
.executable
, stdin
=script
)
664 stdout
= run_env
.stdout()
665 stderr
= run_env
.stderr()
666 assert stdout
== expect
, assert_display(expect
, stdout
, stderr
)
667 assert stderr
.find("FAILED") != -1, stderr
671 class must_contain_exactly_lines_TestCase(TestCommonTestCase
):
672 def test_success_list(self
) -> None:
673 """Test must_contain_exactly_lines(): success (input list)"""
674 run_env
= self
.run_env
678 test = TestCommon.TestCommon(workdir='')
694 test.must_contain_exactly_lines(output, lines)
699 run_env
.run(program
=sys
.executable
, stdin
=script
)
700 stdout
= run_env
.stdout()
701 assert stdout
== "", stdout
702 stderr
= run_env
.stderr()
703 assert stderr
== "PASSED\n", stderr
705 def test_success_string(self
) -> None:
706 """Test must_contain_exactly_lines(): success (input string)"""
707 run_env
= self
.run_env
711 test = TestCommon.TestCommon(workdir='')
727 test.must_contain_exactly_lines(output, lines)
732 run_env
.run(program
=sys
.executable
, stdin
=script
)
733 stdout
= run_env
.stdout()
734 assert stdout
== "", stdout
735 stderr
= run_env
.stderr()
736 assert stderr
== "PASSED\n", stderr
738 def test_failure(self
) -> None:
739 """Test must_contain_exactly_lines(): failure"""
740 run_env
= self
.run_env
744 test = TestCommon.TestCommon(workdir='')
756 test.must_contain_exactly_lines(output, lines)
762 Missing expected lines from output:
765 Missing output =================================================================
766 Extra unexpected lines from output:
769 Extra output ===================================================================
772 run_env
.run(program
=sys
.executable
, stdin
=script
)
773 stdout
= run_env
.stdout()
774 stderr
= run_env
.stderr()
775 assert stdout
== expect
, assert_display(expect
, stdout
, stderr
)
776 assert stderr
.find("FAILED") != -1, stderr
778 def test_find(self
) -> None:
779 """Test must_contain_exactly_lines(): find"""
780 run_env
= self
.run_env
785 test = TestCommon.TestCommon(workdir='')
801 def re_search(output, line):
802 pattern = re.compile(line, re.S)
805 if pattern.search(o):
809 test.must_contain_exactly_lines(output, lines, find=re_search)
814 run_env
.run(program
=sys
.executable
, stdin
=script
)
815 stdout
= run_env
.stdout()
816 assert stdout
== "", stdout
817 stderr
= run_env
.stderr()
818 # Somehow, this fails on Py 3.12+ with:
819 # AssertionError: <stdin>:13: SyntaxWarning: invalid escape sequence '\ '
820 # assert stderr == "PASSED\n", stderr
821 # So, just look for a substring:
822 self
.assertIn("PASSED", stderr
)
824 def test_title(self
) -> None:
825 """Test must_contain_exactly_lines(): title"""
826 run_env
= self
.run_env
830 test = TestCommon.TestCommon(workdir='')
842 test.must_contain_exactly_lines(output, lines, title='STDOUT')
848 Missing expected lines from STDOUT:
851 Missing STDOUT =================================================================
852 Extra unexpected lines from STDOUT:
855 Extra STDOUT ===================================================================
858 run_env
.run(program
=sys
.executable
, stdin
=script
)
859 stdout
= run_env
.stdout()
860 stderr
= run_env
.stderr()
861 assert stdout
== expect
, assert_display(expect
, stdout
, stderr
)
862 assert stderr
.find("FAILED") != -1, stderr
866 class must_contain_lines_TestCase(TestCommonTestCase
):
867 def test_success(self
) -> None:
868 """Test must_contain_lines(): success"""
869 run_env
= self
.run_env
873 test = TestCommon.TestCommon(workdir='')
887 test.must_contain_lines(lines, output)
892 run_env
.run(program
=sys
.executable
, stdin
=script
)
893 stdout
= run_env
.stdout()
894 assert stdout
== "", stdout
895 stderr
= run_env
.stderr()
896 assert stderr
== "PASSED\n", stderr
898 def test_failure(self
) -> None:
899 """Test must_contain_lines(): failure"""
900 run_env
= self
.run_env
904 test = TestCommon.TestCommon(workdir='')
916 test.must_contain_lines(lines, output)
922 Missing expected lines from output:
923 'xxx%(expected_newline)s'
924 'yyy%(expected_newline)s'
925 output =========================================================================
930 run_env
.run(program
=sys
.executable
, stdin
=script
)
931 stdout
= run_env
.stdout()
932 stderr
= run_env
.stderr()
933 assert stdout
== expect
, assert_display(expect
, stdout
, stderr
)
934 assert stderr
.find("FAILED") != -1, stderr
938 class must_exist_TestCase(TestCommonTestCase
):
939 def test_success(self
) -> None:
940 """Test must_exist(): success"""
941 run_env
= self
.run_env
944 from TestCommon import TestCommon
945 tc = TestCommon(workdir='')
946 tc.write('file1', "file1\\n")
947 tc.must_exist('file1')
950 run_env
.run(program
=sys
.executable
, stdin
=script
)
951 stdout
= run_env
.stdout()
952 assert stdout
== "", stdout
953 stderr
= run_env
.stderr()
954 assert stderr
== "PASSED\n", stderr
956 def test_failure(self
) -> None:
957 """Test must_exist(): failure"""
958 run_env
= self
.run_env
961 from TestCommon import TestCommon
962 tc = TestCommon(workdir='')
963 tc.must_exist('file1')
966 run_env
.run(program
=sys
.executable
, stdin
=script
)
967 stdout
= run_env
.stdout()
968 assert stdout
== "Missing files: `file1'\n", stdout
969 stderr
= run_env
.stderr()
970 assert stderr
.find("FAILED") != -1, stderr
972 def test_failure_message(self
) -> None:
973 """Test must_exist(): failure with extra message"""
974 run_env
= self
.run_env
977 from TestCommon import TestCommon
978 tc = TestCommon(workdir='')
979 tc.must_exist('file1', message="Extra Info")
982 run_env
.run(program
=sys
.executable
, stdin
=script
)
983 stdout
= run_env
.stdout()
984 assert stdout
== "Missing files: `file1'\n", stdout
985 stderr
= run_env
.stderr()
986 assert stderr
.find("Extra Info") != -1, stderr
988 def test_file_specified_as_list(self
) -> None:
989 """Test must_exist(): file specified as list"""
990 run_env
= self
.run_env
993 from TestCommon import TestCommon
994 tc = TestCommon(workdir='')
996 tc.write(['sub', 'file1'], "sub/file1\\n")
997 tc.must_exist(['sub', 'file1'])
1000 run_env
.run(program
=sys
.executable
, stdin
=script
)
1001 stdout
= run_env
.stdout()
1002 assert stdout
== "", stdout
1003 stderr
= run_env
.stderr()
1004 assert stderr
== "PASSED\n", stderr
1006 @unittest.skipIf(sys
.platform
== 'win32', "Skip symlink test on win32")
1007 def test_broken_link(self
) -> None :
1008 """Test must_exist(): exists but it is a broken link"""
1009 run_env
= self
.run_env
1011 script
= lstrip("""\
1012 from TestCommon import TestCommon
1013 tc = TestCommon(workdir='')
1014 tc.symlink('badtarget', "brokenlink")
1015 tc.must_exist('brokenlink')
1018 run_env
.run(program
=sys
.executable
, stdin
=script
)
1019 stdout
= run_env
.stdout()
1020 assert stdout
== "", stdout
1021 stderr
= run_env
.stderr()
1022 assert stderr
== "PASSED\n", stderr
1024 class must_exist_one_of_TestCase(TestCommonTestCase
):
1025 def test_success(self
) -> None:
1026 """Test must_exist_one_of(): success"""
1027 run_env
= self
.run_env
1029 script
= lstrip("""\
1030 from TestCommon import TestCommon
1031 tc = TestCommon(workdir='')
1032 tc.write('file1', "file1\\n")
1033 tc.must_exist_one_of(['file1'])
1036 run_env
.run(program
=sys
.executable
, stdin
=script
)
1037 stdout
= run_env
.stdout()
1038 assert stdout
== "", stdout
1039 stderr
= run_env
.stderr()
1040 assert stderr
== "PASSED\n", stderr
1042 def test_failure(self
) -> None:
1043 """Test must_exist_one_of(): failure"""
1044 run_env
= self
.run_env
1046 script
= lstrip("""\
1047 from TestCommon import TestCommon
1048 tc = TestCommon(workdir='')
1049 tc.must_exist_one_of(['file1'])
1052 run_env
.run(program
=sys
.executable
, stdin
=script
)
1053 stdout
= run_env
.stdout()
1054 assert stdout
== "Missing one of: `file1'\n", stdout
1055 stderr
= run_env
.stderr()
1056 assert stderr
.find("FAILED") != -1, stderr
1058 def test_failure_message(self
) -> None:
1059 """Test must_exist_one_of(): failure with extra message"""
1060 run_env
= self
.run_env
1062 script
= lstrip("""\
1063 from TestCommon import TestCommon
1064 tc = TestCommon(workdir='')
1065 tc.must_exist_one_of(['file1'], message="Extra Info")
1068 run_env
.run(program
=sys
.executable
, stdin
=script
)
1069 stdout
= run_env
.stdout()
1070 assert stdout
== "Missing one of: `file1'\n", stdout
1071 stderr
= run_env
.stderr()
1072 assert stderr
.find("Extra Info") != -1, stderr
1074 def test_files_specified_as_list(self
) -> None:
1075 """Test must_exist_one_of(): files specified as list"""
1076 run_env
= self
.run_env
1078 script
= lstrip("""\
1079 from TestCommon import TestCommon
1080 tc = TestCommon(workdir='')
1081 tc.write('file1', "file1\\n")
1082 tc.must_exist_one_of(['file2', 'file1'])
1085 run_env
.run(program
=sys
.executable
, stdin
=script
)
1086 stdout
= run_env
.stdout()
1087 assert stdout
== "", stdout
1088 stderr
= run_env
.stderr()
1089 assert stderr
== "PASSED\n", stderr
1091 def test_files_specified_with_wildcards(self
) -> None:
1092 """Test must_exist_one_of(): files specified with wildcards"""
1093 run_env
= self
.run_env
1095 script
= lstrip("""\
1096 from TestCommon import TestCommon
1097 tc = TestCommon(workdir='')
1098 tc.write('file7', "file7\\n")
1099 tc.must_exist_one_of(['file?'])
1102 run_env
.run(program
=sys
.executable
, stdin
=script
)
1103 stdout
= run_env
.stdout()
1104 assert stdout
== "", stdout
1105 stderr
= run_env
.stderr()
1106 assert stderr
== "PASSED\n", stderr
1108 def test_file_given_as_list(self
) -> None:
1109 """Test must_exist_one_of(): file given as list"""
1110 run_env
= self
.run_env
1112 script
= lstrip("""\
1113 from TestCommon import TestCommon
1114 tc = TestCommon(workdir='')
1116 tc.write(['sub', 'file1'], "sub/file1\\n")
1117 tc.must_exist_one_of(['file2', ['sub', 'file1']])
1120 run_env
.run(program
=sys
.executable
, stdin
=script
)
1121 stdout
= run_env
.stdout()
1122 assert stdout
== "", stdout
1123 stderr
= run_env
.stderr()
1124 assert stderr
== "PASSED\n", stderr
1126 def test_file_given_as_sequence(self
) -> None:
1127 """Test must_exist_one_of(): file given as sequence"""
1128 run_env
= self
.run_env
1130 script
= lstrip("""\
1131 from TestCommon import TestCommon
1132 tc = TestCommon(workdir='')
1134 tc.write(['sub', 'file1'], "sub/file1\\n")
1135 tc.must_exist_one_of(['file2', ('sub', 'file1')])
1138 run_env
.run(program
=sys
.executable
, stdin
=script
)
1139 stdout
= run_env
.stdout()
1140 assert stdout
== "", stdout
1141 stderr
= run_env
.stderr()
1142 assert stderr
== "PASSED\n", stderr
1144 class must_match_TestCase(TestCommonTestCase
):
1145 def test_success(self
) -> None:
1146 """Test must_match(): success"""
1147 run_env
= self
.run_env
1149 script
= lstrip("""\
1150 from TestCommon import TestCommon
1151 tc = TestCommon(workdir='')
1152 tc.write('file1', "file1\\n")
1153 tc.must_match('file1', "file1\\n")
1156 run_env
.run(program
=sys
.executable
, stdin
=script
)
1157 stdout
= run_env
.stdout()
1158 assert stdout
== "", stdout
1159 stderr
= run_env
.stderr()
1160 assert stderr
== "PASSED\n", stderr
1162 def test_file_does_not_exists(self
) -> None:
1163 """Test must_match(): file does not exist"""
1164 run_env
= self
.run_env
1166 script
= lstrip("""\
1167 from TestCommon import TestCommon
1168 tc = TestCommon(workdir='')
1169 tc.must_match('file1', "file1\\n")
1172 run_env
.run(program
=sys
.executable
, stdin
=script
)
1173 stdout
= run_env
.stdout()
1174 assert stdout
== "", stdout
1175 stderr
= run_env
.stderr()
1176 assert stderr
.find("No such file or directory:") != -1, stderr
1178 def test_failure(self
) -> None:
1179 """Test must_match(): failure"""
1180 run_env
= self
.run_env
1182 script
= lstrip("""\
1183 from TestCommon import TestCommon
1184 tc = TestCommon(workdir='')
1185 tc.write('file1', "file1 does not match\\n")
1186 tc.must_match('file1', "file1\\n")
1190 expect
= lstrip("""\
1191 match_re: mismatch at line 0:
1193 line='file1 does not match'
1194 Unexpected contents of `file1'
1195 contents =======================================================================
1199 > file1 does not match
1201 run_env
.run(program
=sys
.executable
, stdin
=script
)
1202 stdout
= run_env
.stdout()
1203 assert stdout
== expect
, stdout
1204 stderr
= run_env
.stderr()
1205 assert stderr
.find("FAILED") != -1, stderr
1207 def test_mode(self
) -> None:
1208 """Test must_match(): mode"""
1209 run_env
= self
.run_env
1211 script
= lstrip("""\
1212 from TestCommon import TestCommon
1213 tc = TestCommon(workdir='')
1214 tc.write('file1', "file1\\n", mode='w')
1215 tc.must_match('file1', "file1\\n", mode='r')
1216 tc.write('file2', "file2\\n", mode='wb')
1217 tc.must_match('file2', "file2\\n", mode='rb')
1220 run_env
.run(program
=sys
.executable
, stdin
=script
)
1221 stdout
= run_env
.stdout()
1222 assert stdout
== "", stdout
1223 stderr
= run_env
.stderr()
1224 assert stderr
== "PASSED\n", stderr
1228 class must_not_be_writable_TestCase(TestCommonTestCase
):
1229 def test_file_does_not_exists(self
) -> None:
1230 """Test must_not_be_writable(): file does not exist"""
1231 run_env
= self
.run_env
1233 script
= lstrip("""\
1234 from TestCommon import TestCommon
1235 tc = TestCommon(workdir='')
1236 tc.must_not_be_writable('file1')
1239 run_env
.run(program
=sys
.executable
, stdin
=script
)
1240 stdout
= run_env
.stdout()
1241 assert stdout
== "Missing files: `file1'\n", stdout
1242 stderr
= run_env
.stderr()
1243 assert stderr
.find("FAILED") != -1, stderr
1245 def test_writable_file_exists(self
) -> None:
1246 """Test must_not_be_writable(): writable file exists"""
1247 run_env
= self
.run_env
1249 script
= lstrip("""\
1252 from TestCommon import TestCommon
1253 tc = TestCommon(workdir='')
1254 tc.write('file1', "file1\\n")
1255 f1 = tc.workpath('file1')
1256 mode = os.stat(f1).st_mode
1257 os.chmod(f1, mode | stat.S_IWUSR)
1258 tc.must_not_be_writable('file1')
1261 run_env
.run(program
=sys
.executable
, stdin
=script
)
1262 stdout
= run_env
.stdout()
1263 assert stdout
== "Writable files: `file1'\n", stdout
1264 stderr
= run_env
.stderr()
1265 assert stderr
.find("FAILED") != -1, stderr
1267 def test_non_writable_file_exists(self
) -> None:
1268 """Test must_not_be_writable(): non-writable file exists"""
1269 run_env
= self
.run_env
1271 script
= lstrip("""\
1274 from TestCommon import TestCommon
1275 tc = TestCommon(workdir='')
1276 tc.write('file1', "file1\\n")
1277 f1 = tc.workpath('file1')
1278 mode = os.stat(f1).st_mode
1279 os.chmod(f1, mode & ~stat.S_IWUSR)
1280 tc.must_not_be_writable('file1')
1283 run_env
.run(program
=sys
.executable
, stdin
=script
)
1284 stdout
= run_env
.stdout()
1285 assert stdout
== "", stdout
1286 stderr
= run_env
.stderr()
1287 assert stderr
== "PASSED\n", stderr
1289 def test_file_specified_as_list(self
) -> None:
1290 """Test must_not_be_writable(): file specified as list"""
1291 run_env
= self
.run_env
1293 script
= lstrip("""\
1296 from TestCommon import TestCommon
1297 tc = TestCommon(workdir='')
1299 tc.write(['sub', 'file1'], "sub/file1\\n")
1300 f1 = tc.workpath('sub', 'file1')
1301 mode = os.stat(f1).st_mode
1302 os.chmod(f1, mode & ~stat.S_IWUSR)
1303 tc.must_not_be_writable(['sub', 'file1'])
1306 run_env
.run(program
=sys
.executable
, stdin
=script
)
1307 stdout
= run_env
.stdout()
1308 assert stdout
== "", stdout
1309 stderr
= run_env
.stderr()
1310 assert stderr
== "PASSED\n", stderr
1314 class must_not_contain_TestCase(TestCommonTestCase
):
1315 def test_success(self
) -> None:
1316 """Test must_not_contain(): success"""
1317 run_env
= self
.run_env
1319 script
= lstrip("""\
1320 from TestCommon import TestCommon
1321 tc = TestCommon(workdir='')
1322 tc.write('file1', "file1 contents\\n")
1323 tc.must_not_contain('file1', b"1 does not contain c")
1326 run_env
.run(program
=sys
.executable
, stdin
=script
)
1327 stdout
= run_env
.stdout()
1328 assert stdout
== "", stdout
1329 stderr
= run_env
.stderr()
1330 assert stderr
== "PASSED\n", stderr
1332 def test_file_does_not_exist(self
) -> None:
1333 """Test must_not_contain(): file does not exist"""
1334 run_env
= self
.run_env
1336 script
= lstrip("""\
1337 from TestCommon import TestCommon
1338 tc = TestCommon(workdir='')
1339 tc.must_not_contain('file1', "1 c\\n")
1342 run_env
.run(program
=sys
.executable
, stdin
=script
)
1343 stdout
= run_env
.stdout()
1344 assert stdout
== "", stdout
1345 stderr
= run_env
.stderr()
1346 assert stderr
.find("No such file or directory:") != -1, stderr
1348 def test_failure(self
) -> None:
1349 """Test must_not_contain(): failure"""
1350 run_env
= self
.run_env
1352 script
= lstrip("""\
1353 from TestCommon import TestCommon
1354 tc = TestCommon(workdir='')
1355 tc.write('file1', "file1 does contain contents\\n")
1356 tc.must_not_contain('file1', b"1 does contain c")
1359 expect
= lstrip("""\
1360 File `file1' contains banned string.
1361 Banned string ==================================================================
1363 file1 contents =================================================================
1364 b'file1 does contain contents\\n'
1366 run_env
.run(program
=sys
.executable
, stdin
=script
)
1367 stdout
= run_env
.stdout()
1368 assert stdout
== expect
, f
"\ngot:\n{stdout}\nexpected:\n{expect}"
1370 stderr
= run_env
.stderr()
1371 assert stderr
.find("FAILED") != -1, stderr
1373 def test_failure_index_0(self
) -> None:
1374 """Test must_not_contain(): failure at index 0"""
1375 run_env
= self
.run_env
1377 script
= lstrip("""\
1378 from TestCommon import TestCommon
1379 tc = TestCommon(workdir='')
1380 tc.write('file1', "file1 does contain contents\\n")
1381 tc.must_not_contain('file1', b"file1 does")
1384 expect
= lstrip("""\
1385 File `file1' contains banned string.
1386 Banned string ==================================================================
1388 file1 contents =================================================================
1389 b'file1 does contain contents\\n'
1391 run_env
.run(program
=sys
.executable
, stdin
=script
)
1392 stdout
= run_env
.stdout()
1393 assert stdout
== expect
, f
"\ngot:\n{stdout}\nexpected:\n{expect}"
1395 stderr
= run_env
.stderr()
1396 assert stderr
.find("FAILED") != -1, stderr
1398 def test_mode(self
) -> None:
1399 """Test must_not_contain(): mode"""
1400 run_env
= self
.run_env
1402 script
= lstrip("""\
1403 from TestCommon import TestCommon
1404 tc = TestCommon(workdir='')
1405 tc.write('file1', "file1 contents\\n", mode='w')
1406 tc.must_not_contain('file1', "1 does not contain c", mode='r')
1407 tc.write('file2', "file2 contents\\n", mode='wb')
1408 tc.must_not_contain('file2', b"2 does not contain c", mode='rb')
1411 run_env
.run(program
=sys
.executable
, stdin
=script
)
1412 stdout
= run_env
.stdout()
1413 assert stdout
== "", stdout
1414 stderr
= run_env
.stderr()
1415 assert stderr
== "PASSED\n", stderr
1419 class must_not_contain_any_line_TestCase(TestCommonTestCase
):
1420 def test_failure(self
) -> None:
1421 """Test must_not_contain_any_line(): failure"""
1422 run_env
= self
.run_env
1426 test = TestCommon.TestCommon(workdir='')
1441 test.must_not_contain_any_line(output, lines)
1446 expect
= lstrip("""\
1447 Unexpected lines in output:
1448 'xxx%(expected_newline)s'
1449 'yyy%(expected_newline)s'
1450 'www%(expected_newline)s'
1451 output =========================================================================
1458 run_env
.run(program
=sys
.executable
, stdin
=script
)
1459 stdout
= run_env
.stdout()
1460 stderr
= run_env
.stderr()
1461 assert stdout
== expect
, assert_display(expect
, stdout
, stderr
)
1462 assert stderr
.find("FAILED") != -1, stderr
1464 def test_find(self
) -> None:
1465 """Test must_not_contain_any_line(): find"""
1466 run_env
= self
.run_env
1471 test = TestCommon.TestCommon(workdir='')
1483 def re_search(output, line):
1484 return re.compile(line, re.S).search(output)
1485 test.must_not_contain_any_line(output, lines, find=re_search)
1490 run_env
.run(program
=sys
.executable
, stdin
=script
)
1491 stdout
= run_env
.stdout()
1492 assert stdout
== "", stdout
1493 stderr
= run_env
.stderr()
1494 assert stderr
== "PASSED\n", stderr
1496 def test_success(self
) -> None:
1497 """Test must_not_contain_any_line(): success"""
1498 run_env
= self
.run_env
1502 test = TestCommon.TestCommon(workdir='')
1514 test.must_not_contain_any_line(output, lines)
1519 run_env
.run(program
=sys
.executable
, stdin
=script
)
1520 stdout
= run_env
.stdout()
1521 assert stdout
== "", stdout
1522 stderr
= run_env
.stderr()
1523 assert stderr
== "PASSED\n", stderr
1525 def test_title(self
) -> None:
1526 """Test must_not_contain_any_line(): title"""
1527 run_env
= self
.run_env
1531 test = TestCommon.TestCommon(workdir='')
1545 test.must_not_contain_any_line(output, lines, title='XYZZY')
1550 expect
= lstrip("""\
1551 Unexpected lines in XYZZY:
1552 'xxx%(expected_newline)s'
1553 'yyy%(expected_newline)s'
1554 XYZZY ==========================================================================
1561 run_env
.run(program
=sys
.executable
, stdin
=script
)
1562 stdout
= run_env
.stdout()
1563 stderr
= run_env
.stderr()
1564 assert stdout
== expect
, assert_display(expect
, stdout
, stderr
)
1565 assert stderr
.find("FAILED") != -1, stderr
1569 class must_not_contain_lines_TestCase(TestCommonTestCase
):
1570 def test_failure(self
) -> None:
1571 """Test must_not_contain_lines(): failure"""
1572 run_env
= self
.run_env
1576 test = TestCommon.TestCommon(workdir='')
1590 test.must_not_contain_lines(lines, output)
1595 expect
= lstrip("""\
1596 Unexpected lines in output:
1597 'xxx%(expected_newline)s'
1598 'yyy%(expected_newline)s'
1599 output =========================================================================
1606 run_env
.run(program
=sys
.executable
, stdin
=script
)
1607 stdout
= run_env
.stdout()
1608 stderr
= run_env
.stderr()
1609 assert stdout
== expect
, assert_display(expect
, stdout
, stderr
)
1610 assert stderr
.find("FAILED") != -1, stderr
1612 def test_success(self
) -> None:
1613 """Test must_not_contain_lines(): success"""
1614 run_env
= self
.run_env
1618 test = TestCommon.TestCommon(workdir='')
1630 test.must_not_contain_lines(lines, output)
1635 run_env
.run(program
=sys
.executable
, stdin
=script
)
1636 stdout
= run_env
.stdout()
1637 assert stdout
== "", stdout
1638 stderr
= run_env
.stderr()
1639 assert stderr
== "PASSED\n", stderr
1643 class must_not_exist_TestCase(TestCommonTestCase
):
1644 def test_failure(self
) -> None:
1645 """Test must_not_exist(): failure"""
1646 run_env
= self
.run_env
1648 script
= lstrip("""\
1649 from TestCommon import TestCommon
1650 tc = TestCommon(workdir='')
1651 tc.write('file1', "file1\\n")
1652 tc.must_not_exist('file1')
1655 run_env
.run(program
=sys
.executable
, stdin
=script
)
1656 stdout
= run_env
.stdout()
1657 assert stdout
== "Unexpected files exist: `file1'\n", stdout
1658 stderr
= run_env
.stderr()
1659 assert stderr
.find("FAILED") != -1, stderr
1661 def test_success(self
) -> None:
1662 """Test must_not_exist(): success"""
1663 run_env
= self
.run_env
1665 script
= lstrip("""\
1666 from TestCommon import TestCommon
1667 tc = TestCommon(workdir='')
1668 tc.must_not_exist('file1')
1671 run_env
.run(program
=sys
.executable
, stdin
=script
)
1672 stdout
= run_env
.stdout()
1673 assert stdout
== "", stdout
1674 stderr
= run_env
.stderr()
1675 assert stderr
== "PASSED\n", stderr
1677 def test_file_specified_as_list(self
) -> None:
1678 """Test must_not_exist(): file specified as list"""
1679 run_env
= self
.run_env
1681 script
= lstrip("""\
1682 from TestCommon import TestCommon
1683 tc = TestCommon(workdir='')
1685 tc.must_not_exist(['sub', 'file1'])
1688 run_env
.run(program
=sys
.executable
, stdin
=script
)
1689 stdout
= run_env
.stdout()
1690 assert stdout
== "", stdout
1691 stderr
= run_env
.stderr()
1692 assert stderr
== "PASSED\n", stderr
1694 @unittest.skipIf(sys
.platform
== 'win32', "Skip symlink test on win32")
1695 def test_existing_broken_link(self
) -> None:
1696 """Test must_not_exist(): exists but it is a broken link"""
1697 run_env
= self
.run_env
1699 script
= lstrip("""\
1700 from TestCommon import TestCommon
1701 tc = TestCommon(workdir='')
1702 tc.symlink('badtarget', 'brokenlink')
1703 tc.must_not_exist('brokenlink')
1706 run_env
.run(program
=sys
.executable
, stdin
=script
)
1707 stdout
= run_env
.stdout()
1708 assert stdout
== "Unexpected files exist: `brokenlink'\n", stdout
1709 stderr
= run_env
.stderr()
1710 assert stderr
.find("FAILED") != -1, stderr
1712 class must_not_exist_any_of_TestCase(TestCommonTestCase
):
1713 def test_success(self
) -> None:
1714 """Test must_not_exist_any_of(): success"""
1715 run_env
= self
.run_env
1717 script
= lstrip("""\
1718 from TestCommon import TestCommon
1719 tc = TestCommon(workdir='')
1720 tc.must_not_exist_any_of(['file1'])
1723 run_env
.run(program
=sys
.executable
, stdin
=script
)
1724 stdout
= run_env
.stdout()
1725 assert stdout
== "", stdout
1726 stderr
= run_env
.stderr()
1727 assert stderr
== "PASSED\n", stderr
1729 def test_failure(self
) -> None:
1730 """Test must_not_exist_any_of(): failure"""
1731 run_env
= self
.run_env
1733 script
= lstrip("""\
1734 from TestCommon import TestCommon
1735 tc = TestCommon(workdir='')
1736 tc.write('file1', "file1\\n")
1737 tc.must_not_exist_any_of(['file1'])
1740 run_env
.run(program
=sys
.executable
, stdin
=script
)
1741 stdout
= run_env
.stdout()
1742 assert stdout
== "Unexpected files exist: `file1'\n", stdout
1743 stderr
= run_env
.stderr()
1744 assert stderr
.find("FAILED") != -1, stderr
1746 def test_files_specified_as_list(self
) -> None:
1747 """Test must_not_exist_any_of(): files specified as list"""
1748 run_env
= self
.run_env
1750 script
= lstrip("""\
1751 from TestCommon import TestCommon
1752 tc = TestCommon(workdir='')
1753 tc.must_not_exist_any_of(['file2', 'file1'])
1756 run_env
.run(program
=sys
.executable
, stdin
=script
)
1757 stdout
= run_env
.stdout()
1758 assert stdout
== "", stdout
1759 stderr
= run_env
.stderr()
1760 assert stderr
== "PASSED\n", stderr
1762 def test_files_specified_with_wildcards(self
) -> None:
1763 """Test must_not_exist_any_of(): files specified with wildcards"""
1764 run_env
= self
.run_env
1766 script
= lstrip("""\
1767 from TestCommon import TestCommon
1768 tc = TestCommon(workdir='')
1769 tc.write('file7', "file7\\n")
1770 tc.must_not_exist_any_of(['files?'])
1773 run_env
.run(program
=sys
.executable
, stdin
=script
)
1774 stdout
= run_env
.stdout()
1775 assert stdout
== "", stdout
1776 stderr
= run_env
.stderr()
1777 assert stderr
== "PASSED\n", stderr
1779 def test_file_given_as_list(self
) -> None:
1780 """Test must_not_exist_any_of(): file given as list"""
1781 run_env
= self
.run_env
1783 script
= lstrip("""\
1784 from TestCommon import TestCommon
1785 tc = TestCommon(workdir='')
1787 tc.write(['sub', 'file1'], "sub/file1\\n")
1788 tc.must_not_exist_any_of(['file2',
1792 run_env
.run(program
=sys
.executable
, stdin
=script
)
1793 stdout
= run_env
.stdout()
1794 assert stdout
== "", stdout
1795 stderr
= run_env
.stderr()
1796 assert stderr
== "PASSED\n", stderr
1798 def test_file_given_as_sequence(self
) -> None:
1799 """Test must_not_exist_any_of(): file given as sequence"""
1800 run_env
= self
.run_env
1802 script
= lstrip("""\
1803 from TestCommon import TestCommon
1804 tc = TestCommon(workdir='')
1806 tc.write(['sub', 'file1'], "sub/file1\\n")
1807 tc.must_not_exist_any_of(['file2',
1811 run_env
.run(program
=sys
.executable
, stdin
=script
)
1812 stdout
= run_env
.stdout()
1813 assert stdout
== "", stdout
1814 stderr
= run_env
.stderr()
1815 assert stderr
== "PASSED\n", stderr
1817 class must_not_be_empty_TestCase(TestCommonTestCase
):
1818 def test_failure(self
) -> None:
1819 """Test must_not_be_empty(): failure"""
1820 run_env
= self
.run_env
1822 script
= lstrip("""\
1823 from TestCommon import TestCommon
1824 tc = TestCommon(workdir='')
1825 tc.write('file1', "")
1826 tc.must_not_be_empty('file1')
1829 run_env
.run(program
=sys
.executable
, stdin
=script
)
1830 stdout
= run_env
.stdout()
1831 assert stdout
== "File is empty: `file1'\n", stdout
1832 stderr
= run_env
.stderr()
1833 assert stderr
.find("FAILED") != -1, stderr
1835 def test_success(self
) -> None:
1836 """Test must_not_be_empty(): success"""
1837 run_env
= self
.run_env
1839 script
= lstrip("""\
1840 from TestCommon import TestCommon
1841 tc = TestCommon(workdir='')
1842 tc.write('file1', "file1\\n")
1843 tc.must_not_be_empty('file1')
1846 run_env
.run(program
=sys
.executable
, stdin
=script
)
1847 stdout
= run_env
.stdout()
1848 assert stdout
== "", stdout
1849 stderr
= run_env
.stderr()
1850 assert stderr
== "PASSED\n", stderr
1852 def test_file_doesnt_exist(self
) -> None:
1853 """Test must_not_be_empty(): failure"""
1854 run_env
= self
.run_env
1856 script
= lstrip("""\
1857 from TestCommon import TestCommon
1858 tc = TestCommon(workdir='')
1859 tc.must_not_be_empty('file1')
1862 run_env
.run(program
=sys
.executable
, stdin
=script
)
1863 stdout
= run_env
.stdout()
1864 assert stdout
== "File doesn't exist: `file1'\n", stdout
1865 stderr
= run_env
.stderr()
1866 assert stderr
.find("FAILED") != -1, stderr
1868 class run_TestCase(TestCommonTestCase
):
1869 def test_argument_handling(self
) -> None:
1870 """Test run(): argument handling"""
1872 script
= lstrip("""\
1873 from TestCommon import TestCommon, match_exact
1874 tc = TestCommon(program=r'%(pass_script)s',
1875 interpreter=r'%(python)s',
1878 tc.run(arguments = "arg1 arg2 arg3",
1879 stdout = r"%(pass_script)s: STDOUT: ['arg1', 'arg2', 'arg3']" + "\\n")
1882 self
.run_execution_test(script
, "", "")
1884 def test_default_pass(self
) -> None:
1885 """Test run(): default arguments, script passes"""
1887 script
= lstrip("""\
1888 from TestCommon import TestCommon
1889 tc = TestCommon(program=r'%(pass_script)s',
1890 interpreter=r'%(python)s',
1895 self
.run_execution_test(script
, "", "")
1897 def test_default_fail(self
) -> None:
1898 """Test run(): default arguments, script fails"""
1900 script
= lstrip("""\
1901 from TestCommon import TestCommon
1902 tc = TestCommon(program=r'%(fail_script)s',
1903 interpreter=r'%(python)s',
1908 expect_stdout
= lstrip("""\
1909 %(fail_script)s returned 1
1910 STDOUT =========================================================================
1911 %(fail_script)s: STDOUT: []
1913 STDERR =========================================================================
1917 expect_stderr
= lstrip("""\
1918 FAILED test of .*fail
1919 \\tat line \\d+ of .*TestCommon\\.py \\(_complete\\)
1920 \\tfrom line \\d+ of .*TestCommon\\.py \\(run\\)
1921 \\tfrom line \\d+ of <stdin>( \\(<module>\\))?
1923 expect_stderr
= re
.compile(expect_stderr
, re
.M
)
1925 self
.run_execution_test(script
, expect_stdout
, expect_stderr
)
1927 def test_default_stderr(self
) -> None:
1928 """Test run(): default arguments, error output"""
1929 script
= lstrip("""\
1930 from TestCommon import TestCommon
1931 tc = TestCommon(program=r'%(stderr_script)s',
1932 interpreter=r'%(python)s',
1937 expect_stdout
= lstrip("""\
1938 match_re: expected 1 lines, found 2
1939 STDOUT =========================================================================
1941 STDERR =========================================================================
1943 > %(stderr_script)s: STDERR: []
1946 expect_stderr
= lstrip("""\
1947 FAILED test of .*stderr
1948 \\tat line \\d+ of .*TestCommon\\.py \\(_complete\\)
1949 \\tfrom line \\d+ of .*TestCommon\\.py \\(run\\)
1950 \\tfrom line \\d+ of <stdin>
1952 expect_stderr
= re
.compile(expect_stderr
, re
.M
)
1954 self
.run_execution_test(script
, expect_stdout
, expect_stderr
)
1956 def test_exception_handling(self
) -> None:
1957 """Test run(): exception handling"""
1958 script
= lstrip("""\
1960 from TestCommon import TestCommon
1961 def raise_exception(*args, **kw):
1962 raise TypeError("forced TypeError")
1963 TestCmd.TestCmd.start = raise_exception
1964 tc = TestCommon(program=r'%(pass_script)s',
1965 interpreter=r'%(python)s',
1970 expect_stdout
= lstrip("""\
1971 STDOUT =========================================================================
1973 STDERR =========================================================================
1977 expect_stderr
= lstrip(
1978 fr
"""Exception trying to execute: \[{re.escape(repr(sys.executable))}, '[^']*pass'\]
1979 Traceback \(most recent call last\):
1980 File "<stdin>", line \d+, in (\?|<module>)
1981 File "[^"]+TestCommon\.py", line \d+, in run
1982 super\(\)\.run\(\*\*kw\)
1983 File "[^"]+TestCmd\.py", line \d+, in run
1984 p = self\.start\(program=program,
1985 (?:\s*\^*\s)? File \"[^
\"]+TestCommon\
.py
\", line \d
+, in start
1987 File
"[^"]+TestCommon\
.py
", line \d+, in start
1988 return super\(\)\.start\(program, interpreter, arguments,
1989 (?:\s*\^*\s)? File \"<stdin>\", line \d+, in raise_exception
1990 TypeError: forced TypeError
1993 # Python 3.13+ expanded error msgs again, not in a way we can easily
1994 # accomodate with the other regex.
1995 expect_enhanced_stderr = lstrip(
1996 fr"""Exception trying to execute: \[{re.escape(repr(sys.executable))}, '[^']*pass'\]
1997 Traceback \(most recent call last\):
1998 File "<stdin
>", line \d+, in (\?|<module>)
1999 File "[^
"]+TestCommon\.py", line \d
+, in run
2000 super\
(\
)\
.run\
(\
*\
*kw\
)
2001 (?
:\s
*[~\^
]*\s
*)?File
"[^"]+TestCmd\
.py
", line \d+, in run
2002 p = self\.start\(program=program,
2003 interpreter=interpreter,
2004 \.\.\.<2 lines>\.\.\.
2007 (?:\s*[~\^]*\s*)?File \"[^\"]+TestCommon\.py\", line \d+, in start
2009 File "[^
"]+TestCommon\.py", line \d
+, in start
2010 return super\
(\
)\
.start\
(program
, interpreter
, arguments
,
2011 (?
:\s
*[~\^
]*\s
*)?universal_newlines
, \
*\
*kw\
)
2012 (?
:\s
*[~\^
]*\s
*)?File
\"<stdin
>\", line \d
+, in raise_exception
2013 TypeError: forced
TypeError
2015 if sys.version_info[:2] > (3, 12):
2016 expect_stderr = re.compile(expect_enhanced_stderr, re.M)
2018 expect_stderr = re.compile(expect_stderr, re.M)
2019 self.run_execution_test(script, expect_stdout, expect_stderr)
2021 def test_ignore_stderr(self) -> None:
2022 """Test
run(): ignore stderr
"""
2024 script = lstrip("""\
2025 from TestCommon
import TestCommon
2026 tc
= TestCommon(program
=r
'%(stderr_script)s',
2027 interpreter
=r
'%(python)s',
2029 tc
.run(stderr
= None)
2032 self.run_execution_test(script, "", "")
2034 def test_match_function_stdout(self) -> None:
2035 """Test
run(): explicit match function
, stdout
"""
2037 script = lstrip("""\
2038 def my_match_exact(actual
, expect
): return actual
== expect
2039 from TestCommon
import TestCommon
, match_re_dotall
2040 tc
= TestCommon(program
=r
'%(pass_script)s',
2041 interpreter
=r
'%(python)s',
2043 match
=match_re_dotall
)
2044 tc
.run(arguments
= "arg1 arg2 arg3",
2045 stdout
= r
"%(pass_script)s: STDOUT: ['arg1', 'arg2', 'arg3']" + "\\n",
2046 match
= my_match_exact
)
2049 self.run_execution_test(script, "", "")
2051 def test_match_function_stderr(self) -> None:
2052 """Test
run(): explicit match function
, stderr
"""
2054 script = lstrip("""\
2055 def my_match_exact(actual
, expect
): return actual
== expect
2056 from TestCommon
import TestCommon
, match_re_dotall
2057 tc
= TestCommon(program
=r
'%(stderr_script)s',
2058 interpreter
=r
'%(python)s',
2060 match
=match_re_dotall
)
2061 tc
.run(arguments
= "arg1 arg2 arg3",
2062 stderr
= r
"%(stderr_script)s: STDERR: ['arg1', 'arg2', 'arg3']" + "\\n",
2063 match
= my_match_exact
)
2066 self.run_execution_test(script, "", "")
2068 def test_matched_status_fails(self) -> None:
2069 """Test
run(): matched status
, script fails
"""
2071 script = lstrip("""\
2072 from TestCommon
import TestCommon
2073 tc
= TestCommon(program
=r
'%(fail_script)s',
2074 interpreter
=r
'%(python)s',
2079 self.run_execution_test(script, "", "")
2081 def test_matched_stdout(self) -> None:
2082 """Test
run(): matched stdout
"""
2084 script = lstrip("""\
2085 from TestCommon
import TestCommon
, match_exact
2086 tc
= TestCommon(program
=r
'%(pass_script)s',
2087 interpreter
=r
'%(python)s',
2090 tc
.run(stdout
= r
"%(pass_script)s: STDOUT: []" + "\\n")
2093 self.run_execution_test(script, "", "")
2095 def test_matched_stderr(self) -> None:
2096 """Test
run(): matched stderr
"""
2098 script = lstrip("""\
2099 from TestCommon
import TestCommon
, match_exact
2100 tc
= TestCommon(program
=r
'%(stderr_script)s',
2101 interpreter
=r
'%(python)s',
2104 tc
.run(stderr
= r
"%(stderr_script)s: STDERR: []" + "\\n")
2107 self.run_execution_test(script, "", "")
2109 def test_mismatched_status_pass(self) -> None:
2110 """Test
run(): mismatched status
, script passes
"""
2112 script = lstrip("""\
2113 from TestCommon
import TestCommon
2114 tc
= TestCommon(program
=r
'%(pass_script)s',
2115 interpreter
=r
'%(python)s',
2120 expect_stdout = lstrip("""\
2121 %(pass_script)s returned
0 (expected
1)
2122 STDOUT
=========================================================================
2123 %(pass_script)s: STDOUT
: []
2125 STDERR
=========================================================================
2129 expect_stderr = lstrip("""\
2130 FAILED test of
.*pass
2131 \\tat line
\\d
+ of
.*TestCommon
\\.py
\\(_complete
\\)
2132 \\tfrom line
\\d
+ of
.*TestCommon
\\.py
\\(run
\\)
2133 \\tfrom line
\\d
+ of
<stdin
>( \\(<module
>\\))?
2135 expect_stderr = re.compile(expect_stderr, re.M)
2137 self.run_execution_test(script, expect_stdout, expect_stderr)
2139 def test_mismatched_status_fail(self) -> None:
2140 """Test
run(): mismatched status
, script fails
"""
2142 script = lstrip("""\
2143 from TestCommon
import TestCommon
2144 tc
= TestCommon(program
=r
'%(fail_script)s',
2145 interpreter
=r
'%(python)s',
2150 expect_stdout = lstrip("""\
2151 %(fail_script)s returned
1 (expected
2)
2152 STDOUT
=========================================================================
2153 %(fail_script)s: STDOUT
: []
2155 STDERR
=========================================================================
2159 expect_stderr = lstrip("""\
2160 FAILED test of
.*fail
2161 \\tat line
\\d
+ of
.*TestCommon
\\.py
\\(_complete
\\)
2162 \\tfrom line
\\d
+ of
.*TestCommon
\\.py
\\(run
\\)
2163 \\tfrom line
\\d
+ of
<stdin
>( \\(<module
>\\))?
2165 expect_stderr = re.compile(expect_stderr, re.M)
2167 self.run_execution_test(script, expect_stdout, expect_stderr)
2169 def test_mismatched_stdout(self) -> None:
2170 """Test
run(): mismatched stdout
"""
2172 script = lstrip("""\
2173 from TestCommon
import TestCommon
2174 tc
= TestCommon(program
=r
'%(pass_script)s',
2175 interpreter
=r
'%(python)s',
2177 tc
.run(stdout
= "Not found\\n")
2180 expect_stdout = lstrip("""\
2181 match_re
: mismatch at line
0:
2182 search re
='^Not found$'
2183 line
='%(pass_script)s: STDOUT: []'
2184 STDOUT
=========================================================================
2188 > %(pass_script)s: STDOUT
: []
2191 expect_stderr = lstrip("""\
2192 FAILED test of
.*pass
2193 \\tat line
\\d
+ of
.*TestCommon
\\.py
\\(_complete
\\)
2194 \\tfrom line
\\d
+ of
.*TestCommon
\\.py
\\(run
\\)
2195 \\tfrom line
\\d
+ of
<stdin
>( \\(<module
>\\))?
2197 expect_stderr = re.compile(expect_stderr, re.M)
2199 self.run_execution_test(script, expect_stdout, expect_stderr)
2201 def test_mismatched_stderr(self) -> None:
2202 """Test
run(): mismatched stderr
"""
2204 script = lstrip("""\
2205 from TestCommon
import TestCommon
2206 tc
= TestCommon(program
=r
'%(stderr_script)s',
2207 interpreter
=r
'%(python)s',
2209 tc
.run(stderr
= "Not found\\n")
2212 expect_stdout = lstrip("""\
2213 match_re
: mismatch at line
0:
2214 search re
='^Not found$'
2215 line
='%(stderr_script)s: STDERR: []'
2216 STDOUT
=========================================================================
2218 STDERR
=========================================================================
2222 > %(stderr_script)s: STDERR
: []
2225 expect_stderr = lstrip("""\
2226 FAILED test of
.*stderr
2227 \\tat line
\\d
+ of
.*TestCommon
\\.py
\\(_complete
\\)
2228 \\tfrom line
\\d
+ of
.*TestCommon
\\.py
\\(run
\\)
2229 \\tfrom line
\\d
+ of
<stdin
>( \\(<module
>\\))?
2231 expect_stderr = re.compile(expect_stderr, re.M)
2233 self.run_execution_test(script, expect_stdout, expect_stderr)
2235 def test_option_handling(self) -> None:
2236 """Test
run(): option handling
"""
2238 script = lstrip("""\
2239 from TestCommon
import TestCommon
, match_exact
2240 tc
= TestCommon(program
=r
'%(pass_script)s',
2241 interpreter
=r
'%(python)s',
2244 tc
.run(options
= "opt1 opt2 opt3",
2245 stdout
= r
"%(pass_script)s: STDOUT: ['opt1', 'opt2', 'opt3']" + "\\n")
2248 self.run_execution_test(script, "", "")
2250 def test_options_plus_arguments(self) -> None:
2251 """Test
run(): option handling with arguments
"""
2253 script = lstrip("""\
2254 from TestCommon
import TestCommon
, match_exact
2255 tc
= TestCommon(program
=r
'%(pass_script)s',
2256 interpreter
=r
'%(python)s',
2259 tc
.run(options
= "opt1 opt2 opt3",
2260 arguments
= "arg1 arg2 arg3",
2261 stdout
= r
"%(pass_script)s: STDOUT: ['opt1', 'opt2', 'opt3', 'arg1', 'arg2', 'arg3']" + "\\n")
2264 self.run_execution_test(script, "", "")
2266 def test_signal_handling(self) -> None:
2267 """Test
run(): signal handling
.
2269 Only strange platforms unlikely to support SCons like the
2270 webassembly ones don
't support kill(), but keep the test
2275 except AttributeError:
2276 sys.stderr.write('can
not test
, no os
.kill
... ')
2279 script = lstrip("""\
2280 from TestCommon import TestCommon
2281 tc = TestCommon(program=r'%(signal_script)s',
2282 interpreter=r'%(python)s',
2287 self.SIGTERM = f"{'' if sys.platform == 'win32
' else '-'}{signal.SIGTERM}"
2289 # Script returns the signal value as a negative number.
2290 expect_stdout = lstrip("""\
2291 %(signal_script)s returned %(SIGTERM)s
2292 STDOUT =========================================================================
2294 STDERR =========================================================================
2298 expect_stderr = lstrip("""\
2299 FAILED test of .*signal
2300 \\tat line \\d+ of .*TestCommon\\.py \\(_complete\\)
2301 \\tfrom line \\d+ of .*TestCommon\\.py \\(run\\)
2302 \\tfrom line \\d+ of <stdin>
2304 expect_stderr = re.compile(expect_stderr, re.M)
2306 self.run_execution_test(script, expect_stdout, expect_stderr)
2308 def test_stdin(self) -> None:
2309 """Test run(): stdin handling"""
2311 script = lstrip("""\
2312 from TestCommon import TestCommon, match_exact
2313 tc = TestCommon(program=r'%(stdin_script)s',
2314 interpreter=r'%(python)s',
2317 expect_stdout = r"%(stdin_script)s: STDOUT: 'input'" + "\\n"
2318 expect_stderr = r"%(stdin_script)s: STDERR: 'input'" + "\\n"
2319 tc.run(stdin="input\\n", stdout = expect_stdout, stderr = expect_stderr)
2322 expect_stdout = lstrip("""\
2323 %(pass_script)s returned 0 (expected 1)
2324 STDOUT =========================================================================
2325 %(pass_script)s: STDOUT: []
2327 STDERR =========================================================================
2331 self.run_execution_test(script, "", "")
2335 class start_TestCase(TestCommonTestCase):
2336 def test_option_handling(self) -> None:
2337 """Test start(): option handling"""
2339 script = lstrip("""\
2340 from TestCommon import TestCommon, match_exact
2341 tc = TestCommon(program=r'%(pass_script)s',
2342 interpreter=r'%(python)s',
2345 p = tc.start(options = "opt1 opt2 opt3")
2346 expect = r"%(pass_script)s: STDOUT: ['opt1
', 'opt2
', 'opt3
']" + "\\n"
2347 tc.finish(p, stdout = expect)
2350 self.run_execution_test(script, "", "")
2352 def test_options_plus_arguments(self) -> None:
2353 """Test start(): option handling with arguments"""
2355 script = lstrip("""\
2356 from TestCommon import TestCommon, match_exact
2357 tc = TestCommon(program=r'%(pass_script)s',
2358 interpreter=r'%(python)s',
2361 p = tc.start(options = "opt1 opt2 opt3",
2362 arguments = "arg1 arg2 arg3")
2363 expect = r"%(pass_script)s: STDOUT: ['opt1
', 'opt2
', 'opt3
', 'arg1
', 'arg2
', 'arg3
']" + "\\n"
2364 tc.finish(p, stdout = expect)
2367 self.run_execution_test(script, "", "")
2371 class skip_test_TestCase(TestCommonTestCase):
2372 def test_skip_test(self) -> None:
2373 """Test skip_test()"""
2374 run_env = self.run_env
2376 script = lstrip("""\
2378 test = TestCommon.TestCommon(workdir='')
2381 run_env.run(program=sys.executable, stdin=script)
2382 stdout = run_env.stdout()
2383 assert stdout == "Skipping test.\n", stdout
2384 stderr = run_env.stderr()
2386 "NO RESULT for test at line 3 of <stdin>\n",
2387 "NO RESULT for test at line 3 of <stdin> (<module>)\n",
2389 assert stderr in expect, repr(stderr)
2391 script = lstrip("""\
2393 test = TestCommon.TestCommon(workdir='')
2394 test.skip_test("skipping test because I said so\\n")
2396 run_env.run(program=sys.executable, stdin=script)
2397 stdout = run_env.stdout()
2398 assert stdout == "skipping test because I said so\n", stdout
2399 stderr = run_env.stderr()
2401 "NO RESULT for test at line 3 of <stdin>\n",
2402 "NO RESULT for test at line 3 of <stdin> (<module>)\n",
2404 assert stderr in expect, repr(stderr)
2407 os.environ['TESTCOMMON_PASS_SKIPS
'] = '1'
2410 script = lstrip("""\
2412 test = TestCommon.TestCommon(workdir='')
2415 run_env.run(program=sys.executable, stdin=script)
2416 stdout = run_env.stdout()
2417 assert stdout == "Skipping test.\n", stdout
2418 stderr = run_env.stderr()
2419 assert stderr == "PASSED\n", stderr
2422 del os.environ['TESTCOMMON_PASS_SKIPS
']
2426 class variables_TestCase(TestCommonTestCase):
2427 def test_variables(self) -> None:
2428 """Test global variables"""
2429 run_env = self.run_env
2453 script = "import TestCommon\n" + \
2454 '\n'.join([f"print(TestCommon.{v})\n" for v in variables])
2455 run_env.run(program=sys.executable, stdin=script)
2456 stderr = run_env.stderr()
2457 assert stderr == "", stderr
2459 script = "from TestCommon import *\n" + \
2460 '\n'.join([f"print({v})" for v in variables])
2461 run_env.run(program=sys.executable, stdin=script)
2462 stderr = run_env.stderr()
2463 assert stderr == "", stderr
2467 if __name__ == "__main__":
2473 # indent-tabs-mode:nil
2475 # vim: set expandtab tabstop=4 shiftwidth=4: