-
Notifications
You must be signed in to change notification settings - Fork 3
/
test_util.py
182 lines (124 loc) · 4.78 KB
/
test_util.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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
"""Test the util module"""
import os
import json
import random
import datetime
from nose.tools import *
import qs
def setup():
global http
http = qs.HTTPBinRequest('test request', '/status/418')
http.make_request()
open('._qstest.txt', 'w').close()
open('._qstest(5).txt', 'w').close()
def test_dumps():
complex_obj = [3, {1: [4, 5], 2: 2}, '5']
assert_equals(json.dumps(complex_obj, indent=4), qs.dumps(complex_obj))
simple_obj = [{2: 1}, 5]
simple_obj_json = '[\n {\n "2": 1\n }, \n 5\n]'
simple_obj_json_sorted = '[\n {\n "2": 1\n }, \n 5\n]'
assert_equals(simple_obj_json_sorted, qs.dumps(simple_obj))
assert_equals(simple_obj_json, qs.dumps(simple_obj, sort=False))
def assert_dumps_str():
assert_equals(qs.dumps(str), '"<type \'str\'>"')
def test_dumps_with_http_response():
assert_in('teapot', qs.dumps(http.response))
def test_rand_str_length():
length = random.randint(5, 10)
rand_str = qs.rand_str(length)
assert_equals(len(rand_str), length)
def test_rand_str_chars():
filtered = [i for i in qs.rand_str() if i.isalnum()]
assert_equals(len(filtered), len(qs.rand_str()))
def test_rand_str_randomness():
assert_not_equal(qs.rand_str(), qs.rand_str())
def test_merge():
assert_equals(qs.merge({1: 1}, {2: 2}, {3: 3}), {1: 1, 2: 2, 3: 3})
def test_clean_id():
good_inputs = [1234, u'1234', '1234', '1g5H6', 0]
for good_input in good_inputs:
assert_equals(str(good_input), qs.clean_id(good_input))
def test_valid_id():
value_errors = [None, {}, '']
for error in value_errors:
with assert_raises(ValueError):
qs.clean_id(error)
type_errors = [45.6, ['SomeID']]
for error in type_errors:
with assert_raises(TypeError):
qs.clean_id(error)
assert_false(qs.is_valid_id(error, check_only=True, func_name='test'))
def test_clean_args():
@qs.clean_arg
def to_be_cleaned(some_id):
return some_id
assert_is_instance(to_be_cleaned(1234), str)
def test_can_sense_nosetests():
assert_true(qs.running_from_test())
def test_dict_to_from_dict_list():
dict_to_test = {1: {2: 3, 'id': 1}, 2: {3: 4, 'id': 2}}
matching_list = [{2: 3, 'id': 1}, {3: 4, 'id': 2}]
assert_equals(qs.dict_list_to_dict(matching_list), dict_to_test)
assert_equals(qs.dict_to_dict_list(dict_to_test), matching_list)
assert_equals(
dict_to_test,
qs.dict_list_to_dict(qs.dict_to_dict_list(dict_to_test)))
def test_make_id():
assert_equals(qs.make_id('123'), '123')
assert_equals(qs.make_id(123, '456', u'789'), '123:456:789')
with assert_raises(TypeError):
qs.make_id([1234])
def test_phone_funcs():
raw = '1234567890'
formatted = '(123) 456-7890'
assert_true(qs.valid_us_phone(raw))
assert_equals(qs.format_phone(raw), formatted)
def test_digits():
assert_equals(qs.digits(' 123dfs'), '123')
def test_titlcase():
assert_equals(qs.tc('some string'), 'Some String')
def test_unique_path():
assert_equals(qs.unique_path('._qstest.txt'), '._qstest(1).txt')
assert_equals(qs.unique_path('._qstest(3).txt'), '._qstest(3).txt')
assert_equals(qs.unique_path('._qstest(5).txt'), '._qstest(6).txt')
assert_equals(
qs.unique_path('._qstest.txt', suffix='suf'),
'._qstestsuf(1).txt')
assert_in('_qstest', qs.unique_path('._qstest.txt', use_random=True))
def test_finance_to_float():
assert_equals(qs.finance_to_float('$100.07'), 100.07)
def test_find_dups_in_dict_list():
dict_1 = {'id': 1}
dict_2 = {'id': 1}
dict_3 = {'id': 2}
all_dicts = [dict_1, dict_2, dict_3]
dups = [dict_1, dict_2]
assert_equals(qs.find_dups_in_dict_list(all_dicts, 'id'), dups)
def test_to_bool():
true_strings = ['y', 'yes', 't', 'true', '1', '10']
false_strings = ['n', 'no', 'f', 'false', '0']
for true_string in true_strings:
assert_true(qs.to_bool(true_string))
for false_string in false_strings:
assert_false(qs.to_bool(false_string))
with assert_raises(ValueError):
qs.to_bool('notabool')
def test_hex_to_int():
assert_equals(qs.hex_to_int('#ffffff'), 16777215)
with assert_raises(ValueError):
qs.hex_to_int('notahex')
def test_parse_datestring():
test_date = datetime.datetime(2014, 10, 13)
assert_equals(qs.parse_datestring('2014-10-13'), test_date)
def test_unicode_decode():
# 2 representations (different encodings) of o with accent
latin_1 = '\xf3'
utf_8 = 'o\xcc\x81'
dec_latin_1 = qs.unicode_decode(latin_1)
dec_utf_8 = qs.unicode_decode(utf_8)
assert_equals(dec_latin_1, dec_utf_8)
assert_equals(len(dec_latin_1), 1)
assert_equals(len(dec_utf_8), 1)
def teardown():
os.remove('._qstest.txt')
os.remove('._qstest(5).txt')