Djangoists:

Because I'm a perfectionist with deadlines, I write scads of developer
tests.

But they too frequently find me comparing two hashes for equality. The
goal of any assertion should be a pristine diagnostic that tells
everything it knows, neatly formatted. So assert_equal() fails on that
last count - neat formatting - hence you should not dump two big
hashes ('dict's) into it. You can never tell which items differ, and
which are just noise.

So I wrote an assertion that only prints out the differing items in
its diagnostic:

    def assert_match_hash(self, reference, sample, diagnostic=''):
        if reference == sample:  return
        reference = reference.copy()
        sample = sample.copy()
        from pprint import pformat

        for key, value in reference.items():
            if value == sample.get(key, value or True):
                reference.pop(key)
                sample.pop(key)

        diagnostic = ( 'hashes should not differ by these items:' +
                       '\n%s\n!=\n%s\n%s' %
                      ( pformat(reference),
                        pformat(sample),
                        diagnostic or '' ) )
        diagnostic = diagnostic.strip()
        self.assert_equal( reference, sample, diagnostic )

Can anyone improve it? Did I overlook any dict manipulations that
could simplify it? And if two hash values are themselves hashes, it
could recurse, right?

& Happy April 20th, y'all! Pic not related.

--
  Phlip
  http://penbird.deviantart.com/art/YARBK2-Charlie-Brown-160323823

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to