'Asserts that a field behaves correctly with various inputs.
Args:
fieldclass: the class of the field to be tested.
valid: a dictionary mapping valid inputs to their expected
cleaned values.
invalid: a dictionary mapping invalid inputs to one or more
raised error messages.
field_args: the args passed to instantiate the field
field_kwargs: the kwargs passed to instantiate the field
empty_value: the expected clean output for inputs in EMPTY_VALUES'

def assertFieldOutput(self, fieldclass, valid, invalid, field_args=[], field_kwargs={}, empty_value=u''):

    required = fieldclass(*field_args, **field_kwargs)
    optional = fieldclass(*field_args, **dict(field_kwargs, required=False))
    for (input, output) in valid.items():
        self.assertEqual(required.clean(input), output)
        self.assertEqual(optional.clean(input), output)
    for (input, errors) in invalid.items():
        self.assertRaisesRegexp(ValidationError, unicode(errors), required.clean, input)
        self.assertRaisesRegexp(ValidationError, unicode(errors), optional.clean, input)
    error_required = u'This    field    is    required'
    for e in EMPTY_VALUES:
        self.assertRaisesRegexp(ValidationError, error_required, required.clean, e)
        self.assertEqual(optional.clean(e), empty_value)
