-
Notifications
You must be signed in to change notification settings - Fork 0
/
tests.py
157 lines (120 loc) · 4.92 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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
from deterministic_dingus import DingusWhitelistTestCase
import StringIO
import sys
#from json import JSONDecoder as JD
import reddit as mod
from reddit import Reddit
from reddit import Controller
import constants
class BaseTestCase(DingusWhitelistTestCase):
module = mod
mock_list = [
'urllib2',
'JSONDecoder',
'sys',
'webbrowser',
]
def setup(self):
super(BaseTestCase, self).setup()
mod.urllib2.urlopen().read.return_value = constants.mock_http_json
mod.JSONDecoder().decode().return_value = constants.mock_json
class TestReddit(BaseTestCase):
def setup(self):
super(TestReddit, self).setup()
self.redd = Reddit('')
def test_call_urlopen(self):
assert mod.urllib2.calls('urlopen', 'http://reddit.com//.json')
def test_call_decode(self):
assert mod.JSONDecoder().calls('decode').once()
def test_process_json_dict(self):
assert len(self.redd.list_of_entries) == 25
class TestController(BaseTestCase):
def setup(self):
super(TestController, self).setup()
self.controller = Controller()
self.saved_stdout = sys.stdout
self.mock_stdout = StringIO.StringIO()
sys.stdout = self.mock_stdout
def teardown(self):
sys.stdout = self.saved_stdout
def test_parse_input_two_nums(self):
self.controller.parse_input('23-33bar')
assert self.controller.lower_num == 23
assert self.controller.upper_num == 33
assert self.controller.cmd == 'bar'
def test_parse_input_one_num(self):
self.controller.parse_input('3bar')
assert self.controller.lower_num == 3
assert self.controller.upper_num == 4
assert self.controller.cmd == 'bar'
def test_parse_input_one_num_to_end(self):
self.controller.parse_input('3-bar')
assert self.controller.lower_num == 3
assert self.controller.upper_num == 25
assert self.controller.cmd == 'bar'
def test_parse_input_no_num(self):
self.controller.parse_input('o')
assert self.controller.lower_num == 0
assert self.controller.upper_num == 1
assert self.controller.cmd == 'o'
def test_extract_commands(self):
self.controller.parse_input('1-2aoxr')
assert self.controller.extract_commands() == {'o': [], 'r': []}
def test_process_commands_change_subreddit(self):
self.controller.act_on_input('r(pics)')
assert self.controller.subreddit == '/r/pics'
def test_extract_commands_with_arguments(self):
self.controller.parse_input('3g(arg1, arg2)')
assert self.controller.extract_commands() == {'g': ['arg1', 'arg2']}
def test_extract_commands_when_multiple_with_arguments(self):
self.controller.parse_input('1-23og(arg1, arg2)c(arg3)')
assert self.controller.extract_commands() == {
'o': [], 'g': ['arg1', 'arg2'], 'c': ['arg3']}
def test_open_url_in_browser(self):
self.controller.act_on_input('1o')
assert mod.webbrowser.calls('open_new_tab').once()
def test_open_url_in_browser_range_one_link(self):
self.controller.act_on_input('1-2o')
assert mod.webbrowser.calls('open_new_tab').once()
def test_open_url_in_browser_range_two_links(self):
self.controller.act_on_input('1-3o')
assert not mod.webbrowser.calls('open_new_tab').once()
assert mod.webbrowser.calls('open_new_tab')
assert len(mod.webbrowser.calls) == 2
def test_open_comments_in_browser(self):
self.controller.act_on_input('1h')
assert mod.webbrowser.calls('open_new_tab').once()
def test_printing_names(self):
self.controller.act_on_input('1-n')
printed = self.mock_stdout.getvalue()
sys.stdout = self.saved_stdout
assert 'Canada' in printed
def test_view_helper(self):
self.controller.view_helper(['ignored'])
printed = self.mock_stdout.getvalue()
sys.stdout = self.saved_stdout
assert 'Canada' in printed
def test_view(self):
# TODO:
self.controller.view()
printed = self.mock_stdout.getvalue()
sys.stdout = self.saved_stdout
assert 'Canada' in printed
def test_load_comments(self):
assert self.controller.reddit.comment_page == None
self.controller.act_on_input('.hi')
assert self.controller.reddit.comment_page
def test_default_number_range_setting(self):
self.controller.act_on_input('o')
sys.stdout = self.saved_stdout
print mod.webbrowser.calls
assert mod.webbrowser.calls('open_new_tab')
class TestComment(BaseTestCase):
def setup(self):
super(TestComment, self).setup()
self.controller = Comment('')
self.saved_stdout = sys.stdout
self.mock_stdout = StringIO.StringIO()
sys.stdout = self.mock_stdout
def teardown(self):
sys.stdout = self.saved_stdout