Fix unorderedMatches for poorly ordered input (#74)

Fixes #73

Reimplements the unordered matcher using a recursive search assuming
that matchers can match multiple values in the input rather than a
greedy algorithm which allows a matcher to "consume" a value that is
needed for some other matcher.

User visible differences:
- May match inputs that would have previously been (incorrectly)
  rejected.
- The failure description may include a number of unmatched
  expectations if more than 1 is unmatched.
4 files changed
tree: 34eb59bfe452c980dac669cb3f061e18b6bb0d0e
  1. lib/
  2. test/
  3. .gitignore
  4. .test_config
  5. .travis.yml
  6. analysis_options.yaml
  7. CHANGELOG.md
  8. codereview.settings
  9. LICENSE
  10. pubspec.yaml
  11. README.md
README.md

Support for specifying test expectations, such as for unit tests.

The matcher library provides a third-generation assertion mechanism, drawing inspiration from Hamcrest.

For more information, see Unit Testing with Dart.