Failed Conditions
Pull Request — master (#1182)
by Lasse
02:16 queued 36s
created

coalib.tests.misc.ContextManagersTest.test_preserve_sys_path()   A

Complexity

Conditions 2

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 2
dl 0
loc 6
rs 9.4286
1
import copy
0 ignored issues
show
Unused Code introduced by
The import copy seems to be unused.
Loading history...
2
import unittest
3
import sys
4
import subprocess
5
6
sys.path.insert(0, ".")
7
from coalib.misc.ContextManagers import (suppress_stdout,
8
                                         retrieve_stdout,
9
                                         simulate_console_inputs,
10
                                         subprocess_timeout)
11
from coalib.processes.Processing import create_process_group
12
13
14
process_group_timeout_test_code = """
15
import time, subprocess, sys;
16
p = subprocess.Popen([sys.executable,
17
                     "-c",
18
                     "import time; time.sleep(100)"]);
19
time.sleep(100);
20
"""
21
22
23
class ContextManagersTest(unittest.TestCase):
24
    def test_subprocess_timeout(self):
25
        p = subprocess.Popen([sys.executable,
26
                              "-c",
27
                              "import time; time.sleep(0.5);"],
28
                             stderr=subprocess.PIPE)
29
        with subprocess_timeout(p, 0.2) as timedout:
30
            retval = p.wait()
31
            p.stderr.close()
32
            self.assertEqual(timedout.value, True)
33
        self.assertNotEqual(retval, 0)
34
35
        p = create_process_group([sys.executable,
36
                                  "-c",
37
                                  process_group_timeout_test_code])
38
        with subprocess_timeout(p, 0.5, kill_pg=True):
39
            retval = p.wait()
40
            self.assertEqual(timedout.value, True)
41
        self.assertNotEqual(retval, 0)
42
43
        p = subprocess.Popen([sys.executable,
44
                              "-c",
45
                              "import time"])
46
        with subprocess_timeout(p, 0.5) as timedout:
47
            retval = p.wait()
48
            self.assertEqual(timedout.value, False)
49
        self.assertEqual(retval, 0)
50
51
        p = subprocess.Popen([sys.executable,
52
                              "-c",
53
                              "import time"])
54
        with subprocess_timeout(p, 0) as timedout:
55
            retval = p.wait()
56
            self.assertEqual(timedout.value, False)
57
        self.assertEqual(retval, 0)
58
59
    def test_suppress_stdout(self):
60
        def print_func():
61
            print("func")
62
            raise NotImplementedError
63
64
        def no_print_func():
65
            with suppress_stdout():
66
                print("func")
67
                raise NotImplementedError
68
69
        old_stdout = sys.stdout
70
        sys.stdout = False
71
72
        self.assertRaises(AttributeError, print_func)
73
        self.assertRaises(NotImplementedError, no_print_func)
74
75
        sys.stdout = old_stdout
76
77
    def test_retrieve_stdout(self):
78
        with retrieve_stdout() as sio:
79
            print("test")
80
            self.assertEqual(sio.getvalue(), "test\n")
81
82
    def test_simulate_console_inputs(self):
83
        with simulate_console_inputs(0, 1, 2) as generator:
84
            self.assertEqual(input(), 0)
85
            self.assertEqual(generator.last_input, 0)
86
            generator.inputs.append(3)
87
            self.assertEqual(input(), 1)
88
            self.assertEqual(input(), 2)
89
            self.assertEqual(input(), 3)
90
            self.assertEqual(generator.last_input, 3)
91
92
        with simulate_console_inputs("test"), self.assertRaises(ValueError):
93
            self.assertEqual(input(), "test")
94
            input()
95
96
97
if __name__ == '__main__':
98
    unittest.main(verbosity=2)
99