Assertions on elements of a collection

Some assertions on collections include sub-assertions applied to the elements of the collection. For example, we can assert that all elements conform to a repeated assertion.

val subject = setOf("catflap", "rubberplant", "marzipan")
expectThat(subject).all {
  isLowerCase()
  startsWith('c')
}

This produces the output:

▼ Expect that ["catflap", "rubberplant", "marzipan"]:
  ✗ all elements match:
    ▼ "catflap":
      ✓ is lower case
      ✓ starts with 'c'
    ▼ "rubberplant":
      ✓ is lower case
      ✗ starts with 'c'
              found 'r'
    ▼ "marzipan":
      ✓ is lower case
      ✗ starts with 'c'
              found 'm'

The results are broken down by individual elements in the collection, so it's easy to see which failed.

Similarly, any asserts that at least one element passes the nested assertions, one succeeds if exactly one element passes the nested assertions, and none succeeds if all elements of the collection fail the nested assertions.