forked from stephanpoetschner/python-script
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtests.py
132 lines (95 loc) · 3.35 KB
/
tests.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
import logging
import unittest
from StringIO import StringIO
class FakeProcess(object):
def kill(self):
self.alive = False
class TestArgParsing(unittest.TestCase):
def setUp(self):
unittest.TestCase.setUp(self)
from script import parseargs
self.parseargs = parseargs
def test_parseargs(self):
opts, args = self.parseargs(["foo"])
self.assertEqual(opts.silent, False)
self.assertEqual(args, [])
class TestMain(unittest.TestCase):
def setUp(self):
unittest.TestCase.setUp(self)
root = logging.getLogger()
buffer = logging.handlers.BufferingHandler(100)
root.addHandler(buffer)
self.buffer = buffer.buffer
self.out = StringIO()
self.err = StringIO()
def main(self, *args, **kwargs):
from script import main
_kwargs = {
"out": self.out,
"err": self.err,
}
_kwargs.update(kwargs)
return main(*args, **_kwargs)
def test_main(self):
result = self.main(["foo"])
self.assertEqual(result, None)
self.assertEqual(self.buffer, [])
def test_main_verbose(self):
result = self.main(["foo", "-vv"])
self.assertEqual(result, None)
self.assertEqual(len(self.buffer), 1)
self.assertEqual(self.buffer[0].msg, "Ready to run")
self.assertTrue("Ready to run" in self.err.getvalue())
def test_main_silent(self):
result = self.main(["foo", "-s", "-vv"])
self.assertEqual(result, None)
self.assertEqual(self.buffer, [])
self.assertEqual(len(self.out.getvalue()), 0)
self.assertEqual(len(self.err.getvalue()), 0)
class TestTests(unittest.TestCase):
def setUp(self):
from script import getpyfile
self.getpyfile = getpyfile
def test_getpyfile(self):
self.assertEqual(
self.getpyfile("foo.pyc", exists=lambda x: True), "foo.py")
def test_getpyfile_nonexistent(self):
self.assertEqual(
self.getpyfile("foo.py", exists=lambda x: False), "foo.py")
def test_getpyfile_script(self):
self.assertEqual(
self.getpyfile("foo", exists=lambda x: True), "foo")
class TestFunctionalTests(unittest.TestCase):
def setUp(self):
unittest.TestCase.setUp(self)
import script
class TestFunctional(script.TestFunctional):
def __init__(self):
pass
self.functest = TestFunctional()
self.functest.setUp()
self.proc = p = FakeProcess()
p.pid = 10
p.alive = True
def test_reap(self):
self.functest.processes.append(self.proc)
self.functest.tearDown()
self.assertEqual(self.functest.processes, [])
self.assertEqual(self.proc.alive, False)
def test_reap_procalreadydead(self):
def kill():
err = OSError()
err.errno = 3
raise err
self.proc.kill = kill
self.functest.processes.append(self.proc)
self.functest.tearDown()
self.assertEqual(self.functest.processes, [])
def test_reap_oserror(self):
def kill():
err = OSError()
err.errno = 10
raise err
self.proc.kill = kill
self.functest.processes.append(self.proc)
self.assertRaises(OSError, self.functest.tearDown)