def test_str_method(self): # Assert basic format and trailing comma. err = ValidationError([MinimalDifference('A')], 'invalid data') expected = """ invalid data (1 difference): [ MinimalDifference('A'), ] """ expected = textwrap.dedent(expected).strip() self.assertEqual(str(err), expected) # Assert without description. err = ValidationError([MinimalDifference('A')]) # <- No description! expected = """ 1 difference: [ MinimalDifference('A'), ] """ expected = textwrap.dedent(expected).strip() self.assertEqual(str(err), expected) # Assert "no cacheing"--objects that inhereit from some # Exceptions can cache their str--but ValidationError should # not do this. err._differences = [MinimalDifference('B')] err._description = 'changed' updated = textwrap.dedent(""" changed (1 difference): [ MinimalDifference('B'), ] """).strip() self.assertEqual(str(err), updated) # Assert dict format and trailing comma. err = ValidationError( { 'x': MinimalDifference('A'), 'y': MinimalDifference('B') }, 'invalid data') regex = textwrap.dedent(r""" invalid data \(2 differences\): \{ '[xy]': MinimalDifference\('[AB]'\), '[xy]': MinimalDifference\('[AB]'\), \} """).strip() self.assertRegex(str(err), regex) # <- Using regex because dict order
def test_repr(self): err = ValidationError([MinimalDifference('A')]) # <- No description. expected = "ValidationError([MinimalDifference('A')])" self.assertEqual(repr(err), expected) err = ValidationError([MinimalDifference('A')], 'description string') expected = "ValidationError([MinimalDifference('A')], 'description string')" self.assertEqual(repr(err), expected) # Objects that inhereit from some Exceptions can cache their # repr--but ValidationError should not do this. err._differences = [MinimalDifference('B')] err._description = 'changed' self.assertNotEqual(repr(err), expected, 'exception should not cache repr') updated = "ValidationError([MinimalDifference('B')], 'changed')" self.assertEqual(repr(err), updated)