You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Map hasEntry combined with collection matcher seems to fail incorrrectly #284
Exception in thread "main" java.lang.AssertionError:
Expected: map containing ["key"-><not an empty collection>]
but: map was [<key=[value1, value2]>]
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:18)
But key is mapped to a "not empty collection"? So I think it should pass.
Can you try the following and see if it works for you hasEntry(equalTo("key"), not(empty())).
The method hasEntry(K, V) assumes your giving literal Key and Value parameters. So it takes your not(empty()) and assumes it's a value, and instantly wraps it as equalTo(not(empty())).
The other method hasEntry(Matcher<K>, Matcher<V>) works for me as it takes matchers for both Key and Value. We don't have a method that takes the combination for hasEntry(K, Matcher<V>) currently which we would need for your original test.
Yes that works. Ok so what would be needed for this is 2 extra signatures for hasEntry
hasEntry(K key, Matcher<? super V> valueMatcher)
hasEntry(Matcher<? super K> keyMatcher, V value)
If you think that would be an acceptable solution I can look at making a PR? I think it would be a nice feature.
It would make sense to overload org.hamcrest.collection.IsMapContaining.hasEntry to have those signatures you have listed. I'm sure additional methods would get approved.
Please be careful with this. Things get hard to predict with this level of overloading. It's easy to end up trying to do equals() on a matcher object. Perhaps a better option would be both matchers?
Activity
jamesmudd commentedon Mar 4, 2020
Note on Java 11 with Hamcrest 2.1
nhojpatrick commentedon Mar 4, 2020
Can you test with hamcrest v2.2
nhojpatrick commentedon Mar 4, 2020
Your saying Java 11, are you aware if it works on another Java version?
jamesmudd commentedon Mar 4, 2020
Its exactly the same issue on Java 11 with Hamcrest v2.2 and on Java 8 with Hamcrest v2.2
nhojpatrick commentedon Mar 4, 2020
Can you try the following and see if it works for you
hasEntry(equalTo("key"), not(empty())).The method
hasEntry(K, V)assumes your giving literal Key and Value parameters. So it takes yournot(empty())and assumes it's a value, and instantly wraps it asequalTo(not(empty())).The other method
hasEntry(Matcher<K>, Matcher<V>)works for me as it takes matchers for both Key and Value. We don't have a method that takes the combination forhasEntry(K, Matcher<V>)currently which we would need for your original test.jamesmudd commentedon Mar 4, 2020
Yes that works. Ok so what would be needed for this is 2 extra signatures for
hasEntryhasEntry(K key, Matcher<? super V> valueMatcher)hasEntry(Matcher<? super K> keyMatcher, V value)If you think that would be an acceptable solution I can look at making a PR? I think it would be a nice feature.
nhojpatrick commentedon Mar 4, 2020
It would make sense to overload
org.hamcrest.collection.IsMapContaining.hasEntryto have those signatures you have listed. I'm sure additional methods would get approved.sf105 commentedon Mar 4, 2020
Please be careful with this. Things get hard to predict with this level of overloading. It's easy to end up trying to do equals() on a matcher object. Perhaps a better option would be both matchers?
hamcrest#284 Add hasEntry(K key, Matcher<? super V> valueMatcher) mat…