| 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 |