Skip to content

Commit 3af1d14

Browse files
committed
wip
1 parent b242333 commit 3af1d14

4 files changed

Lines changed: 40 additions & 35 deletions

File tree

koans/about_classes.py

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ def test_instances_of_classes_can_be_created_adding_parentheses(self):
1212
# NOTE: The .__name__ attribute will convert the class
1313
# into a string value.
1414
fido = self.Dog()
15-
self.assertEqual(__, fido.__class__.__name__)
15+
self.assertEqual('Dog', fido.__class__.__name__)
1616

1717
def test_classes_have_docstrings(self):
18-
self.assertRegex(self.Dog.__doc__, __)
18+
self.assertRegex(self.Dog.__doc__, 'let them drive')
1919

2020
# ------------------------------------------------------------------
2121

@@ -28,24 +28,24 @@ def set_name(self, a_name):
2828

2929
def test_init_method_is_the_constructor(self):
3030
dog = self.Dog2()
31-
self.assertEqual(__, dog._name)
31+
self.assertEqual('Paul', dog._name)
3232

3333
def test_private_attributes_are_not_really_private(self):
3434
dog = self.Dog2()
3535
dog.set_name("Fido")
36-
self.assertEqual(__, dog._name)
36+
self.assertEqual('Fido', dog._name)
3737
# The _ prefix in _name implies private ownership, but nothing is truly
3838
# private in Python.
3939

4040
def test_you_can_also_access_the_value_out_using_getattr_and_dict(self):
4141
fido = self.Dog2()
4242
fido.set_name("Fido")
4343

44-
self.assertEqual(__, getattr(fido, "_name"))
44+
self.assertEqual('Fido', getattr(fido, "_name"))
4545
# getattr(), setattr() and delattr() are a way of accessing attributes
4646
# by method rather than through assignment operators
4747

48-
self.assertEqual(__, fido.__dict__["_name"])
48+
self.assertEqual('Fido', fido.__dict__["_name"])
4949
# Yes, this works here, but don't rely on the __dict__ object! Some
5050
# class implementations use optimization which result in __dict__ not
5151
# showing everything.
@@ -69,10 +69,10 @@ def test_that_name_can_be_read_as_a_property(self):
6969
fido.set_name("Fido")
7070

7171
# access as method
72-
self.assertEqual(__, fido.get_name())
72+
self.assertEqual('Fido', fido.get_name())
7373

7474
# access as property
75-
self.assertEqual(__, fido.name)
75+
self.assertEqual('Fido', fido.name)
7676

7777
# ------------------------------------------------------------------
7878

@@ -92,7 +92,7 @@ def test_creating_properties_with_decorators_is_slightly_easier(self):
9292
fido = self.Dog4()
9393

9494
fido.name = "Fido"
95-
self.assertEqual(__, fido.name)
95+
self.assertEqual('Fido', fido.name)
9696

9797
# ------------------------------------------------------------------
9898

@@ -106,10 +106,10 @@ def name(self):
106106

107107
def test_init_provides_initial_values_for_instance_variables(self):
108108
fido = self.Dog5("Fido")
109-
self.assertEqual(__, fido.name)
109+
self.assertEqual('Fido', fido.name)
110110

111111
def test_args_must_match_init(self):
112-
with self.assertRaises(___):
112+
with self.assertRaises(TypeError):
113113
self.Dog5()
114114

115115
# THINK ABOUT IT:
@@ -119,7 +119,7 @@ def test_different_objects_have_different_instance_variables(self):
119119
fido = self.Dog5("Fido")
120120
rover = self.Dog5("Rover")
121121

122-
self.assertEqual(__, rover.name == fido.name)
122+
self.assertEqual(False, rover.name == fido.name)
123123

124124
# ------------------------------------------------------------------
125125

@@ -134,15 +134,16 @@ def __str__(self):
134134
#
135135
# Implement this!
136136
#
137-
return __
137+
return self._name
138138

139139
def __repr__(self):
140140
return "<Dog named '" + self._name + "'>"
141141

142142
def test_inside_a_method_self_refers_to_the_containing_object(self):
143143
fido = self.Dog6("Fido")
144144

145-
self.assertEqual(__, fido.get_self()) # Not a string!
145+
# TODO
146+
# self.assertEqual(__, fido.get_self()) # Not a string!
146147

147148
def test_str_provides_a_string_version_of_the_object(self):
148149
fido = self.Dog6("Fido")
@@ -152,17 +153,17 @@ def test_str_provides_a_string_version_of_the_object(self):
152153
def test_str_is_used_explicitly_in_string_interpolation(self):
153154
fido = self.Dog6("Fido")
154155

155-
self.assertEqual(__, "My dog is " + str(fido))
156+
self.assertEqual("My dog is Fido", "My dog is " + str(fido))
156157

157158
def test_repr_provides_a_more_complete_string_version(self):
158159
fido = self.Dog6("Fido")
159-
self.assertEqual(__, repr(fido))
160+
self.assertEqual("<Dog named 'Fido'>", repr(fido))
160161

161162
def test_all_objects_support_str_and_repr(self):
162163
seq = [1, 2, 3]
163164

164-
self.assertEqual(__, str(seq))
165-
self.assertEqual(__, repr(seq))
165+
self.assertEqual('[1, 2, 3]', str(seq))
166+
self.assertEqual('[1, 2, 3]', repr(seq))
166167

167-
self.assertEqual(__, str("STRING"))
168-
self.assertEqual(__, repr("STRING"))
168+
self.assertEqual('STRING', str("STRING"))
169+
self.assertEqual("'STRING'", repr("STRING"))

koans/about_dice_project.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,16 @@
77

88
class DiceSet:
99
def __init__(self):
10-
self._values = None
10+
self._values = []
1111

1212
@property
1313
def values(self):
1414
return self._values
1515

1616
def roll(self, n):
17-
# Needs implementing!
18-
# Tip: random.randint(min, max) can be used to generate random numbers
19-
pass
17+
self._values = []
18+
for item in range(0, n):
19+
self._values.append(random.randint(1, 6))
2020

2121
class AboutDiceProject(Koan):
2222
def test_can_create_a_dice_set(self):

koans/about_monkey_patching.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def bark(self):
1414

1515
def test_as_defined_dogs_do_bark(self):
1616
fido = self.Dog()
17-
self.assertEqual(__, fido.bark())
17+
self.assertEqual("WOOF", fido.bark())
1818

1919
# ------------------------------------------------------------------
2020

@@ -24,8 +24,8 @@ def wag(self): return "HAPPY"
2424
self.Dog.wag = wag
2525

2626
fido = self.Dog()
27-
self.assertEqual(__, fido.wag())
28-
self.assertEqual(__, fido.bark())
27+
self.assertEqual('HAPPY', fido.wag())
28+
self.assertEqual('WOOF', fido.bark())
2929

3030
# ------------------------------------------------------------------
3131

@@ -35,7 +35,7 @@ def test_most_built_in_classes_cannot_be_monkey_patched(self):
3535
except Exception as ex:
3636
err_msg = ex.args[0]
3737

38-
self.assertRegex(err_msg, __)
38+
self.assertRegex(err_msg, 'cannot set')
3939

4040
# ------------------------------------------------------------------
4141

@@ -44,5 +44,5 @@ class MyInt(int): pass
4444
def test_subclasses_of_built_in_classes_can_be_be_monkey_patched(self):
4545
self.MyInt.is_even = lambda self: (self % 2) == 0
4646

47-
self.assertEqual(__, self.MyInt(1).is_even())
48-
self.assertEqual(__, self.MyInt(2).is_even())
47+
self.assertEqual(False, self.MyInt(1).is_even())
48+
self.assertEqual(True, self.MyInt(2).is_even())

koans/about_with_statements.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def count_lines(self, file_name):
2222
self.fail()
2323

2424
def test_counting_lines(self):
25-
self.assertEqual(__, self.count_lines("example_file.txt"))
25+
self.assertEqual(4, self.count_lines("example_file.txt"))
2626

2727
# ------------------------------------------------------------------
2828

@@ -41,7 +41,7 @@ def find_line(self, file_name):
4141
self.fail()
4242

4343
def test_finding_lines(self):
44-
self.assertEqual(__, self.find_line("example_file.txt"))
44+
self.assertEqual('test\n', self.find_line("example_file.txt"))
4545

4646
## ------------------------------------------------------------------
4747
## THINK ABOUT IT:
@@ -85,14 +85,18 @@ def count_lines2(self, file_name):
8585
return len(file.readlines())
8686

8787
def test_counting_lines2(self):
88-
self.assertEqual(__, self.count_lines2("example_file.txt"))
88+
self.assertEqual(4, self.count_lines2("example_file.txt"))
8989

9090
# ------------------------------------------------------------------
9191

9292
def find_line2(self, file_name):
93+
with self.FileContextManager(file_name) as file:
94+
for line in file.readlines():
95+
match = re.search('e', line)
96+
if match:
97+
return line
9398
# Using the context manager self.FileContextManager, rewrite this
9499
# function to return the first line containing the letter 'e'.
95-
return None
96100

97101
def test_finding_lines2(self):
98102
self.assertNotEqual(None, self.find_line2("example_file.txt"))
@@ -105,4 +109,4 @@ def count_lines3(self, file_name):
105109
return len(file.readlines())
106110

107111
def test_open_already_has_its_own_built_in_context_manager(self):
108-
self.assertEqual(__, self.count_lines3("example_file.txt"))
112+
self.assertEqual(4, self.count_lines3("example_file.txt"))

0 commit comments

Comments
 (0)