Dartのmacher一覧

Dartのmatcherを一覧にしてみました。

## Core
| matcher                       |                                                        |
| ----------------------------- | ------------------------------------------------------ |
| isEmpty                       | item.isEmpty                                           |
| isNotEmpty                    | item.isNotEmpty                                        |
| isNull                        | item == null                                           |
| isNotNull                     | item != null                                           |
| isTrue                        | item == true                                           |
| isFalse                       | item == false                                          |
| isNaN                         | double.nan.compareTo(item) == 0                        |
| isNotNaN                      | double.nan.compareTo(item) != 0                        |
| same(expected)                | identical(item, _expected)                             |
| anything                      | true                                                   |
| returnsNormally               | 例外が発生ぜずに関数としてコールできればpass           |
| isMap                         | item is Map                                            |
| isList                        | item is List                                           |
| hasLength(matcher)            | item.length >= 0 && matcher                            |
| contains(expected)            | itemの中にexpectedが含まれていればpass                 |
| isIn(expected)                | itemがexpectedの中に含まれていればpass（containsの逆） |
| predicate&lt;T&gt;(bool f(T value)) | boolを返す任意の関数を指定できる                       |

## Operator
    
| matcher                                           |                           |
| ------------------------------------------------- | ------------------------- |
| equals(expected)                                  | item == expected          |
| isNot(matcher)                                    | !matcher                  |
| allOf(arg0, [arg1, arg2, arg3, arg4, arg5, arg6]) | 全てにmatchすればpass     |
| anyOf(arg0, [arg1, arg2, arg3, arg4, arg5, arg6]) | いずれかにmatchすればpass |
| greaterThan(value)                                | item > value              |
| greaterThanOrEqualTo(value)                       | item >= value             |
| lessThan(value)                                   | item < value              |
| lessThanOrEqualTo(value)                          | item <= value             |

## Type

| matcher      |           |
| ------------ | --------- |
| isA&lt;T&gt; | item is T |

## Numeric
    
| matcher                      |                             |
| ---------------------------- | --------------------------- |
| closeTo(value, delta)        | abs(item - value) <= delta  |
| inInclusiveRange(low, high)  | low <= item && item <= high |
| inExclusiveRange(low, high)  | low < item && item < high   |
| inOpenClosedRange(low, high) | low < item && item <= high  |
| inClosedOpenRange(low, high) | low <= item && item < high  |
| isZero                       | item == 0                   |
| isNonZero                    | item != 0                   |
| isPositive                   | item > 0                    |
| isNonPositive                | item > 0 == false           |
| isNegative                   | item < 0                    |
| isNonNegative                | item < 0 == false           |
    
## String

| matcher                           |                                        |
| --------------------------------- | -------------------------------------- |
| equalsIgnoringCase(value)         | 大文字、小文字を無視して比較           |
| equalsIgnoringWhitespace(value)   | 空白文字を無視して比較                 |
| startsWith(prefixString)          | 前方一致で比較                         |
| endsWith(suffixString)            | 後方一致で比較                         |
| stringContainsInOrder(substrings) | 各文字列が順序通りに含まれていればpass |
| matches(re)                       | 正規表現にマッチしていればpass         |
    
## Iterable
    
| matcher                                                  |                                                        |
| -------------------------------------------------------- | ------------------------------------------------------ |
| everyElement(matcher)                                    | 全ての要素がmatcherとマッチすればpass                  |
| anyElement(matcher)                                      | どれかの要素がmatcherとマッチすればpass                |
| orderedEquals(expected)                                  | 要素数と要素の順番が一致していればpass                 |
| unorderedEquals(expected)                                | 順番が異なっていても要素数と各要素が一致していればpass |
| unorderedMatches(expected)                               | unorderedEqualsと同様だが、expectedにmatcherを指定する |
| pairwiseCompare&lt;S, T&gt;(expected, bool comparator(S a, T b) | 任意の比較関数を指定できる                             |
| containsAll(expected)                                    | 全ての値が含まれていればpass                           |
| containsAllInOrder(expected)                             | 全ての値が順番通り含まれていればpass                   |
    
## Map
    
| matcher                  |                                                          |
| ------------------------ | -------------------------------------------------------- |
| containsValue(value)     | item.containsValue(value)                                |
| containsPair(key, value) | item.containsKey(key) && item[key]がvalueのmatcherをpass |
    
## Feature
    
| matcher             |                                           |
| ------------------- | ----------------------------------------- |
| completes           | 終了すればpass                            |
| completion(matcher) | 終了してmatcherにマッチする値を返せばpass |
| doesNotComplete     | 終了しなければpass                        |

## Stream
    
| matcher                   |                                                    |
| ------------------------- | -------------------------------------------------- |
| emitsDone                 | 次にdoneイベントが発行されればpass                 |
| emits(matcher)            | 次にmatcherに一致する値が発行されればpass          |
| emitsError(matcher)       | 次にmatcherに一致するエラーが発行されればpass      |
| mayEmit(matcher)          | 常にpass。matcherに一致した値が発行されたら終了する    |
| emitsAnyOf(matchers)      | matchersのどれかにマッチする値が発行されればpass   |
| emitsInOrder(matchers)    | matchersにマッチする値が順番通りに発行されればpass |
| emitsThrough(matcher)     | matcherに一致する値が一回以上発行されればpass      |
| mayEmitMultiple(matcher)  | 常にpass。mayEmitと異なり、複数回マッチする                                           |
| neverEmits(matcher)       | matcherに一致する値が発行されなければpass          |
| emitsInAnyOrder(matchers) | matchersにマッチする値が発行されればpass           |
    
## Throws

| matcher                           |                                      |
| --------------------------------- | ------------------------------------ |
| throwsA(matcher)                  | 関数やFeatureが例外をthrowすればpass |
| throwsArgumentError               | throw ArgumentError                  |
| throwsConcurrentModificationError | throw ConcurrentModificationError    |
| throwsCyclicInitializationError   | throw CyclicInitializationError      |
| throwsException                   | throw Exception                      |
| throwsFormatException             | throw FormatException                |
| throwsNoSuchMethodError           | throw NoSuchMethodError              |
| throwsNullThrownError             | throw NullThrownError                |
| throwsRangeError                  | throw RangeError                     |
| throwsStateError                  | throw StateError                     |
| throwsUnimplementedError          | throw UnimplementedError             |
| throwsUnsupportedError            | throw UnsupportedError               |
    
## Error

| matcher                       |                                      |
| ----------------------------- | ------------------------------------ |
| isArgumentError               | item is ArgumentError                |
| isCastError                   | item is CastError                    |
| isConcurrentModificationError | item is ConcurrentModificationError  |
| isCyclicInitializationError   | item is CyclicInitializationError    |
| isException                   | item is Exception                    |
| isFormatException             | item is FormatException              |
| isNoSuchMethodError           | item is NoSuchMethodError            |
| isNullThrownError             | item is NullThrownError              |
| isRangeError                  | item is RangeError                   |
| isStateError                  | item is StateError                   |
| isUnimplementedError          | item is UnimplementedError           |
| isUnsupportedError            | item is UnsupportedError             |

## 参考リンク

[dart\-lang/test: A library for writing unit tests in Dart\.](https://github.com/dart-lang/test)
[dart\-lang/matcher: A declarative API for specifying expectations\.](https://github.com/dart-lang/matcher)
[matcher library \- Dart API](https://pub.dev/documentation/matcher/latest/matcher/matcher-library.html)