## 0.6.2-wip

## 0.6.1

* Drop support for null unsafe Dart, bump SDK constraint to `3.0.0`.
* Make some implementation classes `final`. These classes were never intended to
  be extended or implemented. `Metadata`, `PlatformSelector`, `RemoteListener`,
  `Runtime`, `StackTraceFormatter`, `SuitePlatform`, `RemoteException`,
  `TestHandle`, `OutstandingWork`, `OutsideTestException`, `OnPlatform`,
  `Retry`, `Skip`, `Tags`, `TestOn`, `Timeout`.
* Mark an implementation class `interface`: `StackTraceMapper`.
* Change the `Compiler` class into an `enum`.
* Make `Fake` a `mixin class`.
* Allow the latest analyzer (6.x.x).

## 0.6.0

* Remove the `package:test_api/expect.dart' library. `test` will export from
  `package:matcher` directly.
* Fix compatibility with wasm number semantics.

## 0.5.2

* Remove deprecation for the `scaffolding.dart` and `backend.dart` libraries.
* Export `registerException` from the `scaffolding.dart` library.

## 0.5.1

* Handle a missing `'compiler'` value when running a test compiled against a
  newer `test_api` than the runner back end is using. The expectation was that
  the json protocol is only used across packages compatible with the same major
  version of the `test_api` package, but `flutter test` does not check the
  version of packages in the pub solve for user test code.

## 0.5.0

* Add `Compiler` class, exposed through `backend.dart`.
* Support compiler identifiers in platform selectors.
* Add `compiler` field to `SuitePlatform`. This will become required in the next
  major release.
* **BREAKING** Add required `defaultCompiler` and `supportedCompilers` fields
  to `Runtime`.
* Add `package:test_api/hooks_testing.dart` library for writing tests against
  code that uses `package:test_api/hooks.dart`.
* **BREAKING** Remove `ErrorFormatter`, `expectAsync`,  `throws`, and `Throws`
  from `package:test_api/test_api.dart`.

## 0.4.18

* Don't run `tearDown` until the test body and outstanding work is complete,
  even if the test has already failed.

## 0.4.17

* Deprecate `throwsNullThrownError`, use `throwsA(isA<TypeError>())` instead.
  The implementation has been changed to ease migrations.
* Deprecate `throwsCyclicInitializationError` and replace the implementation
  with `Throws(TypeMatcher<Error>())`. The specific exception no longer exists
  and there is no guarantee about what type of error will be thrown.

## 0.4.16

* Add the `experimental-chrome-wasm` runtime. This is very unstable and will
  eventually be deleted, to be replaced by a `--compiler` flag. See
  https://github.com/dart-lang/test/issues/1776 for more information on future
  plans
* Add `isWasm` field to `Runtime` (defaults to `false`).

## 0.4.15

* Expand the pubspec description.
* Support `package:matcher` version `0.12.13`.

## 0.4.14

* Require Dart >= 2.18.0
* Support the latest `package:analyzer`.

## 0.4.13

* Fix `printOnFailure` output to be associated with the correct test.

## 0.4.12

* Internal cleanup.

## 0.4.11

* Support the latest version of `package:matcher`.

## 0.4.10

* Add `Target` to restrict `TestOn` annotation to library level.

## 0.4.9

* Add `ignoreTimeouts` option to `Suite`, which disables all timeouts for all
  tests in that suite.

## 0.4.8

* `TestFailure` implements `Exception` for compatibility with
  `only_throw_exceptions`.

## 0.4.7

* Remove logging about enabling the chain-stack-traces flag from the invoker.

## 0.4.6

* Give a better exception when using `markTestSkipped` outside of a test.
* Format stack traces if a formatter is available when serializing tests
  and groups from the remote listener.

## 0.4.5

* Add defaulting for older test backends that don't pass a configuration for
  the `allow_duplicate_test_names` parameter to the remote listener.

## 0.4.4

* Allow disabling duplicate test or group names in the `Declarer`.

## 0.4.3

* Use the latest `package:matcher`.

## 0.4.2

* Update `analyzer` constraint to `>=1.5.0 <3.0.0`.

## 0.4.1

* Give a better error when `printOnFailure` is called from outside a test
  zone.

## 0.4.0

* Add libraries `scaffolding.dart`, and `expect.dart` to allow importing as
  subset of the normal surface area.
* Add new APIs in `hooks.dart` to allow writing custom expectation frameworks
  which integrate with the test runner.
* Add examples to `throwsA` and make top-level `throws...` matchers refer to it.
* Disable stack trace chaining by default.
* Fix `expectAsync` function type checks.
* Add `RemoteException`, `RemoteListener`, `StackTraceFormatter`, and
  `StackTraceMapper` to `backend.dart`.
* **Breaking** remove `Runtime.phantomJS`
* **Breaking** Add callback to get the suite channel in the `beforeLoad`
  callback of `RemoteListener.start`. This is now used in place of using zones
  to communicate the value.

## 0.3.0

* **Breaking** `TestException.message` is now nullable.
  * Fixes handling of `null` messages in remote exceptions.

## 0.2.20

* Fix some strong null safety mode errors in the original migration.

## 0.2.19

* Stable release for null safety.

## 0.2.19-nullsafety.7

* Expand upper bound constraints for some null safe migrated packages.

## 0.2.19-nullsafety.6

* Fix `spawnHybridUri` to respect language versioning of the spawned uri.

## 0.2.19-nullsafety.5

* Update SDK constraints to `>=2.12.0-0 <3.0.0` based on beta release
  guidelines.

## 0.2.19-nullsafety.4

* Allow prerelease versions of the 2.12 sdk.

## 0.2.19-nullsafety.3

* Add capability to filter to a single exact test name in `Declarer`.
* Add `markTestSkipped` API.

## 0.2.19-nullsafety.2

* Allow `2.10` stable and `2.11.0-dev` SDKs.
* Annotate the classes used as annotations to restrict their usage to library
  level.

## 0.2.19-nullsafety

* Migrate to NNBD.
  * The vast majority of changes are intended to express the pre-existing
    behavior of the code regarding to handling of nulls.
  * **Breaking Change**: `GroupEntry.name` is no longer nullable, the root
    group now has the empty string as its name.
* Add the `Fake` class, available through `package:test_api/fake.dart`.  This
  was previously part of the Mockito package, but with null safety it is useful
  enough that we decided to make it available through `package:test`.  In a
  future release it will be made available directly through
  `package:test_api/test_api.dart` (and hence through
  `package:test_core/test_core.dart` and `package:test/test.dart`).

## 0.2.18+1 (Backport)

* Fix `spawnHybridUri` to respect language versioning of the spawned uri.

## 0.2.18

* Update to `matcher` version `0.12.9`.

## 0.2.17

* Add `languageVersionComment` on the `MetaData` class. This should only be
  present for test suites.

## 0.2.16

* Deprecate `LiveTestController.liveTest`, the `LiveTestController` instance now
  implements `LiveTest` and can be used directly.

## 0.2.15

* Cancel any StreamQueue that is created as a part of a stream matcher once it
  is done matching.
  * This fixes a bug where using a matcher on a custom stream controller and
    then awaiting the `close()` method on that controller would hang.
* Avoid causing the test runner to hang if there is a timeout during a
  `tearDown` callback following a failing test case.

## 0.2.14

* Bump minimum SDK to `2.4.0` for safer usage of for-loop elements.

## 0.2.13

* Work around a bug in the `2.3.0` SDK by avoiding for-loop elements at the top
  level.

## 0.2.12

* Link to docs on setting timeout when a test times out with the default
  duration.
* No longer directly depend on `package:pedantic`.

## 0.2.11

* Extend the timeout for synthetic tests, e.g. `tearDownAll`.

## 0.2.10

* Update to latest `package:matcher`. Improves output for instances of private
  classes.

## 0.2.9

* Treat non-solo tests as skipped so they are properly reported.

## 0.2.8

* Remove logic which accounted for a race condition in state change. The logic
  was required because `package:sse` used to not guarantee order. This is no
  longer the case.

## 0.2.7

* Prepare for upcoming `Stream<List<int>>` changes in the Dart SDK.
* Mark `package:test_api` as deprecated to prevent accidental use.

## 0.2.6

* Don't swallow exceptions from callbacks in `expectAsync*`.
* Internal cleanup - fix lints.
* Fixed a race condition that caused tests to occasionally fail during
  `tearDownAll` with the message `(tearDownAll) - did not complete [E]`.

## 0.2.5

* Expose the  `Metadata`, `PlatformSelector`, `Runtime`, and `SuitePlatform`
  classes publicly through a new `backend.dart` import.

## 0.2.4

* Allow `stream_channel` version `2.0.0`.

## 0.2.3

* Update to matcher version `0.12.5`.

## 0.2.2

* Require Dart SDK `>=2.1.0`.

## 0.2.1

* Add `remote_listener.dart` and `suite_channel_manager.dart`.

## 0.2.0

* Remove "runner" extensions.


## 0.1.1

* Update `stack_trace_formatter` to fold `test_api` frames by default.


## 0.1.0

* Initial release of `test_api`. Provides the basic API for writing tests and
  touch points for implementing a custom test runner.
