Conditions | 10 |
Total Lines | 213 |
Code Lines | 167 |
Lines | 0 |
Ratio | 0 % |
Changes | 0 |
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
Complex classes like tests.phonetic.test_phonetic_bmpm.BeiderMorseTestCases.test_bmpm() often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
1 | # -*- coding: utf-8 -*- |
||
51 | def test_bmpm(self): |
||
52 | """Test abydos.phonetic.bmpm.bmpm. |
||
53 | |||
54 | Most test cases from: |
||
55 | http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/language/bm/ |
||
56 | |||
57 | As a rule, the test cases are copied from the above code, but the |
||
58 | resultant values are not. This is largely because this Python port |
||
59 | follows the PHP reference implementation much more closely than the |
||
60 | Java port in Apache Commons Codec does. As a result, these tests have |
||
61 | been conformed to the output produced by the PHP implementation, |
||
62 | particularly in terms of formatting and ordering. |
||
63 | """ |
||
64 | # base cases |
||
65 | self.assertEqual(bmpm(''), '') |
||
66 | |||
67 | for langs in ('', 1, 'spanish', 'english,italian', 3): |
||
68 | for name_mode in ('gen', 'ash', 'sep'): |
||
69 | for match_mode in ('approx', 'exact'): |
||
70 | for concat in (False, True): |
||
71 | if (isinstance(langs, text_type) and |
||
72 | ((name_mode == 'ash' and 'italian' in langs) or |
||
73 | (name_mode == 'sep' and 'english' in langs))): |
||
74 | self.assertRaises(ValueError, bmpm, '', langs, |
||
75 | name_mode, match_mode, concat) |
||
76 | else: |
||
77 | self.assertEqual(bmpm('', langs, name_mode, |
||
78 | match_mode, concat), '') |
||
79 | |||
80 | # testSolrGENERIC |
||
81 | # concat is true, ruleType is EXACT |
||
82 | self.assertEqual(bmpm('Angelo', '', 'gen', 'exact', True), |
||
83 | 'angelo anxelo anhelo anjelo anZelo andZelo') |
||
84 | self.assertEqual(bmpm('D\'Angelo', '', 'gen', 'exact', True), |
||
85 | 'angelo anxelo anhelo anjelo anZelo andZelo dangelo' + |
||
86 | ' danxelo danhelo danjelo danZelo dandZelo') |
||
87 | self.assertEqual(bmpm('Angelo', 'italian,greek,spanish', 'gen', |
||
88 | 'exact', True), |
||
89 | 'angelo anxelo andZelo') |
||
90 | self.assertEqual(bmpm('1234', '', 'gen', 'exact', True), '') |
||
91 | |||
92 | # concat is false, ruleType is EXACT |
||
93 | self.assertEqual(bmpm('Angelo', '', 'gen', 'exact', False), |
||
94 | 'angelo anxelo anhelo anjelo anZelo andZelo') |
||
95 | self.assertEqual(bmpm('D\'Angelo', '', 'gen', 'exact', False), |
||
96 | 'angelo anxelo anhelo anjelo anZelo andZelo dangelo' + |
||
97 | ' danxelo danhelo danjelo danZelo dandZelo') |
||
98 | self.assertEqual(bmpm('Angelo', 'italian,greek,spanish', 'gen', |
||
99 | 'exact', False), |
||
100 | 'angelo anxelo andZelo') |
||
101 | self.assertEqual(bmpm('1234', '', 'gen', 'exact', False), '') |
||
102 | |||
103 | # concat is true, ruleType is APPROX |
||
104 | self.assertEqual(bmpm('Angelo', '', 'gen', 'approx', True), |
||
105 | 'angilo angYlo agilo ongilo ongYlo ogilo Yngilo' + |
||
106 | ' YngYlo anxilo onxilo anilo onilo aniilo oniilo' + |
||
107 | ' anzilo onzilo') |
||
108 | self.assertEqual(bmpm('D\'Angelo', '', 'gen', 'approx', True), |
||
109 | 'angilo angYlo agilo ongilo ongYlo ogilo Yngilo' + |
||
110 | ' YngYlo anxilo onxilo anilo onilo aniilo oniilo' + |
||
111 | ' anzilo onzilo dangilo dangYlo dagilo dongilo' + |
||
112 | ' dongYlo dogilo dYngilo dYngYlo danxilo donxilo' + |
||
113 | ' danilo donilo daniilo doniilo danzilo donzilo') |
||
114 | self.assertEqual(bmpm('Angelo', 'italian,greek,spanish', 'gen', |
||
115 | 'approx', True), |
||
116 | 'angilo ongilo anxilo onxilo anzilo onzilo') |
||
117 | self.assertEqual(bmpm('1234', '', 'gen', 'approx', True), '') |
||
118 | |||
119 | # concat is false, ruleType is APPROX |
||
120 | self.assertEqual(bmpm('Angelo', '', 'gen', 'approx', False), |
||
121 | 'angilo angYlo agilo ongilo ongYlo ogilo Yngilo' + |
||
122 | ' YngYlo anxilo onxilo anilo onilo aniilo oniilo' + |
||
123 | ' anzilo onzilo') |
||
124 | self.assertEqual(bmpm('D\'Angelo', '', 'gen', 'approx', False), |
||
125 | 'angilo angYlo agilo ongilo ongYlo ogilo Yngilo' + |
||
126 | ' YngYlo anxilo onxilo anilo onilo aniilo oniilo' + |
||
127 | ' anzilo onzilo dangilo dangYlo dagilo dongilo' + |
||
128 | ' dongYlo dogilo dYngilo dYngYlo danxilo donxilo' + |
||
129 | ' danilo donilo daniilo doniilo danzilo donzilo') |
||
130 | self.assertEqual(bmpm('Angelo', 'italian,greek,spanish', 'gen', |
||
131 | 'approx', False), |
||
132 | 'angilo ongilo anxilo onxilo anzilo onzilo') |
||
133 | self.assertEqual(bmpm('1234', '', 'gen', 'approx', False), '') |
||
134 | |||
135 | # testSolrASHKENAZI |
||
136 | # concat is true, ruleType is EXACT |
||
137 | self.assertEqual(bmpm('Angelo', '', 'ash', 'exact', True), |
||
138 | 'angelo andZelo anhelo anxelo') |
||
139 | self.assertEqual(bmpm('D\'Angelo', '', 'ash', 'exact', True), |
||
140 | 'dangelo dandZelo danhelo danxelo') |
||
141 | self.assertRaises(ValueError, bmpm, 'Angelo', 'italian,greek,spanish', |
||
142 | 'ash', 'exact', True) |
||
143 | self.assertEqual(bmpm('Angelo', 'italian,greek,spanish', 'ash', |
||
144 | 'exact', True, True), 'anxelo angelo') |
||
145 | self.assertEqual(bmpm('1234', '', 'ash', 'exact', True), '') |
||
146 | |||
147 | # concat is false, ruleType is EXACT |
||
148 | self.assertEqual(bmpm('Angelo', '', 'ash', 'exact', False), |
||
149 | 'angelo andZelo anhelo anxelo') |
||
150 | self.assertEqual(bmpm('D\'Angelo', '', 'ash', 'exact', False), |
||
151 | 'dangelo dandZelo danhelo danxelo') |
||
152 | self.assertRaises(ValueError, bmpm, 'Angelo', 'italian,greek,spanish', |
||
153 | 'ash', 'exact', False) |
||
154 | self.assertEqual(bmpm('Angelo', 'italian,greek,spanish', 'ash', |
||
155 | 'exact', False, True), 'anxelo angelo') |
||
156 | self.assertEqual(bmpm('1234', '', 'ash', 'exact', False), '') |
||
157 | |||
158 | # concat is true, ruleType is APPROX |
||
159 | self.assertEqual(bmpm('Angelo', '', 'ash', 'approx', True), |
||
160 | 'angilo angYlo ongilo ongYlo Yngilo YngYlo anzilo' + |
||
161 | ' onzilo anilo onilo anxilo onxilo') |
||
162 | self.assertEqual(bmpm('D\'Angelo', '', 'ash', 'approx', True), |
||
163 | 'dangilo dangYlo dongilo dongYlo dYngilo dYngYlo' + |
||
164 | ' danzilo donzilo danilo donilo danxilo donxilo') |
||
165 | self.assertRaises(ValueError, bmpm, 'Angelo', 'italian,greek,spanish', |
||
166 | 'ash', 'approx', True) |
||
167 | self.assertEqual(bmpm('Angelo', 'italian,greek,spanish', 'ash', |
||
168 | 'approx', True, True), |
||
169 | 'anxYlo anxilo onxYlo onxilo angYlo angilo ongYlo' + |
||
170 | ' ongilo') |
||
171 | self.assertEqual(bmpm('1234', '', 'ash', 'approx', True), '') |
||
172 | |||
173 | # concat is false, ruleType is APPROX |
||
174 | self.assertEqual(bmpm('Angelo', '', 'ash', 'approx', False), |
||
175 | 'angilo angYlo ongilo ongYlo Yngilo YngYlo anzilo' + |
||
176 | ' onzilo anilo onilo anxilo onxilo') |
||
177 | self.assertEqual(bmpm('D\'Angelo', '', 'ash', 'approx', False), |
||
178 | 'dangilo dangYlo dongilo dongYlo dYngilo dYngYlo' + |
||
179 | ' danzilo donzilo danilo donilo danxilo donxilo') |
||
180 | self.assertRaises(ValueError, bmpm, 'Angelo', 'italian,greek,spanish', |
||
181 | 'ash', 'approx', False) |
||
182 | self.assertEqual(bmpm('Angelo', 'italian,greek,spanish', 'ash', |
||
183 | 'approx', False, True), |
||
184 | 'anxYlo anxilo onxYlo onxilo angYlo angilo ongYlo' + |
||
185 | ' ongilo') |
||
186 | self.assertEqual(bmpm('1234', '', 'ash', 'approx', False), '') |
||
187 | |||
188 | # testSolrSEPHARDIC |
||
189 | # concat is true, ruleType is EXACT |
||
190 | self.assertEqual(bmpm('Angelo', '', 'sep', 'exact', True), |
||
191 | 'anZelo andZelo anxelo') |
||
192 | self.assertEqual(bmpm('D\'Angelo', '', 'sep', 'exact', True), |
||
193 | 'anZelo andZelo anxelo') |
||
194 | self.assertRaises(ValueError, bmpm, 'Angelo', 'italian,greek,spanish', |
||
195 | 'sep', 'exact', True) |
||
196 | self.assertEqual(bmpm('Angelo', 'italian,greek,spanish', 'sep', |
||
197 | 'exact', True, True), |
||
198 | 'andZelo anxelo') |
||
199 | self.assertEqual(bmpm('1234', '', 'sep', 'exact', True), '') |
||
200 | |||
201 | # concat is false, ruleType is EXACT |
||
202 | self.assertEqual(bmpm('Angelo', '', 'sep', 'exact', False), |
||
203 | 'anZelo andZelo anxelo') |
||
204 | self.assertEqual(bmpm('D\'Angelo', '', 'sep', 'exact', False), |
||
205 | 'anZelo andZelo anxelo') |
||
206 | self.assertRaises(ValueError, bmpm, 'Angelo', 'italian,greek,spanish', |
||
207 | 'sep', 'exact', False) |
||
208 | self.assertEqual(bmpm('Angelo', 'italian,greek,spanish', 'sep', |
||
209 | 'exact', False, True), 'andZelo anxelo') |
||
210 | self.assertEqual(bmpm('1234', '', 'sep', 'exact', False), '') |
||
211 | |||
212 | # concat is true, ruleType is APPROX |
||
213 | self.assertEqual(bmpm('Angelo', '', 'sep', 'approx', True), |
||
214 | 'anzila anzilu nzila nzilu anhila anhilu nhila nhilu') |
||
215 | self.assertEqual(bmpm('D\'Angelo', '', 'sep', 'approx', True), |
||
216 | 'anzila anzilu nzila nzilu anhila anhilu nhila nhilu') |
||
217 | self.assertRaises(ValueError, bmpm, 'Angelo', 'italian,greek,spanish', |
||
218 | 'sep', 'approx', True) |
||
219 | self.assertEqual(bmpm('Angelo', 'italian,greek,spanish', 'sep', |
||
220 | 'approx', True, True), |
||
221 | 'anzila anzilu nzila nzilu anhila anhilu nhila nhilu') |
||
222 | self.assertEqual(bmpm('1234', '', 'sep', 'approx', True), '') |
||
223 | |||
224 | # concat is false, ruleType is APPROX |
||
225 | self.assertEqual(bmpm('Angelo', '', 'sep', 'approx', False), |
||
226 | 'anzila anzilu nzila nzilu anhila anhilu nhila nhilu') |
||
227 | self.assertEqual(bmpm('D\'Angelo', '', 'sep', 'approx', False), |
||
228 | 'anzila anzilu nzila nzilu anhila anhilu nhila nhilu') |
||
229 | self.assertRaises(ValueError, bmpm, 'Angelo', 'italian,greek,spanish', |
||
230 | 'sep', 'approx', False) |
||
231 | self.assertEqual(bmpm('Angelo', 'italian,greek,spanish', 'sep', |
||
232 | 'approx', False, True), |
||
233 | 'anzila anzilu nzila nzilu anhila anhilu nhila nhilu') |
||
234 | self.assertEqual(bmpm('1234', '', 'sep', 'approx', False), '') |
||
235 | |||
236 | # testCompatibilityWithOriginalVersion |
||
237 | self.assertEqual(bmpm('abram', '', 'gen', 'approx', False), |
||
238 | 'abram abrom avram avrom obram obrom ovram ovrom' + |
||
239 | ' Ybram Ybrom abran abron obran obron') |
||
240 | self.assertEqual(bmpm('Bendzin', '', 'gen', 'approx', False), |
||
241 | 'binzn bindzn vindzn bintsn vintsn') |
||
242 | self.assertEqual(bmpm('abram', '', 'ash', 'approx', False), |
||
243 | 'abram abrom avram avrom obram obrom ovram ovrom' + |
||
244 | ' Ybram Ybrom ombram ombrom imbram imbrom') |
||
245 | self.assertEqual(bmpm('Halpern', '', 'ash', 'approx', False), |
||
246 | 'alpirn alpYrn olpirn olpYrn Ylpirn YlpYrn xalpirn' + |
||
247 | ' xolpirn') |
||
248 | |||
249 | # PhoneticEngineTest |
||
250 | self.assertEqual(bmpm('Renault', '', 'gen', 'approx', True), |
||
251 | 'rinolt rino rinDlt rinalt rinult rinD rina rinu') |
||
252 | self.assertEqual(bmpm('Renault', '', 'ash', 'approx', True), |
||
253 | 'rinDlt rinalt rinult rYnDlt rYnalt rYnult rinolt') |
||
254 | self.assertEqual(bmpm('Renault', '', 'sep', 'approx', True), |
||
255 | 'rinDlt') |
||
256 | self.assertEqual(bmpm('SntJohn-Smith', '', 'gen', 'exact', True), |
||
257 | 'sntjonsmit') |
||
258 | self.assertEqual(bmpm('d\'ortley', '', 'gen', 'exact', True), |
||
259 | 'ortlaj ortlej dortlaj dortlej') |
||
260 | self.assertEqual(bmpm('van helsing', '', 'gen', 'exact', False), |
||
261 | 'helSink helsink helzink xelsink elSink elsink' + |
||
262 | ' vanhelsink vanhelzink vanjelsink fanhelsink' + |
||
263 | ' fanhelzink banhelsink') |
||
264 | |||
514 |