Skip to content

Commit 2afe602

Browse files
committed
better naming and organization for tests
1 parent 913fd99 commit 2afe602

File tree

1 file changed

+47
-26
lines changed

1 file changed

+47
-26
lines changed

tests.py

Lines changed: 47 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def test_domain_extension_is_required(self):
2828
self.assertFalse(is_email('name@site'))
2929
self.assertFalse(is_email('name@site.'))
3030

31-
def test_domain_extension_must_be_letters_only_from_2_to_4_chars(self):
31+
def test_domain_extension_should_be_letters_only_from_2_to_4_chars(self):
3232
self.assertFalse(is_email('me@foo.123'))
3333
self.assertFalse(is_email('me@foo.c'))
3434
self.assertFalse(is_email('me@foo.!!'))
@@ -128,15 +128,15 @@ def test_string_cannot_be_empty(self):
128128
def test_string_cannot_contain_letters(self):
129129
self.assertFalse(is_credit_card('not a credit card for sure'))
130130

131-
def test_numbers_in_string_must_be_15_at_least(self):
131+
def test_numbers_in_string_should_be_15_at_least(self):
132132
self.assertFalse(is_credit_card('1' * 14))
133133

134-
def test_must_accept_any_valid_card_number_if_type_is_not_specified(self):
134+
def test_should_accept_any_valid_card_number_if_type_is_not_specified(self):
135135
for card_type in self.sample_cards:
136136
for card_number in self.sample_cards[card_type]:
137137
self.assertTrue(is_credit_card(card_number), 'Invalid card: %s (%s)' % (card_number, card_type))
138138

139-
def test_must_validate_only_specific_card_type_if_specified(self):
139+
def test_should_validate_only_specific_card_type_if_specified(self):
140140
for card_type in self.sample_cards:
141141
for card_number in self.sample_cards[card_type]:
142142
self.assertTrue(
@@ -156,68 +156,89 @@ def test_cannot_provide_unsupported_card_type(self):
156156

157157

158158
class IsCamelCaseTestCase(TestCase):
159-
def test_raises_type_error_if_provided_object_is_not_a_string(self):
159+
def test_cannot_handle_non_string_objects(self):
160160
self.assertRaises(TypeError, lambda: is_camel_case(None))
161161
self.assertRaises(TypeError, lambda: is_camel_case(False))
162162
self.assertRaises(TypeError, lambda: is_camel_case(0))
163163
self.assertRaises(TypeError, lambda: is_camel_case([]))
164164
self.assertRaises(TypeError, lambda: is_camel_case({'a': 1}))
165165

166-
def test_returns_false_for_empty_string(self):
166+
def test_string_cannot_be_empty(self):
167167
self.assertFalse(is_camel_case(''))
168+
self.assertFalse(is_camel_case(' '))
168169

169-
def test_returns_false_for_lowercase_string(self):
170+
def test_string_cannot_be_all_lowercase(self):
170171
self.assertFalse(is_camel_case('lowercase'))
171172

172-
def test_returns_false_for_uppercase_string(self):
173+
def test_string_cannot_be_all_uppercase(self):
173174
self.assertFalse(is_camel_case('UPPERCASE'))
174175

175-
def test_returns_false_if_string_has_spaces(self):
176+
def test_string_cannot_contain_spaces(self):
176177
self.assertFalse(is_camel_case(' CamelCase '))
177178

178-
def test_returns_false_if_string_starts_with_number(self):
179+
def test_string_cannot_start_with_number(self):
179180
self.assertFalse(is_camel_case('1000Times'))
180181

181-
def test_returns_false_if_string_contains_invalid_chars(self):
182+
def test_string_cannot_contain_invalid_chars(self):
182183
self.assertFalse(is_camel_case('<#NotCamelCaseHere!?>'))
183184

184-
def test_returns_true_if_camel_case(self):
185+
def test_should_accept_valid_camel_case_string(self):
185186
self.assertTrue(is_camel_case('Camel'))
186187
self.assertTrue(is_camel_case('CamelCase'))
188+
self.assertTrue(is_camel_case('camelCase'))
187189
self.assertTrue(is_camel_case('CamelCaseTOO'))
188190
self.assertTrue(is_camel_case('ACamelCaseIsAlsoAStringLikeThis1'))
189191
self.assertTrue(is_camel_case('camelCaseStartingLowerEndingUPPER'))
190192

191193

192194
class IsSnakeCaseTestCase(TestCase):
193-
def test_raises_type_error_if_provided_object_is_not_a_string(self):
195+
def test_cannot_handle_non_string_objects(self):
194196
self.assertRaises(TypeError, lambda: is_snake_case(None))
195197
self.assertRaises(TypeError, lambda: is_snake_case(False))
196198
self.assertRaises(TypeError, lambda: is_snake_case(0))
197199
self.assertRaises(TypeError, lambda: is_snake_case([]))
198200
self.assertRaises(TypeError, lambda: is_snake_case({'a': 1}))
199201

200-
def test_returns_true_if_custom_separator_is_used(self):
201-
s = 'snake-string-with-dashes'
202-
self.assertFalse(is_snake_case(s))
203-
self.assertTrue(is_snake_case(s, separator='-'))
204-
205-
def test_returns_false_for_no_snake_string(self):
202+
def test_string_cannot_be_blank(self):
206203
self.assertFalse(is_snake_case(''))
207-
self.assertFalse(is_snake_case('foo'))
204+
self.assertFalse(is_snake_case(' '))
205+
206+
def test_string_cannot_be_lowercase_letters_only(self):
207+
self.assertFalse(is_snake_case('lowercaseonly'))
208+
209+
def test_string_cannot_be_camel_case(self):
208210
self.assertFalse(is_snake_case('Banana'))
211+
212+
def test_string_cannot_be_all_uppercase(self):
209213
self.assertFalse(is_snake_case('HELLO'))
210-
self.assertFalse(is_snake_case('HELLO_WORLD'))
211-
self.assertFalse(is_snake_case('_hello_world_'))
214+
215+
def test_string_cannot_contain_bad_signs(self):
212216
self.assertFalse(is_snake_case('1_no_snake'))
213217
self.assertFalse(is_snake_case('%_no_snake'))
218+
self.assertFalse(is_snake_case('no_snake#'))
219+
220+
def test_should_consider_single_chars_only_snake_sequence_invalid(self):
214221
self.assertFalse(is_snake_case('a_b_c_d_e'))
222+
223+
def test_snake_string_cannot_be_uppercase(self):
224+
self.assertFalse(is_snake_case('HELLO_WORLD'))
215225

216-
def test_returns_true_for_snake_strings(self):
226+
def test_string_cannot_start_with_underscore(self):
227+
self.assertFalse(is_snake_case('_hello_world'))
228+
229+
def test_string_cannot_end_with_underscore(self):
230+
self.assertFalse(is_snake_case('hello_world_'))
231+
232+
def test_should_accept_valid_snake_strings(self):
217233
self.assertTrue(is_snake_case('hello_world'))
218234
self.assertTrue(is_snake_case('snake_case_string'))
219235
self.assertTrue(is_snake_case('snake_2'))
220236
self.assertTrue(is_snake_case('a_snake_string_4_you'))
237+
238+
def test_should_consider_custom_separator(self):
239+
s = 'snake-string-with-dashes'
240+
self.assertFalse(is_snake_case(s))
241+
self.assertTrue(is_snake_case(s, separator='-'))
221242

222243

223244
class ReverseTestCase(TestCase):
@@ -231,7 +252,7 @@ def test_returns_reversed_string(self):
231252

232253

233254
class CamelCaseToSnakeTestCase(TestCase):
234-
def test_raises_type_error_if_provided_object_is_not_a_string(self):
255+
def test_cannot_handle_non_string_objects(self):
235256
self.assertRaises(TypeError, lambda: camel_case_to_snake(None))
236257
self.assertRaises(TypeError, lambda: camel_case_to_snake(False))
237258
self.assertRaises(TypeError, lambda: camel_case_to_snake(0))
@@ -274,7 +295,7 @@ def test_should_use_provided_separator(self):
274295

275296

276297
class SnakeCaseToCamelTestCase(TestCase):
277-
def test_raises_type_error_if_provided_object_is_not_a_string(self):
298+
def test_cannot_handle_non_string_objects(self):
278299
self.assertRaises(TypeError, lambda: snake_case_to_camel(None))
279300
self.assertRaises(TypeError, lambda: snake_case_to_camel(False))
280301
self.assertRaises(TypeError, lambda: snake_case_to_camel(0))
@@ -296,7 +317,7 @@ def test_returns_camel_case_from_correct_snake_case(self):
296317
self.assertEqual(snake_case_to_camel('the_snake_is_green'), 'TheSnakeIsGreen')
297318
self.assertEqual(snake_case_to_camel('the_number_of_the_beast_is_666'), 'TheNumberOfTheBeastIs666')
298319

299-
def test_returns_camel_case_for_custom_separator(self):
320+
def test_should_consider_custom_separator(self):
300321
s = 'snake-case-using-dashes'
301322
self.assertEqual(snake_case_to_camel(s), s)
302323
self.assertEqual(snake_case_to_camel(s, separator='-'), 'SnakeCaseUsingDashes')

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy