Formatted exception messages for non-scalar values is highly desirable, if not essential. Not just that a map/list does not match, but how it doesn't match - missing keys, extra keys, which key values differ (which can be a recursive process).

-- Jack Krupansky

-----Original Message----- From: Dawid Weiss
Sent: Saturday, July 14, 2012 7:43 AM
To: dev@lucene.apache.org
Subject: Re: [JENKINS] Lucene-Solr-trunk-Linux-Java8-64 - Build # 15 - Failure!

We use (and like) fest asserts. The syntax is nice but what's even
nicer are formatted exception messages for arrays, maps, etc. so you
get the idea what the mismatch was.

http://code.google.com/p/fest/

see fluid assertions; or here a new 2.x line of development:
https://github.com/alexruiz/fest-assert-2.x/wiki

Dawid

On Sat, Jul 14, 2012 at 2:20 PM, Uwe Schindler <u...@thetaphi.de> wrote:
Hi,


"... tests doing Map.toString() and compare against a hardcoded String
(which
is of course wrong for HashMaps or HashSets because order is undefined)."

Map.toString sounds like a great operation to forbid in Solr/Lucene,
especially
in tests. Although Map.toString is still helpful for debug/logging, what
would
really be helpful are two things: 1) display the map sorted/ordered by
key, and
2) compare two maps for equality (build a map to compare against rather
than
using a presumed toString value.) And, an "assertMapEquals" method as
well.
Maybe even a "assertMapKeys" method that simply verifies that the keys of
a
map are "equal" to a list of keys (set equality but not order.)

assertMapEquals can be done with assertEquals easily, you just have to pass
a full map as comparison base:

        assertEquals("map differs", new HashMap() {{ map.put(...);....}},
someMapToTest);

For Sets it is much easier:

        assertEquals("set differs", new HashSet(Arrays.asList(<items>)),
someSetToTest);

The semantics of Map/Set.equals() (see interface docs) explicitely specify
that any type of Map or Set must compare against another one, so you can
compare a TreeMap against a HashMap for equality.

If you want to compare by String and you only have a HashMap/HashSet, the
trick is:

        assertEquals("map differs", "{items....}", new
TreeMap(someMapToTest));

By that you enforce order (with cloning the map, but that's not a perf
problem in tests).

Uwe


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to