Add transformers `Map<K,V>.havingKeys()` and `Map<K,V>.havingValues()`
This adds some transformers allowing you to utilize Collection asserts on parts of a map.
Example for keys:
assertThat(mapOf("key" to "value")).havingKeys().containsOnly("key")
Example for values:
assertThat(mapOf("key" to "value")).havingValues().containsOnly("value")
Given that there is already a Map<K,V>.isNotEmpty() I thought it made sense to have these transformers throw an error if their corresponding parts have no values.
fixes #527
I thought it made sense to have these transformers throw an error if their corresponding parts have no values.
Do any other "having"-style functions also perform an implicit assertion?
Really my only criticism of this approach is that there's something pure in the "having" suite of functions being purely transformational in contrast to actual validation functions. There's nothing strictly wrong with doing assertThat(map).havingKeys().isEmpty(), after all, even if it's a bit redundant.
I did find some examples, such as key on a map (which should become havingKey if #522 moves forward). So retaining the implicit assertion here seems fine 👍 .
@JakeWharton I admittedly was on the fence here (and I'm definitely open to removing the assertion). Map<K,V>.key() was ultimately the reason I decided to leave in the assertion
This seems analogous to #546 (function names in that PR notwithstanding).