diff --git a/__tests__/__outputs__/provider-test-results.md b/__tests__/__outputs__/provider-test-results.md
new file mode 100644
index 0000000..e69aee2
--- /dev/null
+++ b/__tests__/__outputs__/provider-test-results.md
@@ -0,0 +1,473 @@
+
+## fixtures/external/flutter/provider-test-results.json ❌
+**269** tests were completed in **0ms** with **268** passed, **1** failed and **0** skipped.
+|Test suite|Passed|Failed|Skipped|Time|
+|:---|---:|---:|---:|---:|
+|[test/builder_test.dart](#r0s0)|24✔️|||402ms|
+|[test/change_notifier_provider_test.dart](#r0s1)|10✔️|||306ms|
+|[test/consumer_test.dart](#r0s2)|18✔️|||340ms|
+|[test/context_test.dart](#r0s3)|31✔️|||698ms|
+|[test/future_provider_test.dart](#r0s4)|10✔️|||305ms|
+|[test/inherited_provider_test.dart](#r0s5)|81✔️|||1.117s|
+|[test/listenable_provider_test.dart](#r0s6)|16✔️|||353ms|
+|[test/listenable_proxy_provider_test.dart](#r0s7)|12✔️|||373ms|
+|[test/multi_provider_test.dart](#r0s8)|3✔️|||198ms|
+|[test/provider_test.dart](#r0s9)|11✔️|||306ms|
+|[test/proxy_provider_test.dart](#r0s10)|16✔️|||438ms|
+|[test/reassemble_test.dart](#r0s11)|3✔️|||221ms|
+|[test/selector_test.dart](#r0s12)|17✔️|||364ms|
+|[test/stateful_provider_test.dart](#r0s13)|4✔️|||254ms|
+|[test/stream_provider_test.dart](#r0s14)|8✔️|||282ms|
+|[test/value_listenable_provider_test.dart](#r0s15)|4✔️|1❌||327ms|
+### test/builder_test.dart ✔️
+**24** tests were completed in **402ms** with **24** passed, **0** failed and **0** skipped.
+
+**ChangeNotifierProvider**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|ChangeNotifierProvider default|189ms|
+|✔️|ChangeNotifierProvider .value|10ms|
+
+**ListenableProvider**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|ListenableProvider default|9ms|
+|✔️|ListenableProvider .value|16ms|
+
+**Provider**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|Provider default|11ms|
+|✔️|Provider .value|8ms|
+
+**ProxyProvider**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|ProxyProvider 0|11ms|
+|✔️|ProxyProvider 1|10ms|
+|✔️|ProxyProvider 2|8ms|
+|✔️|ProxyProvider 3|10ms|
+|✔️|ProxyProvider 4|9ms|
+|✔️|ProxyProvider 5|9ms|
+|✔️|ProxyProvider 6|9ms|
+
+**MultiProvider**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|MultiProvider with 1 ChangeNotifierProvider default|9ms|
+|✔️|MultiProvider with 2 ChangeNotifierProvider default|9ms|
+|✔️|MultiProvider with ListenableProvider default|12ms|
+|✔️|MultiProvider with Provider default|8ms|
+|✔️|MultiProvider with ProxyProvider0|7ms|
+|✔️|MultiProvider with ProxyProvider1|9ms|
+|✔️|MultiProvider with ProxyProvider2|7ms|
+|✔️|MultiProvider with ProxyProvider3|9ms|
+|✔️|MultiProvider with ProxyProvider4|9ms|
+|✔️|MultiProvider with ProxyProvider5|7ms|
+|✔️|MultiProvider with ProxyProvider6|7ms|
+### test/change_notifier_provider_test.dart ✔️
+**10** tests were completed in **306ms** with **10** passed, **0** failed and **0** skipped.
+
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|Use builder property, not child|10ms|
+
+**ChangeNotifierProvider**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|ChangeNotifierProvider value|185ms|
+|✔️|ChangeNotifierProvider builder|18ms|
+|✔️|ChangeNotifierProvider builder1|12ms|
+|✔️|ChangeNotifierProvider builder2|12ms|
+|✔️|ChangeNotifierProvider builder3|19ms|
+|✔️|ChangeNotifierProvider builder4|14ms|
+|✔️|ChangeNotifierProvider builder5|15ms|
+|✔️|ChangeNotifierProvider builder6|11ms|
+|✔️|ChangeNotifierProvider builder0|10ms|
+### test/consumer_test.dart ✔️
+**18** tests were completed in **340ms** with **18** passed, **0** failed and **0** skipped.
+
+**consumer**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|consumer obtains value from Provider|181ms|
+|✔️|consumer crashed with no builder|11ms|
+|✔️|consumer can be used inside MultiProvider|16ms|
+
+**consumer2**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|consumer2 obtains value from Provider|22ms|
+|✔️|consumer2 crashed with no builder|8ms|
+|✔️|consumer2 can be used inside MultiProvider|9ms|
+
+**consumer3**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|consumer3 obtains value from Provider|9ms|
+|✔️|consumer3 crashed with no builder|7ms|
+|✔️|consumer3 can be used inside MultiProvider|8ms|
+
+**consumer4**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|consumer4 obtains value from Provider|8ms|
+|✔️|consumer4 crashed with no builder|6ms|
+|✔️|consumer4 can be used inside MultiProvider|8ms|
+
+**consumer5**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|consumer5 obtains value from Provider|8ms|
+|✔️|consumer5 crashed with no builder|6ms|
+|✔️|consumer5 can be used inside MultiProvider|9ms|
+
+**consumer6**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|consumer6 obtains value from Provider|8ms|
+|✔️|consumer6 crashed with no builder|8ms|
+|✔️|consumer6 can be used inside MultiProvider|8ms|
+### test/context_test.dart ✔️
+**31** tests were completed in **698ms** with **31** passed, **0** failed and **0** skipped.
+
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|watch in layoutbuilder|179ms|
+|✔️|select in layoutbuilder|12ms|
+|✔️|cannot select in listView|138ms|
+|✔️|watch in listView|33ms|
+|✔️|watch in gridView|21ms|
+|✔️|clears select dependencies for all dependents|19ms|
+
+**BuildContext**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|BuildContext internal selected value is updated|32ms|
+|✔️|BuildContext create can use read without being lazy|11ms|
+|✔️|BuildContext watch can be used inside InheritedProvider.update|10ms|
+|✔️|BuildContext select doesn't fail if it loads a provider that depends on other providers|9ms|
+|✔️|BuildContext don't call old selectors if the child rebuilds individually|21ms|
+|✔️|BuildContext selects throws inside click handlers|40ms|
+|✔️|BuildContext select throws if try to read dynamic|9ms|
+|✔️|BuildContext select throws ProviderNotFoundException|9ms|
+|✔️|BuildContext select throws if watch called inside the callback from build|6ms|
+|✔️|BuildContext select throws if read called inside the callback from build|9ms|
+|✔️|BuildContext select throws if select called inside the callback from build|8ms|
+|✔️|BuildContext select throws if read called inside the callback on dependency change|10ms|
+|✔️|BuildContext select throws if watch called inside the callback on dependency change|17ms|
+|✔️|BuildContext select throws if select called inside the callback on dependency change|9ms|
+|✔️|BuildContext can call read inside didChangeDependencies|9ms|
+|✔️|BuildContext select cannot be called inside didChangeDependencies|6ms|
+|✔️|BuildContext select in initState throws|6ms|
+|✔️|BuildContext watch in initState throws|10ms|
+|✔️|BuildContext read in initState works|6ms|
+|✔️|BuildContext consumer can be removed and selector stops to be called|7ms|
+|✔️|BuildContext context.select deeply compares maps|15ms|
+|✔️|BuildContext context.select deeply compares lists|8ms|
+|✔️|BuildContext context.select deeply compares iterables|8ms|
+|✔️|BuildContext context.select deeply compares sets|11ms|
+|✔️|BuildContext context.watch listens to value changes|10ms|
+### test/future_provider_test.dart ✔️
+**10** tests were completed in **305ms** with **10** passed, **0** failed and **0** skipped.
+
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|works with MultiProvider|184ms|
+|✔️|(catchError) previous future completes after transition is no-op|16ms|
+|✔️|previous future completes after transition is no-op|15ms|
+|✔️|transition from future to future preserve state|12ms|
+|✔️|throws if future has error and catchError is missing|24ms|
+|✔️|calls catchError if present and future has error|21ms|
+|✔️|works with null|14ms|
+|✔️|create and dispose future with builder|12ms|
+|✔️|FutureProvider() crashes if builder is null|4ms|
+
+**FutureProvider()**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|FutureProvider() crashes if builder is null|3ms|
+### test/inherited_provider_test.dart ✔️
+**81** tests were completed in **1.117s** with **81** passed, **0** failed and **0** skipped.
+
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|regression test #377|167ms|
+|✔️|rebuild on dependency flags update|15ms|
+|✔️|properly update debug flags if a create triggers another deferred create|9ms|
+|✔️|properly update debug flags if a create triggers another deferred create|8ms|
+|✔️|properly update debug flags if an update triggers another create/update|7ms|
+|✔️|properly update debug flags if a create triggers another create/update|8ms|
+|✔️|Provider.of(listen: false) outside of build works when it loads a provider|22ms|
+|✔️|new value is available in didChangeDependencies|26ms|
+|✔️|builder receives the current value and updates independently from `update`|16ms|
+|✔️|builder can _not_ rebuild when provider updates|8ms|
+|✔️|builder rebuilds if provider is recreated|9ms|
+|✔️|provider.of throws if listen:true outside of the widget tree|23ms|
+|✔️|InheritedProvider throws if no child is provided with default constructor|14ms|
+|✔️|InheritedProvider throws if no child is provided with value constructor|8ms|
+|✔️|DeferredInheritedProvider throws if no child is provided with default constructor|15ms|
+|✔️|DeferredInheritedProvider throws if no child is provided with value constructor|7ms|
+|✔️|startListening markNeedsNotifyDependents|7ms|
+|✔️|InheritedProvider can be subclassed|8ms|
+|✔️|DeferredInheritedProvider can be subclassed|7ms|
+|✔️|can be used with MultiProvider|8ms|
+|✔️|throw if the widget ctor changes|8ms|
+|✔️|InheritedProvider lazy loading can be disabled|6ms|
+|✔️|InheritedProvider.value lazy loading can be disabled|9ms|
+|✔️|InheritedProvider subclass don't have to specify default lazy value|7ms|
+|✔️|DeferredInheritedProvider lazy loading can be disabled|7ms|
+|✔️|DeferredInheritedProvider.value lazy loading can be disabled|7ms|
+|✔️|selector|14ms|
+|✔️|can select multiple types from same provider|9ms|
+|✔️|can select same type on two different providers|8ms|
+|✔️|can select same type twice on same provider|10ms|
+|✔️|Provider.of has a proper error message if context is null|6ms|
+
+**diagnostics**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|diagnostics InheritedProvider.value|11ms|
+|✔️|diagnostics InheritedProvider doesn't break lazy loading|7ms|
+|✔️|diagnostics InheritedProvider show if listening|7ms|
+|✔️|diagnostics DeferredInheritedProvider.value|6ms|
+|✔️|diagnostics DeferredInheritedProvider|16ms|
+
+**InheritedProvider.value()**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|InheritedProvider.value() markNeedsNotifyDependents during startListening is noop|8ms|
+|✔️|InheritedProvider.value() startListening called again when create returns new value|27ms|
+|✔️|InheritedProvider.value() startListening|19ms|
+|✔️|InheritedProvider.value() stopListening not called twice if rebuild doesn't have listeners|16ms|
+|✔️|InheritedProvider.value() removeListener cannot be null|22ms|
+|✔️|InheritedProvider.value() pass down current value|17ms|
+|✔️|InheritedProvider.value() default updateShouldNotify|8ms|
+|✔️|InheritedProvider.value() custom updateShouldNotify|32ms|
+
+**InheritedProvider()**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|InheritedProvider() hasValue|16ms|
+|✔️|InheritedProvider() provider calls update if rebuilding only due to didChangeDependencies|9ms|
+|✔️|InheritedProvider() provider notifying dependents doesn't call update|11ms|
+|✔️|InheritedProvider() update can call Provider.of with listen:true|7ms|
+|✔️|InheritedProvider() update lazy loaded can call Provider.of with listen:true|10ms|
+|✔️|InheritedProvider() markNeedsNotifyDependents during startListening is noop|22ms|
+|✔️|InheritedProvider() update can obtain parent of the same type than self|15ms|
+|✔️|InheritedProvider() _debugCheckInvalidValueType|22ms|
+|✔️|InheritedProvider() startListening|18ms|
+|✔️|InheritedProvider() startListening called again when create returns new value|20ms|
+|✔️|InheritedProvider() stopListening not called twice if rebuild doesn't have listeners|18ms|
+|✔️|InheritedProvider() removeListener cannot be null|16ms|
+|✔️|InheritedProvider() fails if initialValueBuilder calls inheritFromElement/inheritFromWiggetOfExactType|17ms|
+|✔️|InheritedProvider() builder is called on every rebuild and after a dependency change|11ms|
+|✔️|InheritedProvider() builder with no updateShouldNotify use ==|8ms|
+|✔️|InheritedProvider() builder calls updateShouldNotify callback|8ms|
+|✔️|InheritedProvider() initialValue is transmitted to valueBuilder|8ms|
+|✔️|InheritedProvider() calls builder again if dependencies change|22ms|
+|✔️|InheritedProvider() exposes initialValue if valueBuilder is null|20ms|
+|✔️|InheritedProvider() call dispose on unmount|22ms|
+|✔️|InheritedProvider() builder unmount, dispose not called if value never read|11ms|
+|✔️|InheritedProvider() call dispose after new value|9ms|
+|✔️|InheritedProvider() valueBuilder works without initialBuilder|11ms|
+|✔️|InheritedProvider() calls initialValueBuilder lazily once|7ms|
+|✔️|InheritedProvider() throws if both builder and initialBuilder are missing|5ms|
+
+**DeferredInheritedProvider.value()**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|DeferredInheritedProvider.value() hasValue|6ms|
+|✔️|DeferredInheritedProvider.value() startListening|9ms|
+|✔️|DeferredInheritedProvider.value() stopListening cannot be null|9ms|
+|✔️|DeferredInheritedProvider.value() startListening doesn't need setState if already initialized|8ms|
+|✔️|DeferredInheritedProvider.value() setState without updateShouldNotify|8ms|
+|✔️|DeferredInheritedProvider.value() setState with updateShouldNotify|9ms|
+|✔️|DeferredInheritedProvider.value() startListening never leave the widget uninitialized|8ms|
+|✔️|DeferredInheritedProvider.value() startListening called again on controller change|10ms|
+
+**DeferredInheritedProvider()**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|DeferredInheritedProvider() create can't call inherited widgets|7ms|
+|✔️|DeferredInheritedProvider() creates the value lazily|7ms|
+|✔️|DeferredInheritedProvider() dispose|7ms|
+|✔️|DeferredInheritedProvider() dispose no-op if never built|7ms|
+### test/listenable_provider_test.dart ✔️
+**16** tests were completed in **353ms** with **16** passed, **0** failed and **0** skipped.
+
+**ListenableProvider**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|ListenableProvider works with MultiProvider|173ms|
+|✔️|ListenableProvider asserts that the created notifier can have listeners|12ms|
+|✔️|ListenableProvider don't listen again if listenable instance doesn't change|12ms|
+|✔️|ListenableProvider works with null (default)|7ms|
+|✔️|ListenableProvider works with null (create)|7ms|
+|✔️|ListenableProvider stateful create called once|11ms|
+|✔️|ListenableProvider dispose called on unmount|13ms|
+|✔️|ListenableProvider dispose can be null|8ms|
+|✔️|ListenableProvider changing listenable rebuilds descendants|12ms|
+|✔️|ListenableProvider rebuilding with the same provider don't rebuilds descendants|11ms|
+|✔️|ListenableProvider notifylistener rebuilds descendants|9ms|
+
+**ListenableProvider value constructor**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|ListenableProvider value constructor pass down key|17ms|
+|✔️|ListenableProvider value constructor changing the Listenable instance rebuilds dependents|29ms|
+
+**ListenableProvider stateful constructor**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|ListenableProvider stateful constructor called with context|8ms|
+|✔️|ListenableProvider stateful constructor pass down key|20ms|
+|✔️|ListenableProvider stateful constructor throws if create is null|4ms|
+### test/listenable_proxy_provider_test.dart ✔️
+**12** tests were completed in **373ms** with **12** passed, **0** failed and **0** skipped.
+
+**ListenableProxyProvider**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|ListenableProxyProvider throws if update is missing|43ms|
+|✔️|ListenableProxyProvider asserts that the created notifier has no listener|177ms|
+|✔️|ListenableProxyProvider asserts that the created notifier has no listener after rebuild|18ms|
+|✔️|ListenableProxyProvider rebuilds dependendents when listeners are called|20ms|
+|✔️|ListenableProxyProvider update returning a new Listenable disposes the previously created value and update dependents|25ms|
+|✔️|ListenableProxyProvider disposes of created value|13ms|
+
+**ListenableProxyProvider variants**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|ListenableProxyProvider variants ListenableProxyProvider|13ms|
+|✔️|ListenableProxyProvider variants ListenableProxyProvider2|9ms|
+|✔️|ListenableProxyProvider variants ListenableProxyProvider3|9ms|
+|✔️|ListenableProxyProvider variants ListenableProxyProvider4|17ms|
+|✔️|ListenableProxyProvider variants ListenableProxyProvider5|12ms|
+|✔️|ListenableProxyProvider variants ListenableProxyProvider6|17ms|
+### test/multi_provider_test.dart ✔️
+**3** tests were completed in **198ms** with **3** passed, **0** failed and **0** skipped.
+
+**MultiProvider**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|MultiProvider throw if providers is null|30ms|
+|✔️|MultiProvider MultiProvider children can only access parent providers|160ms|
+|✔️|MultiProvider MultiProvider.providers with ignored child|8ms|
+### test/provider_test.dart ✔️
+**11** tests were completed in **306ms** with **11** passed, **0** failed and **0** skipped.
+
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|works with MultiProvider|172ms|
+
+**Provider.of**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|Provider.of throws if T is dynamic|26ms|
+|✔️|Provider.of listen defaults to true when building widgets|13ms|
+|✔️|Provider.of listen defaults to false outside of the widget tree|9ms|
+|✔️|Provider.of listen:false doesn't trigger rebuild|10ms|
+|✔️|Provider.of listen:true outside of the widget tree throws|11ms|
+
+**Provider**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|Provider throws if the provided value is a Listenable/Stream|28ms|
+|✔️|Provider debugCheckInvalidValueType can be disabled|9ms|
+|✔️|Provider simple usage|9ms|
+|✔️|Provider throws an error if no provider found|11ms|
+|✔️|Provider update should notify|8ms|
+### test/proxy_provider_test.dart ✔️
+**16** tests were completed in **438ms** with **16** passed, **0** failed and **0** skipped.
+
+**ProxyProvider**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|ProxyProvider throws if the provided value is a Listenable/Stream|209ms|
+|✔️|ProxyProvider debugCheckInvalidValueType can be disabled|13ms|
+|✔️|ProxyProvider create creates initial value|23ms|
+|✔️|ProxyProvider consume another providers|18ms|
+|✔️|ProxyProvider rebuild descendants if value change|13ms|
+|✔️|ProxyProvider call dispose when unmounted with the latest result|11ms|
+|✔️|ProxyProvider don't rebuild descendants if value doesn't change|12ms|
+|✔️|ProxyProvider pass down updateShouldNotify|19ms|
+|✔️|ProxyProvider works with MultiProvider|16ms|
+|✔️|ProxyProvider update callback can trigger descendants setState synchronously|24ms|
+|✔️|ProxyProvider throws if update is null|7ms|
+
+**ProxyProvider variants**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|ProxyProvider variants ProxyProvider2|18ms|
+|✔️|ProxyProvider variants ProxyProvider3|16ms|
+|✔️|ProxyProvider variants ProxyProvider4|9ms|
+|✔️|ProxyProvider variants ProxyProvider5|20ms|
+|✔️|ProxyProvider variants ProxyProvider6|10ms|
+### test/reassemble_test.dart ✔️
+**3** tests were completed in **221ms** with **3** passed, **0** failed and **0** skipped.
+
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|ReassembleHandler|194ms|
+|✔️|unevaluated create|11ms|
+|✔️|unevaluated create|16ms|
+### test/selector_test.dart ✔️
+**17** tests were completed in **364ms** with **17** passed, **0** failed and **0** skipped.
+
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|asserts that builder/selector are not null|32ms|
+|✔️|Deep compare maps by default|158ms|
+|✔️|Deep compare iterables by default|9ms|
+|✔️|Deep compare sets by default|12ms|
+|✔️|Deep compare lists by default|14ms|
+|✔️|custom shouldRebuid|11ms|
+|✔️|passes `child` and `key`|13ms|
+|✔️|calls builder if the callback changes|14ms|
+|✔️|works with MultiProvider|12ms|
+|✔️|don't call builder again if it rebuilds but selector returns the same thing|9ms|
+|✔️|call builder again if it rebuilds abd selector returns the a different variable|9ms|
+|✔️|Selector|15ms|
+|✔️|Selector2|9ms|
+|✔️|Selector3|8ms|
+|✔️|Selector4|9ms|
+|✔️|Selector5|19ms|
+|✔️|Selector6|11ms|
+### test/stateful_provider_test.dart ✔️
+**4** tests were completed in **254ms** with **4** passed, **0** failed and **0** skipped.
+
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|asserts|6ms|
+|✔️|works with MultiProvider|203ms|
+|✔️|calls create only once|27ms|
+|✔️|dispose|18ms|
+### test/stream_provider_test.dart ✔️
+**8** tests were completed in **282ms** with **8** passed, **0** failed and **0** skipped.
+
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|works with MultiProvider|191ms|
+|✔️|transition from stream to stream preserve state|16ms|
+|✔️|throws if stream has error and catchError is missing|22ms|
+|✔️|calls catchError if present and stream has error|20ms|
+|✔️|works with null|13ms|
+|✔️|StreamProvider() crashes if builder is null|5ms|
+
+**StreamProvider()**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|StreamProvider() create and dispose stream with builder|11ms|
+|✔️|StreamProvider() crashes if builder is null|4ms|
+### test/value_listenable_provider_test.dart ❌
+**5** tests were completed in **327ms** with **4** passed, **1** failed and **0** skipped.
+
+**valueListenableProvider**
+|Result|Test|Time|
+|:---:|:---|---:|
+|✔️|valueListenableProvider rebuilds when value change|200ms|
+|✔️|valueListenableProvider don't rebuild dependents by default|26ms|
+|✔️|valueListenableProvider pass keys|10ms|
+|✔️|valueListenableProvider don't listen again if stream instance doesn't change|22ms|
+|❌|valueListenableProvider pass updateShouldNotify|69ms|
\ No newline at end of file
diff --git a/__tests__/__snapshots__/dart-json.test.ts.snap b/__tests__/__snapshots__/dart-json.test.ts.snap
index 71c89e1..475a46f 100644
--- a/__tests__/__snapshots__/dart-json.test.ts.snap
+++ b/__tests__/__snapshots__/dart-json.test.ts.snap
@@ -22,14 +22,14 @@ TestRunResult {
"tests": Array [
TestCaseResult {
"error": Object {
+ "details": "package:test_api expect
+test\\\\main_test.dart 13:9 main...
+",
"line": 13,
"message": "Expected: <2>
Actual: <1>
",
"path": "test/main_test.dart",
- "stackTrace": "package:test_api expect
-test\\\\main_test.dart 13:9 main...
-",
},
"name": "Test 1 Test 1.1 Failing test",
"result": "failed",
@@ -37,12 +37,12 @@ test\\\\main_test.dart 13:9 main...
},
TestCaseResult {
"error": Object {
+ "details": "package:darttest/main.dart 2:3 throwError
+test\\\\main_test.dart 17:9 main...
+",
"line": 2,
"message": "Exception: Some error",
"path": "lib/main.dart",
- "stackTrace": "package:darttest/main.dart 2:3 throwError
-test\\\\main_test.dart 17:9 main...
-",
},
"name": "Test 1 Test 1.1 Exception in target unit",
"result": "failed",
@@ -55,11 +55,11 @@ test\\\\main_test.dart 17:9 main...
"tests": Array [
TestCaseResult {
"error": Object {
+ "details": "test\\\\main_test.dart 24:7 main..
+",
"line": 24,
"message": "Exception: Some error",
"path": "test/main_test.dart",
- "stackTrace": "test\\\\main_test.dart 24:7 main..
-",
},
"name": "Test 2 Exception in test",
"result": "failed",
@@ -78,11 +78,11 @@ test\\\\main_test.dart 17:9 main...
"tests": Array [
TestCaseResult {
"error": Object {
+ "details": "dart:isolate _RawReceivePortImpl._handleMessage
+",
"line": 5,
"message": "TimeoutException after 0:00:00.000001: Test timed out after 0 seconds.",
"path": "test/second_test.dart",
- "stackTrace": "dart:isolate _RawReceivePortImpl._handleMessage
-",
},
"name": "Timeout test",
"result": "failed",
@@ -104,3 +104,1946 @@ test\\\\main_test.dart 17:9 main...
"totalTime": 3760,
}
`;
+
+exports[`dart-json tests report from rrousselGit/provider test results matches snapshot 1`] = `
+TestRunResult {
+ "path": "fixtures/external/flutter/provider-test-results.json",
+ "suites": Array [
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "valueListenableProvider",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "valueListenableProvider rebuilds when value change",
+ "result": "success",
+ "time": 200,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "valueListenableProvider don't rebuild dependents by default",
+ "result": "success",
+ "time": 26,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "valueListenableProvider pass keys",
+ "result": "success",
+ "time": 10,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "valueListenableProvider don't listen again if stream instance doesn't change",
+ "result": "success",
+ "time": 22,
+ },
+ TestCaseResult {
+ "error": Object {
+ "details": "══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞════════════════════════════════════════════════════
+The following TestFailure object was thrown running a test:
+ Expected: <2>
+ Actual: <1>
+Unexpected number of calls
+
+When the exception was thrown, this was the stack:
+#0 fail (package:test_api/src/frontend/expect.dart:155:31)
+#1 _expect (package:test_api/src/frontend/expect.dart:150:3)
+#2 expect (package:test_api/src/frontend/expect.dart:59:3)
+#3 VerificationResult.called (package:mockito/src/mock.dart:853:5)
+#4 main.. (file:///__w/provider/provider/test/value_listenable_provider_test.dart:112:34)
+
+
+(elided one frame from package:stack_trace)
+
+The test description was:
+ pass updateShouldNotify
+════════════════════════════════════════════════════════════════════════════════════════════════════",
+ "line": 94,
+ "message": "Test failed. See exception logs above.
+The test description was: pass updateShouldNotify",
+ "path": "test/value_listenable_provider_test.dart",
+ },
+ "name": "valueListenableProvider pass updateShouldNotify",
+ "result": "failed",
+ "time": 69,
+ },
+ ],
+ },
+ ],
+ "name": "test/value_listenable_provider_test.dart",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "ListenableProvider",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProvider works with MultiProvider",
+ "result": "success",
+ "time": 173,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProvider asserts that the created notifier can have listeners",
+ "result": "success",
+ "time": 12,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProvider don't listen again if listenable instance doesn't change",
+ "result": "success",
+ "time": 12,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProvider works with null (default)",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProvider works with null (create)",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProvider stateful create called once",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProvider dispose called on unmount",
+ "result": "success",
+ "time": 13,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProvider dispose can be null",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProvider changing listenable rebuilds descendants",
+ "result": "success",
+ "time": 12,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProvider rebuilding with the same provider don't rebuilds descendants",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProvider notifylistener rebuilds descendants",
+ "result": "success",
+ "time": 9,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "ListenableProvider value constructor",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProvider value constructor pass down key",
+ "result": "success",
+ "time": 17,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProvider value constructor changing the Listenable instance rebuilds dependents",
+ "result": "success",
+ "time": 29,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "ListenableProvider stateful constructor",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProvider stateful constructor called with context",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProvider stateful constructor pass down key",
+ "result": "success",
+ "time": 20,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProvider stateful constructor throws if create is null",
+ "result": "success",
+ "time": 4,
+ },
+ ],
+ },
+ ],
+ "name": "test/listenable_provider_test.dart",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "consumer",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "consumer obtains value from Provider",
+ "result": "success",
+ "time": 181,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "consumer crashed with no builder",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "consumer can be used inside MultiProvider",
+ "result": "success",
+ "time": 16,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "consumer2",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "consumer2 obtains value from Provider",
+ "result": "success",
+ "time": 22,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "consumer2 crashed with no builder",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "consumer2 can be used inside MultiProvider",
+ "result": "success",
+ "time": 9,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "consumer3",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "consumer3 obtains value from Provider",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "consumer3 crashed with no builder",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "consumer3 can be used inside MultiProvider",
+ "result": "success",
+ "time": 8,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "consumer4",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "consumer4 obtains value from Provider",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "consumer4 crashed with no builder",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "consumer4 can be used inside MultiProvider",
+ "result": "success",
+ "time": 8,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "consumer5",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "consumer5 obtains value from Provider",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "consumer5 crashed with no builder",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "consumer5 can be used inside MultiProvider",
+ "result": "success",
+ "time": 9,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "consumer6",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "consumer6 obtains value from Provider",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "consumer6 crashed with no builder",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "consumer6 can be used inside MultiProvider",
+ "result": "success",
+ "time": 8,
+ },
+ ],
+ },
+ ],
+ "name": "test/consumer_test.dart",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Use builder property, not child",
+ "result": "success",
+ "time": 10,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "ChangeNotifierProvider",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "ChangeNotifierProvider value",
+ "result": "success",
+ "time": 185,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ChangeNotifierProvider builder",
+ "result": "success",
+ "time": 18,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ChangeNotifierProvider builder1",
+ "result": "success",
+ "time": 12,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ChangeNotifierProvider builder2",
+ "result": "success",
+ "time": 12,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ChangeNotifierProvider builder3",
+ "result": "success",
+ "time": 19,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ChangeNotifierProvider builder4",
+ "result": "success",
+ "time": 14,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ChangeNotifierProvider builder5",
+ "result": "success",
+ "time": 15,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ChangeNotifierProvider builder6",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ChangeNotifierProvider builder0",
+ "result": "success",
+ "time": 10,
+ },
+ ],
+ },
+ ],
+ "name": "test/change_notifier_provider_test.dart",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "ChangeNotifierProvider",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "ChangeNotifierProvider default",
+ "result": "success",
+ "time": 189,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ChangeNotifierProvider .value",
+ "result": "success",
+ "time": 10,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "ListenableProvider",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProvider default",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProvider .value",
+ "result": "success",
+ "time": 16,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Provider",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Provider default",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Provider .value",
+ "result": "success",
+ "time": 8,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "ProxyProvider",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "ProxyProvider 0",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ProxyProvider 1",
+ "result": "success",
+ "time": 10,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ProxyProvider 2",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ProxyProvider 3",
+ "result": "success",
+ "time": 10,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ProxyProvider 4",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ProxyProvider 5",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ProxyProvider 6",
+ "result": "success",
+ "time": 9,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "MultiProvider",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "MultiProvider with 1 ChangeNotifierProvider default",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "MultiProvider with 2 ChangeNotifierProvider default",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "MultiProvider with ListenableProvider default",
+ "result": "success",
+ "time": 12,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "MultiProvider with Provider default",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "MultiProvider with ProxyProvider0",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "MultiProvider with ProxyProvider1",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "MultiProvider with ProxyProvider2",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "MultiProvider with ProxyProvider3",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "MultiProvider with ProxyProvider4",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "MultiProvider with ProxyProvider5",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "MultiProvider with ProxyProvider6",
+ "result": "success",
+ "time": 7,
+ },
+ ],
+ },
+ ],
+ "name": "test/builder_test.dart",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "MultiProvider",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "MultiProvider throw if providers is null",
+ "result": "success",
+ "time": 30,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "MultiProvider MultiProvider children can only access parent providers",
+ "result": "success",
+ "time": 160,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "MultiProvider MultiProvider.providers with ignored child",
+ "result": "success",
+ "time": 8,
+ },
+ ],
+ },
+ ],
+ "name": "test/multi_provider_test.dart",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with MultiProvider",
+ "result": "success",
+ "time": 191,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "transition from stream to stream preserve state",
+ "result": "success",
+ "time": 16,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if stream has error and catchError is missing",
+ "result": "success",
+ "time": 22,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls catchError if present and stream has error",
+ "result": "success",
+ "time": 20,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with null",
+ "result": "success",
+ "time": 13,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "StreamProvider() crashes if builder is null",
+ "result": "success",
+ "time": 5,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "StreamProvider()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "StreamProvider() create and dispose stream with builder",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "StreamProvider() crashes if builder is null",
+ "result": "success",
+ "time": 4,
+ },
+ ],
+ },
+ ],
+ "name": "test/stream_provider_test.dart",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "watch in layoutbuilder",
+ "result": "success",
+ "time": 179,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "select in layoutbuilder",
+ "result": "success",
+ "time": 12,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "cannot select in listView",
+ "result": "success",
+ "time": 138,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "watch in listView",
+ "result": "success",
+ "time": 33,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "watch in gridView",
+ "result": "success",
+ "time": 21,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "clears select dependencies for all dependents",
+ "result": "success",
+ "time": 19,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "BuildContext",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "BuildContext internal selected value is updated",
+ "result": "success",
+ "time": 32,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "BuildContext create can use read without being lazy",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "BuildContext watch can be used inside InheritedProvider.update",
+ "result": "success",
+ "time": 10,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "BuildContext select doesn't fail if it loads a provider that depends on other providers",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "BuildContext don't call old selectors if the child rebuilds individually",
+ "result": "success",
+ "time": 21,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "BuildContext selects throws inside click handlers",
+ "result": "success",
+ "time": 40,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "BuildContext select throws if try to read dynamic",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "BuildContext select throws ProviderNotFoundException",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "BuildContext select throws if watch called inside the callback from build",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "BuildContext select throws if read called inside the callback from build",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "BuildContext select throws if select called inside the callback from build",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "BuildContext select throws if read called inside the callback on dependency change",
+ "result": "success",
+ "time": 10,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "BuildContext select throws if watch called inside the callback on dependency change",
+ "result": "success",
+ "time": 17,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "BuildContext select throws if select called inside the callback on dependency change",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "BuildContext can call read inside didChangeDependencies",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "BuildContext select cannot be called inside didChangeDependencies",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "BuildContext select in initState throws",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "BuildContext watch in initState throws",
+ "result": "success",
+ "time": 10,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "BuildContext read in initState works",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "BuildContext consumer can be removed and selector stops to be called",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "BuildContext context.select deeply compares maps",
+ "result": "success",
+ "time": 15,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "BuildContext context.select deeply compares lists",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "BuildContext context.select deeply compares iterables",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "BuildContext context.select deeply compares sets",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "BuildContext context.watch listens to value changes",
+ "result": "success",
+ "time": 10,
+ },
+ ],
+ },
+ ],
+ "name": "test/context_test.dart",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "ReassembleHandler",
+ "result": "success",
+ "time": 194,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "unevaluated create",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "unevaluated create",
+ "result": "success",
+ "time": 16,
+ },
+ ],
+ },
+ ],
+ "name": "test/reassemble_test.dart",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with MultiProvider",
+ "result": "success",
+ "time": 184,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "(catchError) previous future completes after transition is no-op",
+ "result": "success",
+ "time": 16,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "previous future completes after transition is no-op",
+ "result": "success",
+ "time": 15,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "transition from future to future preserve state",
+ "result": "success",
+ "time": 12,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throws if future has error and catchError is missing",
+ "result": "success",
+ "time": 24,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls catchError if present and future has error",
+ "result": "success",
+ "time": 21,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with null",
+ "result": "success",
+ "time": 14,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "create and dispose future with builder",
+ "result": "success",
+ "time": 12,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "FutureProvider() crashes if builder is null",
+ "result": "success",
+ "time": 4,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "FutureProvider()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "FutureProvider() crashes if builder is null",
+ "result": "success",
+ "time": 3,
+ },
+ ],
+ },
+ ],
+ "name": "test/future_provider_test.dart",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with MultiProvider",
+ "result": "success",
+ "time": 172,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Provider.of",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Provider.of throws if T is dynamic",
+ "result": "success",
+ "time": 26,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Provider.of listen defaults to true when building widgets",
+ "result": "success",
+ "time": 13,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Provider.of listen defaults to false outside of the widget tree",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Provider.of listen:false doesn't trigger rebuild",
+ "result": "success",
+ "time": 10,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Provider.of listen:true outside of the widget tree throws",
+ "result": "success",
+ "time": 11,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "Provider",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "Provider throws if the provided value is a Listenable/Stream",
+ "result": "success",
+ "time": 28,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Provider debugCheckInvalidValueType can be disabled",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Provider simple usage",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Provider throws an error if no provider found",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Provider update should notify",
+ "result": "success",
+ "time": 8,
+ },
+ ],
+ },
+ ],
+ "name": "test/provider_test.dart",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "regression test #377",
+ "result": "success",
+ "time": 167,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "rebuild on dependency flags update",
+ "result": "success",
+ "time": 15,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "properly update debug flags if a create triggers another deferred create",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "properly update debug flags if a create triggers another deferred create",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "properly update debug flags if an update triggers another create/update",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "properly update debug flags if a create triggers another create/update",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Provider.of(listen: false) outside of build works when it loads a provider",
+ "result": "success",
+ "time": 22,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "new value is available in didChangeDependencies",
+ "result": "success",
+ "time": 26,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "builder receives the current value and updates independently from \`update\`",
+ "result": "success",
+ "time": 16,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "builder can _not_ rebuild when provider updates",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "builder rebuilds if provider is recreated",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "provider.of throws if listen:true outside of the widget tree",
+ "result": "success",
+ "time": 23,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider throws if no child is provided with default constructor",
+ "result": "success",
+ "time": 14,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider throws if no child is provided with value constructor",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "DeferredInheritedProvider throws if no child is provided with default constructor",
+ "result": "success",
+ "time": 15,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "DeferredInheritedProvider throws if no child is provided with value constructor",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "startListening markNeedsNotifyDependents",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider can be subclassed",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "DeferredInheritedProvider can be subclassed",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "can be used with MultiProvider",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "throw if the widget ctor changes",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider lazy loading can be disabled",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider.value lazy loading can be disabled",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider subclass don't have to specify default lazy value",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "DeferredInheritedProvider lazy loading can be disabled",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "DeferredInheritedProvider.value lazy loading can be disabled",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "selector",
+ "result": "success",
+ "time": 14,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "can select multiple types from same provider",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "can select same type on two different providers",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "can select same type twice on same provider",
+ "result": "success",
+ "time": 10,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Provider.of has a proper error message if context is null",
+ "result": "success",
+ "time": 6,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "diagnostics",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "diagnostics InheritedProvider.value",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "diagnostics InheritedProvider doesn't break lazy loading",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "diagnostics InheritedProvider show if listening",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "diagnostics DeferredInheritedProvider.value",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "diagnostics DeferredInheritedProvider",
+ "result": "success",
+ "time": 16,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "InheritedProvider.value()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider.value() markNeedsNotifyDependents during startListening is noop",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider.value() startListening called again when create returns new value",
+ "result": "success",
+ "time": 27,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider.value() startListening",
+ "result": "success",
+ "time": 19,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider.value() stopListening not called twice if rebuild doesn't have listeners",
+ "result": "success",
+ "time": 16,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider.value() removeListener cannot be null",
+ "result": "success",
+ "time": 22,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider.value() pass down current value",
+ "result": "success",
+ "time": 17,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider.value() default updateShouldNotify",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider.value() custom updateShouldNotify",
+ "result": "success",
+ "time": 32,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "InheritedProvider()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider() hasValue",
+ "result": "success",
+ "time": 16,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider() provider calls update if rebuilding only due to didChangeDependencies",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider() provider notifying dependents doesn't call update",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider() update can call Provider.of with listen:true",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider() update lazy loaded can call Provider.of with listen:true",
+ "result": "success",
+ "time": 10,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider() markNeedsNotifyDependents during startListening is noop",
+ "result": "success",
+ "time": 22,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider() update can obtain parent of the same type than self",
+ "result": "success",
+ "time": 15,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider() _debugCheckInvalidValueType",
+ "result": "success",
+ "time": 22,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider() startListening",
+ "result": "success",
+ "time": 18,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider() startListening called again when create returns new value",
+ "result": "success",
+ "time": 20,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider() stopListening not called twice if rebuild doesn't have listeners",
+ "result": "success",
+ "time": 18,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider() removeListener cannot be null",
+ "result": "success",
+ "time": 16,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider() fails if initialValueBuilder calls inheritFromElement/inheritFromWiggetOfExactType",
+ "result": "success",
+ "time": 17,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider() builder is called on every rebuild and after a dependency change",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider() builder with no updateShouldNotify use ==",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider() builder calls updateShouldNotify callback",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider() initialValue is transmitted to valueBuilder",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider() calls builder again if dependencies change",
+ "result": "success",
+ "time": 22,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider() exposes initialValue if valueBuilder is null",
+ "result": "success",
+ "time": 20,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider() call dispose on unmount",
+ "result": "success",
+ "time": 22,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider() builder unmount, dispose not called if value never read",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider() call dispose after new value",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider() valueBuilder works without initialBuilder",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider() calls initialValueBuilder lazily once",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "InheritedProvider() throws if both builder and initialBuilder are missing",
+ "result": "success",
+ "time": 5,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "DeferredInheritedProvider.value()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "DeferredInheritedProvider.value() hasValue",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "DeferredInheritedProvider.value() startListening",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "DeferredInheritedProvider.value() stopListening cannot be null",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "DeferredInheritedProvider.value() startListening doesn't need setState if already initialized",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "DeferredInheritedProvider.value() setState without updateShouldNotify",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "DeferredInheritedProvider.value() setState with updateShouldNotify",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "DeferredInheritedProvider.value() startListening never leave the widget uninitialized",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "DeferredInheritedProvider.value() startListening called again on controller change",
+ "result": "success",
+ "time": 10,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "DeferredInheritedProvider()",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "DeferredInheritedProvider() create can't call inherited widgets",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "DeferredInheritedProvider() creates the value lazily",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "DeferredInheritedProvider() dispose",
+ "result": "success",
+ "time": 7,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "DeferredInheritedProvider() dispose no-op if never built",
+ "result": "success",
+ "time": 7,
+ },
+ ],
+ },
+ ],
+ "name": "test/inherited_provider_test.dart",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "ListenableProxyProvider",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProxyProvider throws if update is missing",
+ "result": "success",
+ "time": 43,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProxyProvider asserts that the created notifier has no listener",
+ "result": "success",
+ "time": 177,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProxyProvider asserts that the created notifier has no listener after rebuild",
+ "result": "success",
+ "time": 18,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProxyProvider rebuilds dependendents when listeners are called",
+ "result": "success",
+ "time": 20,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProxyProvider update returning a new Listenable disposes the previously created value and update dependents",
+ "result": "success",
+ "time": 25,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProxyProvider disposes of created value",
+ "result": "success",
+ "time": 13,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "ListenableProxyProvider variants",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProxyProvider variants ListenableProxyProvider",
+ "result": "success",
+ "time": 13,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProxyProvider variants ListenableProxyProvider2",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProxyProvider variants ListenableProxyProvider3",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProxyProvider variants ListenableProxyProvider4",
+ "result": "success",
+ "time": 17,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProxyProvider variants ListenableProxyProvider5",
+ "result": "success",
+ "time": 12,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ListenableProxyProvider variants ListenableProxyProvider6",
+ "result": "success",
+ "time": 17,
+ },
+ ],
+ },
+ ],
+ "name": "test/listenable_proxy_provider_test.dart",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "asserts that builder/selector are not null",
+ "result": "success",
+ "time": 32,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Deep compare maps by default",
+ "result": "success",
+ "time": 158,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Deep compare iterables by default",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Deep compare sets by default",
+ "result": "success",
+ "time": 12,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Deep compare lists by default",
+ "result": "success",
+ "time": 14,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "custom shouldRebuid",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "passes \`child\` and \`key\`",
+ "result": "success",
+ "time": 13,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls builder if the callback changes",
+ "result": "success",
+ "time": 14,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with MultiProvider",
+ "result": "success",
+ "time": 12,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "don't call builder again if it rebuilds but selector returns the same thing",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "call builder again if it rebuilds abd selector returns the a different variable",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Selector",
+ "result": "success",
+ "time": 15,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Selector2",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Selector3",
+ "result": "success",
+ "time": 8,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Selector4",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Selector5",
+ "result": "success",
+ "time": 19,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "Selector6",
+ "result": "success",
+ "time": 11,
+ },
+ ],
+ },
+ ],
+ "name": "test/selector_test.dart",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "asserts",
+ "result": "success",
+ "time": 6,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "works with MultiProvider",
+ "result": "success",
+ "time": 203,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "calls create only once",
+ "result": "success",
+ "time": 27,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "dispose",
+ "result": "success",
+ "time": 18,
+ },
+ ],
+ },
+ ],
+ "name": "test/stateful_provider_test.dart",
+ "totalTime": undefined,
+ },
+ TestSuiteResult {
+ "groups": Array [
+ TestGroupResult {
+ "name": "ProxyProvider",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "ProxyProvider throws if the provided value is a Listenable/Stream",
+ "result": "success",
+ "time": 209,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ProxyProvider debugCheckInvalidValueType can be disabled",
+ "result": "success",
+ "time": 13,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ProxyProvider create creates initial value",
+ "result": "success",
+ "time": 23,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ProxyProvider consume another providers",
+ "result": "success",
+ "time": 18,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ProxyProvider rebuild descendants if value change",
+ "result": "success",
+ "time": 13,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ProxyProvider call dispose when unmounted with the latest result",
+ "result": "success",
+ "time": 11,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ProxyProvider don't rebuild descendants if value doesn't change",
+ "result": "success",
+ "time": 12,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ProxyProvider pass down updateShouldNotify",
+ "result": "success",
+ "time": 19,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ProxyProvider works with MultiProvider",
+ "result": "success",
+ "time": 16,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ProxyProvider update callback can trigger descendants setState synchronously",
+ "result": "success",
+ "time": 24,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ProxyProvider throws if update is null",
+ "result": "success",
+ "time": 7,
+ },
+ ],
+ },
+ TestGroupResult {
+ "name": "ProxyProvider variants",
+ "tests": Array [
+ TestCaseResult {
+ "error": undefined,
+ "name": "ProxyProvider variants ProxyProvider2",
+ "result": "success",
+ "time": 18,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ProxyProvider variants ProxyProvider3",
+ "result": "success",
+ "time": 16,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ProxyProvider variants ProxyProvider4",
+ "result": "success",
+ "time": 9,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ProxyProvider variants ProxyProvider5",
+ "result": "success",
+ "time": 20,
+ },
+ TestCaseResult {
+ "error": undefined,
+ "name": "ProxyProvider variants ProxyProvider6",
+ "result": "success",
+ "time": 10,
+ },
+ ],
+ },
+ ],
+ "name": "test/proxy_provider_test.dart",
+ "totalTime": undefined,
+ },
+ ],
+ "totalTime": 0,
+}
+`;
diff --git a/__tests__/__snapshots__/dotnet-trx.test.ts.snap b/__tests__/__snapshots__/dotnet-trx.test.ts.snap
index baf47dc..6629280 100644
--- a/__tests__/__snapshots__/dotnet-trx.test.ts.snap
+++ b/__tests__/__snapshots__/dotnet-trx.test.ts.snap
@@ -11,12 +11,12 @@ TestRunResult {
"tests": Array [
TestCaseResult {
"error": Object {
+ "details": "System.DivideByZeroException : Attempted to divide by zero.
+ at DotnetTests.Unit.Calculator.Div(Int32 a, Int32 b) in C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\dotnet\\\\DotnetTests.Unit\\\\Calculator.cs:line 9
+ at DotnetTests.XUnitTests.CalculatorTests.Exception_In_TargetTest() in C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\dotnet\\\\DotnetTests.XUnitTests\\\\CalculatorTests.cs:line 33",
"line": 9,
"message": "System.DivideByZeroException : Attempted to divide by zero.",
"path": "DotnetTests.Unit/Calculator.cs",
- "stackTrace": "System.DivideByZeroException : Attempted to divide by zero.
- at DotnetTests.Unit.Calculator.Div(Int32 a, Int32 b) in C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\dotnet\\\\DotnetTests.Unit\\\\Calculator.cs:line 9
- at DotnetTests.XUnitTests.CalculatorTests.Exception_In_TargetTest() in C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\dotnet\\\\DotnetTests.XUnitTests\\\\CalculatorTests.cs:line 33",
},
"name": "Exception_In_TargetTest",
"result": "failed",
@@ -24,11 +24,11 @@ TestRunResult {
},
TestCaseResult {
"error": Object {
+ "details": "System.Exception : Test
+ at DotnetTests.XUnitTests.CalculatorTests.Exception_In_Test() in C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\dotnet\\\\DotnetTests.XUnitTests\\\\CalculatorTests.cs:line 39",
"line": 39,
"message": "System.Exception : Test",
"path": "DotnetTests.XUnitTests/CalculatorTests.cs",
- "stackTrace": "System.Exception : Test
- at DotnetTests.XUnitTests.CalculatorTests.Exception_In_Test() in C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\dotnet\\\\DotnetTests.XUnitTests\\\\CalculatorTests.cs:line 39",
},
"name": "Exception_In_Test",
"result": "failed",
@@ -36,15 +36,15 @@ TestRunResult {
},
TestCaseResult {
"error": Object {
+ "details": "Assert.Equal() Failure
+Expected: 3
+Actual: 2
+ at DotnetTests.XUnitTests.CalculatorTests.Failing_Test() in C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\dotnet\\\\DotnetTests.XUnitTests\\\\CalculatorTests.cs:line 27",
"line": 27,
"message": "Assert.Equal() Failure
Expected: 3
Actual: 2",
"path": "DotnetTests.XUnitTests/CalculatorTests.cs",
- "stackTrace": "Assert.Equal() Failure
-Expected: 3
-Actual: 2
- at DotnetTests.XUnitTests.CalculatorTests.Failing_Test() in C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\dotnet\\\\DotnetTests.XUnitTests\\\\CalculatorTests.cs:line 27",
},
"name": "Failing_Test",
"result": "failed",
diff --git a/__tests__/__snapshots__/jest-junit.test.ts.snap b/__tests__/__snapshots__/jest-junit.test.ts.snap
index e4f1c82..3a04722 100644
--- a/__tests__/__snapshots__/jest-junit.test.ts.snap
+++ b/__tests__/__snapshots__/jest-junit.test.ts.snap
@@ -22,9 +22,7 @@ TestRunResult {
"tests": Array [
TestCaseResult {
"error": Object {
- "line": 10,
- "path": "__tests__/main.test.js",
- "stackTrace": "Error: expect(received).toBeTruthy()
+ "details": "Error: expect(received).toBeTruthy()
Received: false
at Object. (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\__tests__\\\\main.test.js:10:21)
@@ -34,6 +32,8 @@ Received: false
at mapper (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\queueRunner.js:28:19)
at C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\queueRunner.js:75:41
at processTicksAndRejections (internal/process/task_queues.js:97:5)",
+ "line": 10,
+ "path": "__tests__/main.test.js",
},
"name": "Failing test",
"result": "failed",
@@ -41,9 +41,7 @@ Received: false
},
TestCaseResult {
"error": Object {
- "line": 2,
- "path": "lib/main.js",
- "stackTrace": "Error: Some error
+ "details": "Error: Some error
at Object.throwError (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\lib\\\\main.js:2:9)
at Object. (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\__tests__\\\\main.test.js:14:11)
at Object.asyncJestTest (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\jasmineAsyncInstall.js:106:37)
@@ -52,6 +50,8 @@ Received: false
at mapper (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\queueRunner.js:28:19)
at C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\queueRunner.js:75:41
at processTicksAndRejections (internal/process/task_queues.js:97:5)",
+ "line": 2,
+ "path": "lib/main.js",
},
"name": "Exception in target unit",
"result": "failed",
@@ -64,9 +64,7 @@ Received: false
"tests": Array [
TestCaseResult {
"error": Object {
- "line": 21,
- "path": "__tests__/main.test.js",
- "stackTrace": "Error: Some error
+ "details": "Error: Some error
at Object. (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\__tests__\\\\main.test.js:21:11)
at Object.asyncJestTest (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\jasmineAsyncInstall.js:106:37)
at C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\queueRunner.js:45:12
@@ -74,6 +72,8 @@ Received: false
at mapper (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\queueRunner.js:28:19)
at C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\queueRunner.js:75:41
at processTicksAndRejections (internal/process/task_queues.js:97:5)",
+ "line": 21,
+ "path": "__tests__/main.test.js",
},
"name": "Exception in test",
"result": "failed",
@@ -92,9 +92,7 @@ Received: false
"tests": Array [
TestCaseResult {
"error": Object {
- "line": 1,
- "path": "__tests__/second.test.js",
- "stackTrace": ": Timeout - Async callback was not invoked within the 1 ms timeout specified by jest.setTimeout.Timeout - Async callback was not invoked within the 1 ms timeout specified by jest.setTimeout.Error:
+ "details": ": Timeout - Async callback was not invoked within the 1 ms timeout specified by jest.setTimeout.Timeout - Async callback was not invoked within the 1 ms timeout specified by jest.setTimeout.Error:
at new Spec (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\jasmine\\\\Spec.js:116:22)
at new Spec (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\setup_jest_globals.js:78:9)
at specFactory (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\jasmine\\\\Env.js:523:24)
@@ -108,6 +106,8 @@ Received: false
at jasmine2 (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-jasmine2\\\\build\\\\index.js:230:13)
at runTestInternal (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-runner\\\\build\\\\runTest.js:380:22)
at runTest (C:\\\\Users\\\\Michal\\\\Workspace\\\\dorny\\\\test-check\\\\reports\\\\jest\\\\node_modules\\\\jest-runner\\\\build\\\\runTest.js:472:34)",
+ "line": 1,
+ "path": "__tests__/second.test.js",
},
"name": "Timeout test",
"result": "failed",
@@ -22013,9 +22013,7 @@ Is good for you.\\")",
},
TestCaseResult {
"error": Object {
- "line": 418,
- "path": "e2e/__tests__/jestChangedFiles.test.ts",
- "stackTrace": "Error: abort: empty revision range
+ "details": "Error: abort: empty revision range
at makeError (/home/dorny/dorny/jest/node_modules/execa/lib/error.js:59:11)
at handlePromise (/home/dorny/dorny/jest/node_modules/execa/index.js:114:26)
at runMicrotasks ()
@@ -22026,6 +22024,8 @@ Is good for you.\\")",
at Object. (/home/dorny/dorny/jest/e2e/__tests__/jestChangedFiles.test.ts:418:28)
at _callCircusTest (/home/dorny/dorny/jest/packages/jest-circus/build/run.js:218:5)
at _runTest (/home/dorny/dorny/jest/packages/jest-circus/build/run.js:155:3)",
+ "line": 418,
+ "path": "e2e/__tests__/jestChangedFiles.test.ts",
},
"name": "gets changed files for hg",
"result": "failed",
@@ -25368,9 +25368,7 @@ Is good for you.\\")",
},
TestCaseResult {
"error": Object {
- "line": 360,
- "path": "e2e/__tests__/onlyChanged.test.ts",
- "stackTrace": "Error: expect(received).toMatch(expected)
+ "details": "Error: expect(received).toMatch(expected)
Expected pattern: /PASS __tests__(\\\\/|\\\\\\\\)file2.test.js/
Received string: \\"·
@@ -25387,6 +25385,8 @@ Received string: \\"·
at _runTestsForDescribeBlock (/home/dorny/dorny/jest/packages/jest-circus/build/run.js:66:9)
at run (/home/dorny/dorny/jest/packages/jest-circus/build/run.js:25:3)
at runAndTransformResultsToJestFormat (/home/dorny/dorny/jest/packages/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:163:21)",
+ "line": 360,
+ "path": "e2e/__tests__/onlyChanged.test.ts",
},
"name": "gets changed files for hg",
"result": "failed",
diff --git a/__tests__/dart-json.test.ts b/__tests__/dart-json.test.ts
index 6638005..01e6798 100644
--- a/__tests__/dart-json.test.ts
+++ b/__tests__/dart-json.test.ts
@@ -27,4 +27,27 @@ describe('dart-json tests', () => {
fs.mkdirSync(path.dirname(outputPath), {recursive: true})
fs.writeFileSync(outputPath, report)
})
+
+ it('report from rrousselGit/provider test results matches snapshot', async () => {
+ const fixturePath = path.join(__dirname, 'fixtures', 'external', 'flutter', 'provider-test-results.json')
+ const trackedFilesPath = path.join(__dirname, 'fixtures', 'external', 'flutter', 'files.txt')
+ const outputPath = path.join(__dirname, '__outputs__', 'provider-test-results.md')
+ const filePath = normalizeFilePath(path.relative(__dirname, fixturePath))
+ const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'})
+
+ const trackedFiles = fs.readFileSync(trackedFilesPath, {encoding: 'utf8'}).split(/\n\r?/g)
+ const opts: ParseOptions = {
+ trackedFiles,
+ parseErrors: true,
+ workDir: '/__w/provider/provider/'
+ }
+
+ const parser = new DartJsonParser(opts)
+ const result = await parser.parse(filePath, fileContent)
+ expect(result).toMatchSnapshot()
+
+ const report = getReport([result])
+ fs.mkdirSync(path.dirname(outputPath), {recursive: true})
+ fs.writeFileSync(outputPath, report)
+ })
})
diff --git a/__tests__/fixtures/external/flutter/files.txt b/__tests__/fixtures/external/flutter/files.txt
new file mode 100644
index 0000000..691d80c
--- /dev/null
+++ b/__tests__/fixtures/external/flutter/files.txt
@@ -0,0 +1,57 @@
+.github/ISSUE_TEMPLATE/bug_report.md
+.github/ISSUE_TEMPLATE/config.yml
+.github/ISSUE_TEMPLATE/feature_request.md
+.github/workflows/build.yml
+.gitignore
+CHANGELOG.md
+LICENSE
+README.md
+all_lint_rules.yaml
+analysis_options.yaml
+dart_test.yaml
+example/.gitignore
+example/.metadata
+example/lib/main.dart
+example/pubspec.yaml
+example/test/widget_test.dart
+example/test_driver/app.dart
+example/test_driver/app_test.dart
+lib/provider.dart
+lib/single_child_widget.dart
+lib/src/async_provider.dart
+lib/src/change_notifier_provider.dart
+lib/src/consumer.dart
+lib/src/deferred_inherited_provider.dart
+lib/src/inherited_provider.dart
+lib/src/listenable_provider.dart
+lib/src/provider.dart
+lib/src/proxy_provider.dart
+lib/src/reassemble_handler.dart
+lib/src/selector.dart
+lib/src/value_listenable_provider.dart
+pubspec.yaml
+resources/devtools_providers.jpg
+resources/expanded_devtools.jpg
+resources/flutter_favorite.png
+resources/translations/es_MX/README.md
+resources/translations/pt_br/README.md
+resources/translations/zh-CN/README.md
+scripts/flutter_test.sh
+test/builder_test.dart
+test/change_notifier_provider_test.dart
+test/common.dart
+test/consumer_test.dart
+test/context_test.dart
+test/dart_test.yaml
+test/future_provider_test.dart
+test/inherited_provider_test.dart
+test/listenable_provider_test.dart
+test/listenable_proxy_provider_test.dart
+test/multi_provider_test.dart
+test/provider_test.dart
+test/proxy_provider_test.dart
+test/reassemble_test.dart
+test/selector_test.dart
+test/stateful_provider_test.dart
+test/stream_provider_test.dart
+test/value_listenable_provider_test.dart
diff --git a/__tests__/fixtures/external/flutter/provider-test-results.json b/__tests__/fixtures/external/flutter/provider-test-results.json
new file mode 100644
index 0000000..236a066
--- /dev/null
+++ b/__tests__/fixtures/external/flutter/provider-test-results.json
@@ -0,0 +1,637 @@
+{"protocolVersion":"0.1.1","runnerVersion":null,"pid":515,"type":"start","time":0}
+{"suite":{"id":0,"platform":"vm","path":"/__w/provider/provider/test/value_listenable_provider_test.dart"},"type":"suite","time":0}
+{"test":{"id":1,"name":"loading /__w/provider/provider/test/value_listenable_provider_test.dart","suiteID":0,"groupIDs":[],"metadata":{"skip":false,"skipReason":null},"line":null,"column":null,"url":null},"type":"testStart","time":2}
+{"count":16,"type":"allSuites","time":14}
+{"testID":1,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":8608}
+{"group":{"id":2,"suiteID":0,"parentID":null,"name":"","metadata":{"skip":false,"skipReason":null},"testCount":5,"line":null,"column":null,"url":null},"type":"group","time":8617}
+{"group":{"id":3,"suiteID":0,"parentID":2,"name":"valueListenableProvider","metadata":{"skip":false,"skipReason":null},"testCount":5,"line":12,"column":3,"url":"file:///__w/provider/provider/test/value_listenable_provider_test.dart"},"type":"group","time":8619}
+{"test":{"id":4,"name":"valueListenableProvider rebuilds when value change","suiteID":0,"groupIDs":[2,3],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":13,"root_column":5,"root_url":"file:///__w/provider/provider/test/value_listenable_provider_test.dart"},"type":"testStart","time":8619}
+{"testID":4,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":8819}
+{"test":{"id":5,"name":"valueListenableProvider don't rebuild dependents by default","suiteID":0,"groupIDs":[2,3],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":33,"root_column":5,"root_url":"file:///__w/provider/provider/test/value_listenable_provider_test.dart"},"type":"testStart","time":8821}
+{"testID":5,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":8847}
+{"test":{"id":6,"name":"valueListenableProvider pass keys","suiteID":0,"groupIDs":[2,3],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":61,"root_column":5,"root_url":"file:///__w/provider/provider/test/value_listenable_provider_test.dart"},"type":"testStart","time":8848}
+{"testID":6,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":8858}
+{"test":{"id":7,"name":"valueListenableProvider don't listen again if stream instance doesn't change","suiteID":0,"groupIDs":[2,3],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":74,"root_column":5,"root_url":"file:///__w/provider/provider/test/value_listenable_provider_test.dart"},"type":"testStart","time":8859}
+{"testID":7,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":8881}
+{"test":{"id":8,"name":"valueListenableProvider pass updateShouldNotify","suiteID":0,"groupIDs":[2,3],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":94,"root_column":5,"root_url":"file:///__w/provider/provider/test/value_listenable_provider_test.dart"},"type":"testStart","time":8882}
+{"testID":8,"messageType":"print","message":"══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞════════════════════════════════════════════════════\nThe following TestFailure object was thrown running a test:\n Expected: <2>\n Actual: <1>\nUnexpected number of calls\n\nWhen the exception was thrown, this was the stack:\n#0 fail (package:test_api/src/frontend/expect.dart:155:31)\n#1 _expect (package:test_api/src/frontend/expect.dart:150:3)\n#2 expect (package:test_api/src/frontend/expect.dart:59:3)\n#3 VerificationResult.called (package:mockito/src/mock.dart:853:5)\n#4 main.. (file:///__w/provider/provider/test/value_listenable_provider_test.dart:112:34)\n\n\n(elided one frame from package:stack_trace)\n\nThe test description was:\n pass updateShouldNotify\n════════════════════════════════════════════════════════════════════════════════════════════════════","type":"print","time":8941}
+{"testID":8,"error":"Test failed. See exception logs above.\nThe test description was: pass updateShouldNotify","stackTrace":"","isFailure":false,"type":"error","time":8951}
+{"testID":8,"result":"error","skipped":false,"hidden":false,"type":"testDone","time":8951}
+{"suite":{"id":9,"platform":"vm","path":"/__w/provider/provider/test/listenable_provider_test.dart"},"type":"suite","time":10134}
+{"test":{"id":10,"name":"loading /__w/provider/provider/test/listenable_provider_test.dart","suiteID":9,"groupIDs":[],"metadata":{"skip":false,"skipReason":null},"line":null,"column":null,"url":null},"type":"testStart","time":10134}
+{"testID":10,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":11056}
+{"group":{"id":11,"suiteID":9,"parentID":null,"name":"","metadata":{"skip":false,"skipReason":null},"testCount":16,"line":null,"column":null,"url":null},"type":"group","time":11058}
+{"group":{"id":12,"suiteID":9,"parentID":11,"name":"ListenableProvider","metadata":{"skip":false,"skipReason":null},"testCount":16,"line":12,"column":3,"url":"file:///__w/provider/provider/test/listenable_provider_test.dart"},"type":"group","time":11058}
+{"test":{"id":13,"name":"ListenableProvider works with MultiProvider","suiteID":9,"groupIDs":[11,12],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":13,"root_column":5,"root_url":"file:///__w/provider/provider/test/listenable_provider_test.dart"},"type":"testStart","time":11058}
+{"testID":13,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":11231}
+{"test":{"id":14,"name":"ListenableProvider asserts that the created notifier can have listeners","suiteID":9,"groupIDs":[11,12],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":29,"root_column":5,"root_url":"file:///__w/provider/provider/test/listenable_provider_test.dart"},"type":"testStart","time":11232}
+{"testID":14,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":11244}
+{"group":{"id":15,"suiteID":9,"parentID":12,"name":"ListenableProvider value constructor","metadata":{"skip":true,"skipReason":null},"testCount":2,"line":49,"column":5,"url":"file:///__w/provider/provider/test/listenable_provider_test.dart"},"type":"group","time":11245}
+{"test":{"id":16,"name":"ListenableProvider value constructor pass down key","suiteID":9,"groupIDs":[11,12,15],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":50,"root_column":7,"root_url":"file:///__w/provider/provider/test/listenable_provider_test.dart"},"type":"testStart","time":11245}
+{"testID":16,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":11262}
+{"test":{"id":17,"name":"ListenableProvider value constructor changing the Listenable instance rebuilds dependents","suiteID":9,"groupIDs":[11,12,15],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":66,"root_column":7,"root_url":"file:///__w/provider/provider/test/listenable_provider_test.dart"},"type":"testStart","time":11263}
+{"testID":17,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":11292}
+{"test":{"id":18,"name":"ListenableProvider don't listen again if listenable instance doesn't change","suiteID":9,"groupIDs":[11,12],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":102,"root_column":5,"root_url":"file:///__w/provider/provider/test/listenable_provider_test.dart"},"type":"testStart","time":11293}
+{"testID":18,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":11305}
+{"test":{"id":19,"name":"ListenableProvider works with null (default)","suiteID":9,"groupIDs":[11,12],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":121,"root_column":5,"root_url":"file:///__w/provider/provider/test/listenable_provider_test.dart"},"type":"testStart","time":11305}
+{"testID":19,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":11312}
+{"test":{"id":20,"name":"ListenableProvider works with null (create)","suiteID":9,"groupIDs":[11,12],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":133,"root_column":5,"root_url":"file:///__w/provider/provider/test/listenable_provider_test.dart"},"type":"testStart","time":11312}
+{"testID":20,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":11319}
+{"group":{"id":21,"suiteID":9,"parentID":12,"name":"ListenableProvider stateful constructor","metadata":{"skip":false,"skipReason":null},"testCount":3,"line":145,"column":5,"url":"file:///__w/provider/provider/test/listenable_provider_test.dart"},"type":"group","time":11319}
+{"test":{"id":22,"name":"ListenableProvider stateful constructor called with context","suiteID":9,"groupIDs":[11,12,21],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":146,"root_column":7,"root_url":"file:///__w/provider/provider/test/listenable_provider_test.dart"},"type":"testStart","time":11319}
+{"testID":22,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":11327}
+{"test":{"id":23,"name":"ListenableProvider stateful constructor throws if create is null","suiteID":9,"groupIDs":[11,12,21],"metadata":{"skip":false,"skipReason":null},"line":157,"column":7,"url":"file:///__w/provider/provider/test/listenable_provider_test.dart"},"type":"testStart","time":11328}
+{"testID":23,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":11332}
+{"test":{"id":24,"name":"ListenableProvider stateful constructor pass down key","suiteID":9,"groupIDs":[11,12,21],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":163,"root_column":7,"root_url":"file:///__w/provider/provider/test/listenable_provider_test.dart"},"type":"testStart","time":11332}
+{"testID":24,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":11352}
+{"test":{"id":25,"name":"ListenableProvider stateful create called once","suiteID":9,"groupIDs":[11,12],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":179,"root_column":5,"root_url":"file:///__w/provider/provider/test/listenable_provider_test.dart"},"type":"testStart","time":11353}
+{"testID":25,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":11364}
+{"test":{"id":26,"name":"ListenableProvider dispose called on unmount","suiteID":9,"groupIDs":[11,12],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":206,"root_column":5,"root_url":"file:///__w/provider/provider/test/listenable_provider_test.dart"},"type":"testStart","time":11364}
+{"testID":26,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":11377}
+{"test":{"id":27,"name":"ListenableProvider dispose can be null","suiteID":9,"groupIDs":[11,12],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":238,"root_column":5,"root_url":"file:///__w/provider/provider/test/listenable_provider_test.dart"},"type":"testStart","time":11378}
+{"testID":27,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":11386}
+{"test":{"id":28,"name":"ListenableProvider changing listenable rebuilds descendants","suiteID":9,"groupIDs":[11,12],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":249,"root_column":5,"root_url":"file:///__w/provider/provider/test/listenable_provider_test.dart"},"type":"testStart","time":11387}
+{"testID":28,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":11399}
+{"test":{"id":29,"name":"ListenableProvider rebuilding with the same provider don't rebuilds descendants","suiteID":9,"groupIDs":[11,12],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":284,"root_column":5,"root_url":"file:///__w/provider/provider/test/listenable_provider_test.dart"},"type":"testStart","time":11400}
+{"testID":29,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":11411}
+{"test":{"id":30,"name":"ListenableProvider notifylistener rebuilds descendants","suiteID":9,"groupIDs":[11,12],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":341,"root_column":5,"root_url":"file:///__w/provider/provider/test/listenable_provider_test.dart"},"type":"testStart","time":11412}
+{"testID":30,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":11421}
+{"suite":{"id":31,"platform":"vm","path":"/__w/provider/provider/test/consumer_test.dart"},"type":"suite","time":12439}
+{"test":{"id":32,"name":"loading /__w/provider/provider/test/consumer_test.dart","suiteID":31,"groupIDs":[],"metadata":{"skip":false,"skipReason":null},"line":null,"column":null,"url":null},"type":"testStart","time":12440}
+{"testID":32,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":13148}
+{"group":{"id":33,"suiteID":31,"parentID":null,"name":"","metadata":{"skip":false,"skipReason":null},"testCount":18,"line":null,"column":null,"url":null},"type":"group","time":13149}
+{"group":{"id":34,"suiteID":31,"parentID":33,"name":"consumer","metadata":{"skip":false,"skipReason":null},"testCount":3,"line":72,"column":3,"url":"file:///__w/provider/provider/test/consumer_test.dart"},"type":"group","time":13149}
+{"test":{"id":35,"name":"consumer obtains value from Provider","suiteID":31,"groupIDs":[33,34],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":73,"root_column":5,"root_url":"file:///__w/provider/provider/test/consumer_test.dart"},"type":"testStart","time":13149}
+{"testID":35,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":13330}
+{"test":{"id":36,"name":"consumer crashed with no builder","suiteID":31,"groupIDs":[33,34],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":92,"root_column":5,"root_url":"file:///__w/provider/provider/test/consumer_test.dart"},"type":"testStart","time":13330}
+{"testID":36,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":13341}
+{"test":{"id":37,"name":"consumer can be used inside MultiProvider","suiteID":31,"groupIDs":[33,34],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":98,"root_column":5,"root_url":"file:///__w/provider/provider/test/consumer_test.dart"},"type":"testStart","time":13341}
+{"testID":37,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":13357}
+{"group":{"id":38,"suiteID":31,"parentID":33,"name":"consumer2","metadata":{"skip":false,"skipReason":null},"testCount":3,"line":120,"column":3,"url":"file:///__w/provider/provider/test/consumer_test.dart"},"type":"group","time":13357}
+{"test":{"id":39,"name":"consumer2 obtains value from Provider","suiteID":31,"groupIDs":[33,38],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":121,"root_column":5,"root_url":"file:///__w/provider/provider/test/consumer_test.dart"},"type":"testStart","time":13357}
+{"testID":39,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":13379}
+{"test":{"id":40,"name":"consumer2 crashed with no builder","suiteID":31,"groupIDs":[33,38],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":139,"root_column":5,"root_url":"file:///__w/provider/provider/test/consumer_test.dart"},"type":"testStart","time":13380}
+{"testID":40,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":13388}
+{"test":{"id":41,"name":"consumer2 can be used inside MultiProvider","suiteID":31,"groupIDs":[33,38],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":146,"root_column":5,"root_url":"file:///__w/provider/provider/test/consumer_test.dart"},"type":"testStart","time":13388}
+{"testID":41,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":13397}
+{"group":{"id":42,"suiteID":31,"parentID":33,"name":"consumer3","metadata":{"skip":false,"skipReason":null},"testCount":3,"line":167,"column":3,"url":"file:///__w/provider/provider/test/consumer_test.dart"},"type":"group","time":13398}
+{"test":{"id":43,"name":"consumer3 obtains value from Provider","suiteID":31,"groupIDs":[33,42],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":168,"root_column":5,"root_url":"file:///__w/provider/provider/test/consumer_test.dart"},"type":"testStart","time":13398}
+{"testID":43,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":13407}
+{"test":{"id":44,"name":"consumer3 crashed with no builder","suiteID":31,"groupIDs":[33,42],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":186,"root_column":5,"root_url":"file:///__w/provider/provider/test/consumer_test.dart"},"type":"testStart","time":13407}
+{"testID":44,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":13414}
+{"test":{"id":45,"name":"consumer3 can be used inside MultiProvider","suiteID":31,"groupIDs":[33,42],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":193,"root_column":5,"root_url":"file:///__w/provider/provider/test/consumer_test.dart"},"type":"testStart","time":13414}
+{"testID":45,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":13422}
+{"group":{"id":46,"suiteID":31,"parentID":33,"name":"consumer4","metadata":{"skip":false,"skipReason":null},"testCount":3,"line":214,"column":3,"url":"file:///__w/provider/provider/test/consumer_test.dart"},"type":"group","time":13423}
+{"test":{"id":47,"name":"consumer4 obtains value from Provider","suiteID":31,"groupIDs":[33,46],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":215,"root_column":5,"root_url":"file:///__w/provider/provider/test/consumer_test.dart"},"type":"testStart","time":13423}
+{"testID":47,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":13431}
+{"test":{"id":48,"name":"consumer4 crashed with no builder","suiteID":31,"groupIDs":[33,46],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":233,"root_column":5,"root_url":"file:///__w/provider/provider/test/consumer_test.dart"},"type":"testStart","time":13431}
+{"testID":48,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":13437}
+{"test":{"id":49,"name":"consumer4 can be used inside MultiProvider","suiteID":31,"groupIDs":[33,46],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":240,"root_column":5,"root_url":"file:///__w/provider/provider/test/consumer_test.dart"},"type":"testStart","time":13438}
+{"testID":49,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":13446}
+{"group":{"id":50,"suiteID":31,"parentID":33,"name":"consumer5","metadata":{"skip":false,"skipReason":null},"testCount":3,"line":261,"column":3,"url":"file:///__w/provider/provider/test/consumer_test.dart"},"type":"group","time":13447}
+{"test":{"id":51,"name":"consumer5 obtains value from Provider","suiteID":31,"groupIDs":[33,50],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":262,"root_column":5,"root_url":"file:///__w/provider/provider/test/consumer_test.dart"},"type":"testStart","time":13447}
+{"testID":51,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":13455}
+{"test":{"id":52,"name":"consumer5 crashed with no builder","suiteID":31,"groupIDs":[33,50],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":280,"root_column":5,"root_url":"file:///__w/provider/provider/test/consumer_test.dart"},"type":"testStart","time":13456}
+{"testID":52,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":13462}
+{"test":{"id":53,"name":"consumer5 can be used inside MultiProvider","suiteID":31,"groupIDs":[33,50],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":287,"root_column":5,"root_url":"file:///__w/provider/provider/test/consumer_test.dart"},"type":"testStart","time":13463}
+{"testID":53,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":13472}
+{"group":{"id":54,"suiteID":31,"parentID":33,"name":"consumer6","metadata":{"skip":false,"skipReason":null},"testCount":3,"line":308,"column":3,"url":"file:///__w/provider/provider/test/consumer_test.dart"},"type":"group","time":13473}
+{"test":{"id":55,"name":"consumer6 obtains value from Provider","suiteID":31,"groupIDs":[33,54],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":309,"root_column":5,"root_url":"file:///__w/provider/provider/test/consumer_test.dart"},"type":"testStart","time":13473}
+{"testID":55,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":13481}
+{"test":{"id":56,"name":"consumer6 crashed with no builder","suiteID":31,"groupIDs":[33,54],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":327,"root_column":5,"root_url":"file:///__w/provider/provider/test/consumer_test.dart"},"type":"testStart","time":13481}
+{"testID":56,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":13489}
+{"test":{"id":57,"name":"consumer6 can be used inside MultiProvider","suiteID":31,"groupIDs":[33,54],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":334,"root_column":5,"root_url":"file:///__w/provider/provider/test/consumer_test.dart"},"type":"testStart","time":13489}
+{"testID":57,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":13497}
+{"suite":{"id":58,"platform":"vm","path":"/__w/provider/provider/test/change_notifier_provider_test.dart"},"type":"suite","time":14520}
+{"test":{"id":59,"name":"loading /__w/provider/provider/test/change_notifier_provider_test.dart","suiteID":58,"groupIDs":[],"metadata":{"skip":false,"skipReason":null},"line":null,"column":null,"url":null},"type":"testStart","time":14520}
+{"testID":59,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":15132}
+{"group":{"id":60,"suiteID":58,"parentID":null,"name":"","metadata":{"skip":false,"skipReason":null},"testCount":10,"line":null,"column":null,"url":null},"type":"group","time":15132}
+{"group":{"id":61,"suiteID":58,"parentID":60,"name":"ChangeNotifierProvider","metadata":{"skip":false,"skipReason":null},"testCount":9,"line":8,"column":3,"url":"file:///__w/provider/provider/test/change_notifier_provider_test.dart"},"type":"group","time":15133}
+{"test":{"id":62,"name":"ChangeNotifierProvider value","suiteID":58,"groupIDs":[60,61],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":9,"root_column":5,"root_url":"file:///__w/provider/provider/test/change_notifier_provider_test.dart"},"type":"testStart","time":15133}
+{"testID":62,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":15318}
+{"test":{"id":63,"name":"ChangeNotifierProvider builder","suiteID":58,"groupIDs":[60,61],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":41,"root_column":5,"root_url":"file:///__w/provider/provider/test/change_notifier_provider_test.dart"},"type":"testStart","time":15318}
+{"testID":63,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":15336}
+{"test":{"id":64,"name":"ChangeNotifierProvider builder1","suiteID":58,"groupIDs":[60,61],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":71,"root_column":5,"root_url":"file:///__w/provider/provider/test/change_notifier_provider_test.dart"},"type":"testStart","time":15337}
+{"testID":64,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":15349}
+{"test":{"id":65,"name":"ChangeNotifierProvider builder2","suiteID":58,"groupIDs":[60,61],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":105,"root_column":5,"root_url":"file:///__w/provider/provider/test/change_notifier_provider_test.dart"},"type":"testStart","time":15350}
+{"testID":65,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":15362}
+{"test":{"id":66,"name":"ChangeNotifierProvider builder3","suiteID":58,"groupIDs":[60,61],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":140,"root_column":5,"root_url":"file:///__w/provider/provider/test/change_notifier_provider_test.dart"},"type":"testStart","time":15362}
+{"testID":66,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":15381}
+{"test":{"id":67,"name":"ChangeNotifierProvider builder4","suiteID":58,"groupIDs":[60,61],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":176,"root_column":5,"root_url":"file:///__w/provider/provider/test/change_notifier_provider_test.dart"},"type":"testStart","time":15382}
+{"testID":67,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":15396}
+{"test":{"id":68,"name":"ChangeNotifierProvider builder5","suiteID":58,"groupIDs":[60,61],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":213,"root_column":5,"root_url":"file:///__w/provider/provider/test/change_notifier_provider_test.dart"},"type":"testStart","time":15397}
+{"testID":68,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":15412}
+{"test":{"id":69,"name":"ChangeNotifierProvider builder6","suiteID":58,"groupIDs":[60,61],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":251,"root_column":5,"root_url":"file:///__w/provider/provider/test/change_notifier_provider_test.dart"},"type":"testStart","time":15413}
+{"testID":69,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":15424}
+{"test":{"id":70,"name":"ChangeNotifierProvider builder0","suiteID":58,"groupIDs":[60,61],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":290,"root_column":5,"root_url":"file:///__w/provider/provider/test/change_notifier_provider_test.dart"},"type":"testStart","time":15424}
+{"testID":70,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":15434}
+{"test":{"id":71,"name":"Use builder property, not child","suiteID":58,"groupIDs":[60],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":325,"root_column":3,"root_url":"file:///__w/provider/provider/test/change_notifier_provider_test.dart"},"type":"testStart","time":15435}
+{"testID":71,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":15445}
+{"suite":{"id":72,"platform":"vm","path":"/__w/provider/provider/test/builder_test.dart"},"type":"suite","time":16595}
+{"test":{"id":73,"name":"loading /__w/provider/provider/test/builder_test.dart","suiteID":72,"groupIDs":[],"metadata":{"skip":false,"skipReason":null},"line":null,"column":null,"url":null},"type":"testStart","time":16595}
+{"testID":73,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":17304}
+{"group":{"id":74,"suiteID":72,"parentID":null,"name":"","metadata":{"skip":false,"skipReason":null},"testCount":24,"line":null,"column":null,"url":null},"type":"group","time":17305}
+{"group":{"id":75,"suiteID":72,"parentID":74,"name":"ChangeNotifierProvider","metadata":{"skip":false,"skipReason":null},"testCount":2,"line":9,"column":3,"url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"group","time":17305}
+{"test":{"id":76,"name":"ChangeNotifierProvider default","suiteID":72,"groupIDs":[74,75],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":10,"root_column":5,"root_url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"testStart","time":17305}
+{"testID":76,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":17494}
+{"test":{"id":77,"name":"ChangeNotifierProvider .value","suiteID":72,"groupIDs":[74,75],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":25,"root_column":5,"root_url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"testStart","time":17495}
+{"testID":77,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":17505}
+{"group":{"id":78,"suiteID":72,"parentID":74,"name":"ListenableProvider","metadata":{"skip":false,"skipReason":null},"testCount":2,"line":41,"column":3,"url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"group","time":17505}
+{"test":{"id":79,"name":"ListenableProvider default","suiteID":72,"groupIDs":[74,78],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":42,"root_column":5,"root_url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"testStart","time":17505}
+{"testID":79,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":17514}
+{"test":{"id":80,"name":"ListenableProvider .value","suiteID":72,"groupIDs":[74,78],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":57,"root_column":5,"root_url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"testStart","time":17514}
+{"testID":80,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":17530}
+{"group":{"id":81,"suiteID":72,"parentID":74,"name":"Provider","metadata":{"skip":false,"skipReason":null},"testCount":2,"line":73,"column":3,"url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"group","time":17530}
+{"test":{"id":82,"name":"Provider default","suiteID":72,"groupIDs":[74,81],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":74,"root_column":5,"root_url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"testStart","time":17530}
+{"testID":82,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":17541}
+{"test":{"id":83,"name":"Provider .value","suiteID":72,"groupIDs":[74,81],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":88,"root_column":5,"root_url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"testStart","time":17542}
+{"testID":83,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":17550}
+{"group":{"id":84,"suiteID":72,"parentID":74,"name":"ProxyProvider","metadata":{"skip":false,"skipReason":null},"testCount":7,"line":103,"column":3,"url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"group","time":17552}
+{"test":{"id":85,"name":"ProxyProvider 0","suiteID":72,"groupIDs":[74,84],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":104,"root_column":5,"root_url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"testStart","time":17552}
+{"testID":85,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":17563}
+{"test":{"id":86,"name":"ProxyProvider 1","suiteID":72,"groupIDs":[74,84],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":125,"root_column":5,"root_url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"testStart","time":17563}
+{"testID":86,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":17573}
+{"test":{"id":87,"name":"ProxyProvider 2","suiteID":72,"groupIDs":[74,84],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":147,"root_column":5,"root_url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"testStart","time":17573}
+{"testID":87,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":17581}
+{"test":{"id":88,"name":"ProxyProvider 3","suiteID":72,"groupIDs":[74,84],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":170,"root_column":5,"root_url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"testStart","time":17581}
+{"testID":88,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":17591}
+{"test":{"id":89,"name":"ProxyProvider 4","suiteID":72,"groupIDs":[74,84],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":194,"root_column":5,"root_url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"testStart","time":17592}
+{"testID":89,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":17601}
+{"test":{"id":90,"name":"ProxyProvider 5","suiteID":72,"groupIDs":[74,84],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":219,"root_column":5,"root_url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"testStart","time":17602}
+{"testID":90,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":17611}
+{"test":{"id":91,"name":"ProxyProvider 6","suiteID":72,"groupIDs":[74,84],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":245,"root_column":5,"root_url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"testStart","time":17612}
+{"testID":91,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":17621}
+{"group":{"id":92,"suiteID":72,"parentID":74,"name":"MultiProvider","metadata":{"skip":false,"skipReason":null},"testCount":11,"line":273,"column":3,"url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"group","time":17622}
+{"test":{"id":93,"name":"MultiProvider with 1 ChangeNotifierProvider default","suiteID":72,"groupIDs":[74,92],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":274,"root_column":5,"root_url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"testStart","time":17622}
+{"testID":93,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":17631}
+{"test":{"id":94,"name":"MultiProvider with 2 ChangeNotifierProvider default","suiteID":72,"groupIDs":[74,92],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":293,"root_column":5,"root_url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"testStart","time":17631}
+{"testID":94,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":17640}
+{"test":{"id":95,"name":"MultiProvider with ListenableProvider default","suiteID":72,"groupIDs":[74,92],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":317,"root_column":5,"root_url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"testStart","time":17640}
+{"testID":95,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":17652}
+{"test":{"id":96,"name":"MultiProvider with Provider default","suiteID":72,"groupIDs":[74,92],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":336,"root_column":5,"root_url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"testStart","time":17652}
+{"testID":96,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":17660}
+{"test":{"id":97,"name":"MultiProvider with ProxyProvider0","suiteID":72,"groupIDs":[74,92],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":354,"root_column":5,"root_url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"testStart","time":17661}
+{"testID":97,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":17668}
+{"test":{"id":98,"name":"MultiProvider with ProxyProvider1","suiteID":72,"groupIDs":[74,92],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":375,"root_column":5,"root_url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"testStart","time":17669}
+{"testID":98,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":17678}
+{"test":{"id":99,"name":"MultiProvider with ProxyProvider2","suiteID":72,"groupIDs":[74,92],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":397,"root_column":5,"root_url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"testStart","time":17679}
+{"testID":99,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":17686}
+{"test":{"id":100,"name":"MultiProvider with ProxyProvider3","suiteID":72,"groupIDs":[74,92],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":420,"root_column":5,"root_url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"testStart","time":17687}
+{"testID":100,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":17696}
+{"test":{"id":101,"name":"MultiProvider with ProxyProvider4","suiteID":72,"groupIDs":[74,92],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":444,"root_column":5,"root_url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"testStart","time":17696}
+{"testID":101,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":17705}
+{"test":{"id":102,"name":"MultiProvider with ProxyProvider5","suiteID":72,"groupIDs":[74,92],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":469,"root_column":5,"root_url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"testStart","time":17706}
+{"testID":102,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":17713}
+{"test":{"id":103,"name":"MultiProvider with ProxyProvider6","suiteID":72,"groupIDs":[74,92],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":495,"root_column":5,"root_url":"file:///__w/provider/provider/test/builder_test.dart"},"type":"testStart","time":17714}
+{"testID":103,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":17721}
+{"suite":{"id":104,"platform":"vm","path":"/__w/provider/provider/test/multi_provider_test.dart"},"type":"suite","time":18713}
+{"test":{"id":105,"name":"loading /__w/provider/provider/test/multi_provider_test.dart","suiteID":104,"groupIDs":[],"metadata":{"skip":false,"skipReason":null},"line":null,"column":null,"url":null},"type":"testStart","time":18714}
+{"testID":105,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":19318}
+{"group":{"id":106,"suiteID":104,"parentID":null,"name":"","metadata":{"skip":false,"skipReason":null},"testCount":3,"line":null,"column":null,"url":null},"type":"group","time":19318}
+{"group":{"id":107,"suiteID":104,"parentID":106,"name":"MultiProvider","metadata":{"skip":false,"skipReason":null},"testCount":3,"line":8,"column":3,"url":"file:///__w/provider/provider/test/multi_provider_test.dart"},"type":"group","time":19318}
+{"test":{"id":108,"name":"MultiProvider throw if providers is null","suiteID":104,"groupIDs":[106,107],"metadata":{"skip":false,"skipReason":null},"line":9,"column":5,"url":"file:///__w/provider/provider/test/multi_provider_test.dart"},"type":"testStart","time":19318}
+{"testID":108,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":19348}
+{"test":{"id":109,"name":"MultiProvider MultiProvider children can only access parent providers","suiteID":104,"groupIDs":[106,107],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":16,"root_column":5,"root_url":"file:///__w/provider/provider/test/multi_provider_test.dart"},"type":"testStart","time":19348}
+{"testID":109,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":19508}
+{"test":{"id":110,"name":"MultiProvider MultiProvider.providers with ignored child","suiteID":104,"groupIDs":[106,107],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":75,"root_column":5,"root_url":"file:///__w/provider/provider/test/multi_provider_test.dart"},"type":"testStart","time":19508}
+{"testID":110,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":19516}
+{"suite":{"id":111,"platform":"vm","path":"/__w/provider/provider/test/stream_provider_test.dart"},"type":"suite","time":20378}
+{"test":{"id":112,"name":"loading /__w/provider/provider/test/stream_provider_test.dart","suiteID":111,"groupIDs":[],"metadata":{"skip":false,"skipReason":null},"line":null,"column":null,"url":null},"type":"testStart","time":20379}
+{"testID":112,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":20991}
+{"group":{"id":113,"suiteID":111,"parentID":null,"name":"","metadata":{"skip":false,"skipReason":null},"testCount":8,"line":null,"column":null,"url":null},"type":"group","time":20991}
+{"test":{"id":114,"name":"works with MultiProvider","suiteID":111,"groupIDs":[113],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":15,"root_column":3,"root_url":"file:///__w/provider/provider/test/stream_provider_test.dart"},"type":"testStart","time":20991}
+{"testID":114,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":21182}
+{"test":{"id":115,"name":"transition from stream to stream preserve state","suiteID":111,"groupIDs":[113],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":35,"root_column":3,"root_url":"file:///__w/provider/provider/test/stream_provider_test.dart"},"type":"testStart","time":21183}
+{"testID":115,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":21199}
+{"test":{"id":116,"name":"throws if stream has error and catchError is missing","suiteID":111,"groupIDs":[113],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":84,"root_column":3,"root_url":"file:///__w/provider/provider/test/stream_provider_test.dart"},"type":"testStart","time":21200}
+{"testID":116,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":21222}
+{"test":{"id":117,"name":"calls catchError if present and stream has error","suiteID":111,"groupIDs":[113],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":109,"root_column":3,"root_url":"file:///__w/provider/provider/test/stream_provider_test.dart"},"type":"testStart","time":21222}
+{"testID":117,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":21242}
+{"test":{"id":118,"name":"works with null","suiteID":111,"groupIDs":[113],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":134,"root_column":3,"root_url":"file:///__w/provider/provider/test/stream_provider_test.dart"},"type":"testStart","time":21243}
+{"testID":118,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":21256}
+{"test":{"id":119,"name":"StreamProvider() crashes if builder is null","suiteID":111,"groupIDs":[113],"metadata":{"skip":false,"skipReason":null},"line":148,"column":3,"url":"file:///__w/provider/provider/test/stream_provider_test.dart"},"type":"testStart","time":21256}
+{"testID":119,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":21261}
+{"group":{"id":120,"suiteID":111,"parentID":113,"name":"StreamProvider()","metadata":{"skip":false,"skipReason":null},"testCount":2,"line":155,"column":3,"url":"file:///__w/provider/provider/test/stream_provider_test.dart"},"type":"group","time":21261}
+{"test":{"id":121,"name":"StreamProvider() crashes if builder is null","suiteID":111,"groupIDs":[113,120],"metadata":{"skip":false,"skipReason":null},"line":156,"column":5,"url":"file:///__w/provider/provider/test/stream_provider_test.dart"},"type":"testStart","time":21261}
+{"testID":121,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":21265}
+{"test":{"id":122,"name":"StreamProvider() create and dispose stream with builder","suiteID":111,"groupIDs":[113,120],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":163,"root_column":5,"root_url":"file:///__w/provider/provider/test/stream_provider_test.dart"},"type":"testStart","time":21265}
+{"testID":122,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":21276}
+{"suite":{"id":123,"platform":"vm","path":"/__w/provider/provider/test/context_test.dart"},"type":"suite","time":22351}
+{"test":{"id":124,"name":"loading /__w/provider/provider/test/context_test.dart","suiteID":123,"groupIDs":[],"metadata":{"skip":false,"skipReason":null},"line":null,"column":null,"url":null},"type":"testStart","time":22351}
+{"testID":124,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":23043}
+{"group":{"id":125,"suiteID":123,"parentID":null,"name":"","metadata":{"skip":false,"skipReason":null},"testCount":31,"line":null,"column":null,"url":null},"type":"group","time":23044}
+{"test":{"id":126,"name":"watch in layoutbuilder","suiteID":123,"groupIDs":[125],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":8,"root_column":3,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23044}
+{"testID":126,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23223}
+{"test":{"id":127,"name":"select in layoutbuilder","suiteID":123,"groupIDs":[125],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":23,"root_column":3,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23223}
+{"testID":127,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23235}
+{"test":{"id":128,"name":"cannot select in listView","suiteID":123,"groupIDs":[125],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":38,"root_column":3,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23235}
+{"testID":128,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23373}
+{"test":{"id":129,"name":"watch in listView","suiteID":123,"groupIDs":[125],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":64,"root_column":3,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23374}
+{"testID":129,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23407}
+{"test":{"id":130,"name":"watch in gridView","suiteID":123,"groupIDs":[125],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":96,"root_column":3,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23407}
+{"testID":130,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23428}
+{"group":{"id":131,"suiteID":123,"parentID":125,"name":"BuildContext","metadata":{"skip":false,"skipReason":null},"testCount":25,"line":132,"column":3,"url":"file:///__w/provider/provider/test/context_test.dart"},"type":"group","time":23428}
+{"test":{"id":132,"name":"BuildContext internal selected value is updated","suiteID":123,"groupIDs":[125,131],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":133,"root_column":5,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23428}
+{"testID":132,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23460}
+{"test":{"id":133,"name":"BuildContext create can use read without being lazy","suiteID":123,"groupIDs":[125,131],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":216,"root_column":5,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23461}
+{"testID":133,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23472}
+{"test":{"id":134,"name":"BuildContext watch can be used inside InheritedProvider.update","suiteID":123,"groupIDs":[125,131],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":237,"root_column":5,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23472}
+{"testID":134,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23482}
+{"test":{"id":135,"name":"BuildContext select doesn't fail if it loads a provider that depends on other providers","suiteID":123,"groupIDs":[125,131],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":256,"root_column":5,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23482}
+{"testID":135,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23491}
+{"test":{"id":136,"name":"BuildContext don't call old selectors if the child rebuilds individually","suiteID":123,"groupIDs":[125,131],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":279,"root_column":5,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23492}
+{"testID":136,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23513}
+{"test":{"id":137,"name":"BuildContext selects throws inside click handlers","suiteID":123,"groupIDs":[125,131],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":316,"root_column":5,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23513}
+{"testID":137,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23553}
+{"test":{"id":138,"name":"BuildContext select throws if try to read dynamic","suiteID":123,"groupIDs":[125,131],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":337,"root_column":5,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23553}
+{"testID":138,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23562}
+{"test":{"id":139,"name":"BuildContext select throws ProviderNotFoundException","suiteID":123,"groupIDs":[125,131],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":347,"root_column":5,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23562}
+{"testID":139,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23571}
+{"test":{"id":140,"name":"BuildContext select throws if watch called inside the callback from build","suiteID":123,"groupIDs":[125,131],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":357,"root_column":5,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23572}
+{"testID":140,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23578}
+{"test":{"id":141,"name":"BuildContext select throws if read called inside the callback from build","suiteID":123,"groupIDs":[125,131],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":374,"root_column":5,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23579}
+{"testID":141,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23588}
+{"test":{"id":142,"name":"BuildContext select throws if select called inside the callback from build","suiteID":123,"groupIDs":[125,131],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":391,"root_column":5,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23588}
+{"testID":142,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23596}
+{"test":{"id":143,"name":"BuildContext select throws if read called inside the callback on dependency change","suiteID":123,"groupIDs":[125,131],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":408,"root_column":5,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23597}
+{"testID":143,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23607}
+{"test":{"id":144,"name":"BuildContext select throws if watch called inside the callback on dependency change","suiteID":123,"groupIDs":[125,131],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":441,"root_column":5,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23608}
+{"testID":144,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23625}
+{"test":{"id":145,"name":"BuildContext select throws if select called inside the callback on dependency change","suiteID":123,"groupIDs":[125,131],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":474,"root_column":5,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23625}
+{"testID":145,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23634}
+{"test":{"id":146,"name":"BuildContext can call read inside didChangeDependencies","suiteID":123,"groupIDs":[125,131],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":507,"root_column":5,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23634}
+{"testID":146,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23643}
+{"test":{"id":147,"name":"BuildContext select cannot be called inside didChangeDependencies","suiteID":123,"groupIDs":[125,131],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":522,"root_column":5,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23643}
+{"testID":147,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23649}
+{"test":{"id":148,"name":"BuildContext select in initState throws","suiteID":123,"groupIDs":[125,131],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":543,"root_column":5,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23650}
+{"testID":148,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23656}
+{"test":{"id":149,"name":"BuildContext watch in initState throws","suiteID":123,"groupIDs":[125,131],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":558,"root_column":5,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23657}
+{"testID":149,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23667}
+{"test":{"id":150,"name":"BuildContext read in initState works","suiteID":123,"groupIDs":[125,131],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":573,"root_column":5,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23668}
+{"testID":150,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23674}
+{"test":{"id":151,"name":"BuildContext consumer can be removed and selector stops to be called","suiteID":123,"groupIDs":[125,131],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":589,"root_column":5,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23675}
+{"testID":151,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23682}
+{"test":{"id":152,"name":"BuildContext context.select deeply compares maps","suiteID":123,"groupIDs":[125,131],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":629,"root_column":5,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23683}
+{"testID":152,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23698}
+{"test":{"id":153,"name":"BuildContext context.select deeply compares lists","suiteID":123,"groupIDs":[125,131],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":666,"root_column":5,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23698}
+{"testID":153,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23706}
+{"test":{"id":154,"name":"BuildContext context.select deeply compares iterables","suiteID":123,"groupIDs":[125,131],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":702,"root_column":5,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23706}
+{"testID":154,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23714}
+{"test":{"id":155,"name":"BuildContext context.select deeply compares sets","suiteID":123,"groupIDs":[125,131],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":738,"root_column":5,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23715}
+{"testID":155,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23726}
+{"test":{"id":156,"name":"BuildContext context.watch listens to value changes","suiteID":123,"groupIDs":[125,131],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":774,"root_column":5,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23727}
+{"testID":156,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23737}
+{"test":{"id":157,"name":"clears select dependencies for all dependents","suiteID":123,"groupIDs":[125],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":799,"root_column":3,"root_url":"file:///__w/provider/provider/test/context_test.dart"},"type":"testStart","time":23738}
+{"testID":157,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":23757}
+{"suite":{"id":158,"platform":"vm","path":"/__w/provider/provider/test/reassemble_test.dart"},"type":"suite","time":24634}
+{"test":{"id":159,"name":"loading /__w/provider/provider/test/reassemble_test.dart","suiteID":158,"groupIDs":[],"metadata":{"skip":false,"skipReason":null},"line":null,"column":null,"url":null},"type":"testStart","time":24634}
+{"testID":159,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":25251}
+{"group":{"id":160,"suiteID":158,"parentID":null,"name":"","metadata":{"skip":false,"skipReason":null},"testCount":3,"line":null,"column":null,"url":null},"type":"group","time":25251}
+{"test":{"id":161,"name":"ReassembleHandler","suiteID":158,"groupIDs":[160],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":15,"root_column":3,"root_url":"file:///__w/provider/provider/test/reassemble_test.dart"},"type":"testStart","time":25252}
+{"testID":161,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":25446}
+{"test":{"id":162,"name":"unevaluated create","suiteID":158,"groupIDs":[160],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":31,"root_column":3,"root_url":"file:///__w/provider/provider/test/reassemble_test.dart"},"type":"testStart","time":25447}
+{"testID":162,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":25458}
+{"test":{"id":163,"name":"unevaluated create","suiteID":158,"groupIDs":[160],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":47,"root_column":3,"root_url":"file:///__w/provider/provider/test/reassemble_test.dart"},"type":"testStart","time":25458}
+{"testID":163,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":25474}
+{"suite":{"id":164,"platform":"vm","path":"/__w/provider/provider/test/future_provider_test.dart"},"type":"suite","time":26552}
+{"test":{"id":165,"name":"loading /__w/provider/provider/test/future_provider_test.dart","suiteID":164,"groupIDs":[],"metadata":{"skip":false,"skipReason":null},"line":null,"column":null,"url":null},"type":"testStart","time":26552}
+{"testID":165,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":27478}
+{"group":{"id":166,"suiteID":164,"parentID":null,"name":"","metadata":{"skip":false,"skipReason":null},"testCount":10,"line":null,"column":null,"url":null},"type":"group","time":27479}
+{"test":{"id":167,"name":"works with MultiProvider","suiteID":164,"groupIDs":[166],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":15,"root_column":3,"root_url":"file:///__w/provider/provider/test/future_provider_test.dart"},"type":"testStart","time":27479}
+{"testID":167,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":27663}
+{"test":{"id":168,"name":"(catchError) previous future completes after transition is no-op","suiteID":164,"groupIDs":[166],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":34,"root_column":3,"root_url":"file:///__w/provider/provider/test/future_provider_test.dart"},"type":"testStart","time":27664}
+{"testID":168,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":27680}
+{"test":{"id":169,"name":"previous future completes after transition is no-op","suiteID":164,"groupIDs":[166],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":73,"root_column":3,"root_url":"file:///__w/provider/provider/test/future_provider_test.dart"},"type":"testStart","time":27681}
+{"testID":169,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":27696}
+{"test":{"id":170,"name":"transition from future to future preserve state","suiteID":164,"groupIDs":[166],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":110,"root_column":3,"root_url":"file:///__w/provider/provider/test/future_provider_test.dart"},"type":"testStart","time":27697}
+{"testID":170,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":27709}
+{"test":{"id":171,"name":"throws if future has error and catchError is missing","suiteID":164,"groupIDs":[166],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":148,"root_column":3,"root_url":"file:///__w/provider/provider/test/future_provider_test.dart"},"type":"testStart","time":27709}
+{"testID":171,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":27733}
+{"test":{"id":172,"name":"calls catchError if present and future has error","suiteID":164,"groupIDs":[166],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":172,"root_column":3,"root_url":"file:///__w/provider/provider/test/future_provider_test.dart"},"type":"testStart","time":27733}
+{"testID":172,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":27754}
+{"test":{"id":173,"name":"works with null","suiteID":164,"groupIDs":[166],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":196,"root_column":3,"root_url":"file:///__w/provider/provider/test/future_provider_test.dart"},"type":"testStart","time":27754}
+{"testID":173,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":27768}
+{"test":{"id":174,"name":"FutureProvider() crashes if builder is null","suiteID":164,"groupIDs":[166],"metadata":{"skip":false,"skipReason":null},"line":210,"column":3,"url":"file:///__w/provider/provider/test/future_provider_test.dart"},"type":"testStart","time":27769}
+{"testID":174,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":27773}
+{"group":{"id":175,"suiteID":164,"parentID":166,"name":"FutureProvider()","metadata":{"skip":false,"skipReason":null},"testCount":1,"line":217,"column":3,"url":"file:///__w/provider/provider/test/future_provider_test.dart"},"type":"group","time":27773}
+{"test":{"id":176,"name":"FutureProvider() crashes if builder is null","suiteID":164,"groupIDs":[166,175],"metadata":{"skip":false,"skipReason":null},"line":218,"column":5,"url":"file:///__w/provider/provider/test/future_provider_test.dart"},"type":"testStart","time":27773}
+{"testID":176,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":27776}
+{"test":{"id":177,"name":"create and dispose future with builder","suiteID":164,"groupIDs":[166],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":225,"root_column":3,"root_url":"file:///__w/provider/provider/test/future_provider_test.dart"},"type":"testStart","time":27776}
+{"testID":177,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":27788}
+{"suite":{"id":178,"platform":"vm","path":"/__w/provider/provider/test/provider_test.dart"},"type":"suite","time":28601}
+{"test":{"id":179,"name":"loading /__w/provider/provider/test/provider_test.dart","suiteID":178,"groupIDs":[],"metadata":{"skip":false,"skipReason":null},"line":null,"column":null,"url":null},"type":"testStart","time":28601}
+{"testID":179,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":29400}
+{"group":{"id":180,"suiteID":178,"parentID":null,"name":"","metadata":{"skip":false,"skipReason":null},"testCount":11,"line":null,"column":null,"url":null},"type":"group","time":29400}
+{"test":{"id":181,"name":"works with MultiProvider","suiteID":178,"groupIDs":[180],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":9,"root_column":3,"root_url":"file:///__w/provider/provider/test/provider_test.dart"},"type":"testStart","time":29401}
+{"testID":181,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":29573}
+{"group":{"id":182,"suiteID":178,"parentID":180,"name":"Provider.of","metadata":{"skip":false,"skipReason":null},"testCount":5,"line":23,"column":3,"url":"file:///__w/provider/provider/test/provider_test.dart"},"type":"group","time":29574}
+{"test":{"id":183,"name":"Provider.of throws if T is dynamic","suiteID":178,"groupIDs":[180,182],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":24,"root_column":5,"root_url":"file:///__w/provider/provider/test/provider_test.dart"},"type":"testStart","time":29574}
+{"testID":183,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":29600}
+{"test":{"id":184,"name":"Provider.of listen defaults to true when building widgets","suiteID":178,"groupIDs":[180,182],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":37,"root_column":5,"root_url":"file:///__w/provider/provider/test/provider_test.dart"},"type":"testStart","time":29600}
+{"testID":184,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":29613}
+{"test":{"id":185,"name":"Provider.of listen defaults to false outside of the widget tree","suiteID":178,"groupIDs":[180,182],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":68,"root_column":5,"root_url":"file:///__w/provider/provider/test/provider_test.dart"},"type":"testStart","time":29613}
+{"testID":185,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":29622}
+{"test":{"id":186,"name":"Provider.of listen:false doesn't trigger rebuild","suiteID":178,"groupIDs":[180,182],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":100,"root_column":5,"root_url":"file:///__w/provider/provider/test/provider_test.dart"},"type":"testStart","time":29622}
+{"testID":186,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":29632}
+{"test":{"id":187,"name":"Provider.of listen:true outside of the widget tree throws","suiteID":178,"groupIDs":[180,182],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":131,"root_column":5,"root_url":"file:///__w/provider/provider/test/provider_test.dart"},"type":"testStart","time":29633}
+{"testID":187,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":29644}
+{"group":{"id":188,"suiteID":178,"parentID":180,"name":"Provider","metadata":{"skip":false,"skipReason":null},"testCount":5,"line":156,"column":3,"url":"file:///__w/provider/provider/test/provider_test.dart"},"type":"group","time":29645}
+{"test":{"id":189,"name":"Provider throws if the provided value is a Listenable/Stream","suiteID":178,"groupIDs":[180,188],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":157,"root_column":5,"root_url":"file:///__w/provider/provider/test/provider_test.dart"},"type":"testStart","time":29645}
+{"testID":189,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":29673}
+{"test":{"id":190,"name":"Provider debugCheckInvalidValueType can be disabled","suiteID":178,"groupIDs":[180,188],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":194,"root_column":5,"root_url":"file:///__w/provider/provider/test/provider_test.dart"},"type":"testStart","time":29673}
+{"testID":190,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":29682}
+{"test":{"id":191,"name":"Provider simple usage","suiteID":178,"groupIDs":[180,188],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":214,"root_column":5,"root_url":"file:///__w/provider/provider/test/provider_test.dart"},"type":"testStart","time":29682}
+{"testID":191,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":29691}
+{"test":{"id":192,"name":"Provider throws an error if no provider found","suiteID":178,"groupIDs":[180,188],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":287,"root_column":5,"root_url":"file:///__w/provider/provider/test/provider_test.dart"},"type":"testStart","time":29692}
+{"testID":192,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":29703}
+{"test":{"id":193,"name":"Provider update should notify","suiteID":178,"groupIDs":[180,188],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":301,"root_column":5,"root_url":"file:///__w/provider/provider/test/provider_test.dart"},"type":"testStart","time":29703}
+{"testID":193,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":29711}
+{"suite":{"id":194,"platform":"vm","path":"/__w/provider/provider/test/inherited_provider_test.dart"},"type":"suite","time":30742}
+{"test":{"id":195,"name":"loading /__w/provider/provider/test/inherited_provider_test.dart","suiteID":194,"groupIDs":[],"metadata":{"skip":false,"skipReason":null},"line":null,"column":null,"url":null},"type":"testStart","time":30742}
+{"testID":195,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":31545}
+{"group":{"id":196,"suiteID":194,"parentID":null,"name":"","metadata":{"skip":false,"skipReason":null},"testCount":81,"line":null,"column":null,"url":null},"type":"group","time":31545}
+{"test":{"id":197,"name":"regression test #377","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":25,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":31545}
+{"testID":197,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":31712}
+{"test":{"id":198,"name":"rebuild on dependency flags update","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":44,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":31712}
+{"testID":198,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":31727}
+{"test":{"id":199,"name":"properly update debug flags if a create triggers another deferred create","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":69,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":31727}
+{"testID":199,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":31736}
+{"test":{"id":200,"name":"properly update debug flags if a create triggers another deferred create","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":114,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":31736}
+{"testID":200,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":31744}
+{"test":{"id":201,"name":"properly update debug flags if an update triggers another create/update","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":160,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":31744}
+{"testID":201,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":31751}
+{"test":{"id":202,"name":"properly update debug flags if a create triggers another create/update","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":208,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":31751}
+{"testID":202,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":31759}
+{"test":{"id":203,"name":"Provider.of(listen: false) outside of build works when it loads a provider","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":265,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":31759}
+{"testID":203,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":31781}
+{"test":{"id":204,"name":"new value is available in didChangeDependencies","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":286,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":31782}
+{"testID":204,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":31808}
+{"test":{"id":205,"name":"builder receives the current value and updates independently from `update`","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":320,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":31808}
+{"testID":205,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":31824}
+{"test":{"id":206,"name":"builder can _not_ rebuild when provider updates","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":353,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":31824}
+{"testID":206,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":31832}
+{"test":{"id":207,"name":"Provider.of has a proper error message if context is null","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":380,"column":3,"url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":31832}
+{"testID":207,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":31838}
+{"test":{"id":208,"name":"builder rebuilds if provider is recreated","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":383,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":31838}
+{"testID":208,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":31847}
+{"test":{"id":209,"name":"provider.of throws if listen:true outside of the widget tree","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":415,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":31848}
+{"testID":209,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":31871}
+{"test":{"id":210,"name":"InheritedProvider throws if no child is provided with default constructor","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":451,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":31872}
+{"testID":210,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":31886}
+{"test":{"id":211,"name":"InheritedProvider throws if no child is provided with value constructor","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":471,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":31886}
+{"testID":211,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":31894}
+{"test":{"id":212,"name":"DeferredInheritedProvider throws if no child is provided with default constructor","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":491,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":31894}
+{"testID":212,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":31909}
+{"test":{"id":213,"name":"DeferredInheritedProvider throws if no child is provided with value constructor","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":514,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":31909}
+{"testID":213,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":31916}
+{"group":{"id":214,"suiteID":194,"parentID":196,"name":"diagnostics","metadata":{"skip":false,"skipReason":null},"testCount":5,"line":536,"column":3,"url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"group","time":31917}
+{"test":{"id":215,"name":"diagnostics InheritedProvider.value","suiteID":194,"groupIDs":[196,214],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":537,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":31917}
+{"testID":215,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":31928}
+{"test":{"id":216,"name":"diagnostics InheritedProvider doesn't break lazy loading","suiteID":194,"groupIDs":[196,214],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":566,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":31929}
+{"testID":216,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":31936}
+{"test":{"id":217,"name":"diagnostics InheritedProvider show if listening","suiteID":194,"groupIDs":[196,214],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":588,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":31936}
+{"testID":217,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":31943}
+{"test":{"id":218,"name":"diagnostics DeferredInheritedProvider.value","suiteID":194,"groupIDs":[196,214],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":611,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":31944}
+{"testID":218,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":31950}
+{"test":{"id":219,"name":"diagnostics DeferredInheritedProvider","suiteID":194,"groupIDs":[196,214],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":641,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":31951}
+{"testID":219,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":31967}
+{"group":{"id":220,"suiteID":194,"parentID":196,"name":"InheritedProvider.value()","metadata":{"skip":false,"skipReason":null},"testCount":8,"line":673,"column":3,"url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"group","time":31967}
+{"test":{"id":221,"name":"InheritedProvider.value() markNeedsNotifyDependents during startListening is noop","suiteID":194,"groupIDs":[196,220],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":674,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":31967}
+{"testID":221,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":31975}
+{"test":{"id":222,"name":"InheritedProvider.value() startListening called again when create returns new value","suiteID":194,"groupIDs":[196,220],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":687,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":31976}
+{"testID":222,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32003}
+{"test":{"id":223,"name":"InheritedProvider.value() startListening","suiteID":194,"groupIDs":[196,220],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":730,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32003}
+{"testID":223,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32022}
+{"test":{"id":224,"name":"InheritedProvider.value() stopListening not called twice if rebuild doesn't have listeners","suiteID":194,"groupIDs":[196,220],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":774,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32022}
+{"testID":224,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32038}
+{"test":{"id":225,"name":"InheritedProvider.value() removeListener cannot be null","suiteID":194,"groupIDs":[196,220],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":814,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32039}
+{"testID":225,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32061}
+{"test":{"id":226,"name":"InheritedProvider.value() pass down current value","suiteID":194,"groupIDs":[196,220],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":826,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32061}
+{"testID":226,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32078}
+{"test":{"id":227,"name":"InheritedProvider.value() default updateShouldNotify","suiteID":194,"groupIDs":[196,220],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":847,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32078}
+{"testID":227,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32086}
+{"test":{"id":228,"name":"InheritedProvider.value() custom updateShouldNotify","suiteID":194,"groupIDs":[196,220],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":870,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32086}
+{"testID":228,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32118}
+{"group":{"id":229,"suiteID":194,"parentID":196,"name":"InheritedProvider()","metadata":{"skip":false,"skipReason":null},"testCount":25,"line":914,"column":3,"url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"group","time":32118}
+{"test":{"id":230,"name":"InheritedProvider() hasValue","suiteID":194,"groupIDs":[196,229],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":915,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32118}
+{"testID":230,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32134}
+{"test":{"id":231,"name":"InheritedProvider() provider calls update if rebuilding only due to didChangeDependencies","suiteID":194,"groupIDs":[196,229],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":932,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32134}
+{"testID":231,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32143}
+{"test":{"id":232,"name":"InheritedProvider() provider notifying dependents doesn't call update","suiteID":194,"groupIDs":[196,229],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":958,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32144}
+{"testID":232,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32155}
+{"test":{"id":233,"name":"InheritedProvider() update can call Provider.of with listen:true","suiteID":194,"groupIDs":[196,229],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":990,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32155}
+{"testID":233,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32162}
+{"test":{"id":234,"name":"InheritedProvider() update lazy loaded can call Provider.of with listen:true","suiteID":194,"groupIDs":[196,229],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1004,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32163}
+{"testID":234,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32173}
+{"test":{"id":235,"name":"InheritedProvider() markNeedsNotifyDependents during startListening is noop","suiteID":194,"groupIDs":[196,229],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1018,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32177}
+{"testID":235,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32199}
+{"test":{"id":236,"name":"InheritedProvider() update can obtain parent of the same type than self","suiteID":194,"groupIDs":[196,229],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1031,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32199}
+{"testID":236,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32214}
+{"test":{"id":237,"name":"InheritedProvider() _debugCheckInvalidValueType","suiteID":194,"groupIDs":[196,229],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1049,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32215}
+{"testID":237,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32237}
+{"test":{"id":238,"name":"InheritedProvider() startListening","suiteID":194,"groupIDs":[196,229],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1090,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32237}
+{"testID":238,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32255}
+{"test":{"id":239,"name":"InheritedProvider() startListening called again when create returns new value","suiteID":194,"groupIDs":[196,229],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1135,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32256}
+{"testID":239,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32276}
+{"test":{"id":240,"name":"InheritedProvider() stopListening not called twice if rebuild doesn't have listeners","suiteID":194,"groupIDs":[196,229],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1179,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32277}
+{"testID":240,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32295}
+{"test":{"id":241,"name":"InheritedProvider() removeListener cannot be null","suiteID":194,"groupIDs":[196,229],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1219,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32296}
+{"testID":241,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32312}
+{"test":{"id":242,"name":"InheritedProvider() fails if initialValueBuilder calls inheritFromElement/inheritFromWiggetOfExactType","suiteID":194,"groupIDs":[196,229],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1230,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32313}
+{"testID":242,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32330}
+{"test":{"id":243,"name":"InheritedProvider() builder is called on every rebuild and after a dependency change","suiteID":194,"groupIDs":[196,229],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1248,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32331}
+{"testID":243,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32342}
+{"test":{"id":244,"name":"InheritedProvider() builder with no updateShouldNotify use ==","suiteID":194,"groupIDs":[196,229],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1299,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32343}
+{"testID":244,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32351}
+{"test":{"id":245,"name":"InheritedProvider() builder calls updateShouldNotify callback","suiteID":194,"groupIDs":[196,229],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1346,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32352}
+{"testID":245,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32360}
+{"test":{"id":246,"name":"InheritedProvider() initialValue is transmitted to valueBuilder","suiteID":194,"groupIDs":[196,229],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1402,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32361}
+{"testID":246,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32369}
+{"test":{"id":247,"name":"InheritedProvider() calls builder again if dependencies change","suiteID":194,"groupIDs":[196,229],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1418,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32369}
+{"testID":247,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32391}
+{"test":{"id":248,"name":"InheritedProvider() exposes initialValue if valueBuilder is null","suiteID":194,"groupIDs":[196,229],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1473,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32391}
+{"testID":248,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32411}
+{"test":{"id":249,"name":"InheritedProvider() call dispose on unmount","suiteID":194,"groupIDs":[196,229],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1483,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32412}
+{"testID":249,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32434}
+{"test":{"id":250,"name":"InheritedProvider() builder unmount, dispose not called if value never read","suiteID":194,"groupIDs":[196,229],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1504,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32435}
+{"testID":250,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32446}
+{"test":{"id":251,"name":"InheritedProvider() call dispose after new value","suiteID":194,"groupIDs":[196,229],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1520,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32447}
+{"testID":251,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32456}
+{"test":{"id":252,"name":"InheritedProvider() valueBuilder works without initialBuilder","suiteID":194,"groupIDs":[196,229],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1561,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32456}
+{"testID":252,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32467}
+{"test":{"id":253,"name":"InheritedProvider() throws if both builder and initialBuilder are missing","suiteID":194,"groupIDs":[196,229],"metadata":{"skip":false,"skipReason":null},"line":1589,"column":5,"url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32467}
+{"testID":253,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32472}
+{"test":{"id":254,"name":"InheritedProvider() calls initialValueBuilder lazily once","suiteID":194,"groupIDs":[196,229],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1595,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32473}
+{"testID":254,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32480}
+{"group":{"id":255,"suiteID":194,"parentID":196,"name":"DeferredInheritedProvider.value()","metadata":{"skip":false,"skipReason":null},"testCount":8,"line":1625,"column":3,"url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"group","time":32481}
+{"test":{"id":256,"name":"DeferredInheritedProvider.value() hasValue","suiteID":194,"groupIDs":[196,255],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1626,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32481}
+{"testID":256,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32487}
+{"test":{"id":257,"name":"DeferredInheritedProvider.value() startListening","suiteID":194,"groupIDs":[196,255],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1643,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32488}
+{"testID":257,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32497}
+{"test":{"id":258,"name":"DeferredInheritedProvider.value() stopListening cannot be null","suiteID":194,"groupIDs":[196,255],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1694,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32497}
+{"testID":258,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32506}
+{"test":{"id":259,"name":"DeferredInheritedProvider.value() startListening doesn't need setState if already initialized","suiteID":194,"groupIDs":[196,255],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1722,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32506}
+{"testID":259,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32514}
+{"test":{"id":260,"name":"DeferredInheritedProvider.value() setState without updateShouldNotify","suiteID":194,"groupIDs":[196,255],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1762,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32515}
+{"testID":260,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32523}
+{"test":{"id":261,"name":"DeferredInheritedProvider.value() setState with updateShouldNotify","suiteID":194,"groupIDs":[196,255],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1804,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32523}
+{"testID":261,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32532}
+{"test":{"id":262,"name":"DeferredInheritedProvider.value() startListening never leave the widget uninitialized","suiteID":194,"groupIDs":[196,255],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1858,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32532}
+{"testID":262,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32540}
+{"test":{"id":263,"name":"DeferredInheritedProvider.value() startListening called again on controller change","suiteID":194,"groupIDs":[196,255],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1880,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32541}
+{"testID":263,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32551}
+{"group":{"id":264,"suiteID":194,"parentID":196,"name":"DeferredInheritedProvider()","metadata":{"skip":false,"skipReason":null},"testCount":4,"line":1947,"column":3,"url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"group","time":32552}
+{"test":{"id":265,"name":"DeferredInheritedProvider() create can't call inherited widgets","suiteID":194,"groupIDs":[196,264],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1948,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32552}
+{"testID":265,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32559}
+{"test":{"id":266,"name":"DeferredInheritedProvider() creates the value lazily","suiteID":194,"groupIDs":[196,264],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":1968,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32560}
+{"testID":266,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32567}
+{"test":{"id":267,"name":"DeferredInheritedProvider() dispose","suiteID":194,"groupIDs":[196,264],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":2002,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32568}
+{"testID":267,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32575}
+{"test":{"id":268,"name":"DeferredInheritedProvider() dispose no-op if never built","suiteID":194,"groupIDs":[196,264],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":2030,"root_column":5,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32576}
+{"testID":268,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32583}
+{"test":{"id":269,"name":"startListening markNeedsNotifyDependents","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":2053,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32583}
+{"testID":269,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32590}
+{"test":{"id":270,"name":"InheritedProvider can be subclassed","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":2085,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32591}
+{"testID":270,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32599}
+{"test":{"id":271,"name":"DeferredInheritedProvider can be subclassed","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":2106,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32599}
+{"testID":271,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32606}
+{"test":{"id":272,"name":"can be used with MultiProvider","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":2128,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32607}
+{"testID":272,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32615}
+{"test":{"id":273,"name":"throw if the widget ctor changes","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":2141,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32615}
+{"testID":273,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32623}
+{"test":{"id":274,"name":"InheritedProvider lazy loading can be disabled","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":2161,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32624}
+{"testID":274,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32630}
+{"test":{"id":275,"name":"InheritedProvider.value lazy loading can be disabled","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":2176,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32631}
+{"testID":275,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32640}
+{"test":{"id":276,"name":"InheritedProvider subclass don't have to specify default lazy value","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":2193,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32641}
+{"testID":276,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32648}
+{"test":{"id":277,"name":"DeferredInheritedProvider lazy loading can be disabled","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":2212,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32648}
+{"testID":277,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32655}
+{"test":{"id":278,"name":"DeferredInheritedProvider.value lazy loading can be disabled","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":2234,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32656}
+{"testID":278,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32663}
+{"test":{"id":279,"name":"selector","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":2257,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32664}
+{"testID":279,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32678}
+{"test":{"id":280,"name":"can select multiple types from same provider","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":2290,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32678}
+{"testID":280,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32687}
+{"test":{"id":281,"name":"can select same type on two different providers","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":2321,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32688}
+{"testID":281,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32696}
+{"test":{"id":282,"name":"can select same type twice on same provider","suiteID":194,"groupIDs":[196],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":2371,"root_column":3,"root_url":"file:///__w/provider/provider/test/inherited_provider_test.dart"},"type":"testStart","time":32697}
+{"testID":282,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":32707}
+{"suite":{"id":283,"platform":"vm","path":"/__w/provider/provider/test/listenable_proxy_provider_test.dart"},"type":"suite","time":33580}
+{"test":{"id":284,"name":"loading /__w/provider/provider/test/listenable_proxy_provider_test.dart","suiteID":283,"groupIDs":[],"metadata":{"skip":false,"skipReason":null},"line":null,"column":null,"url":null},"type":"testStart","time":33580}
+{"testID":284,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":34231}
+{"group":{"id":285,"suiteID":283,"parentID":null,"name":"","metadata":{"skip":false,"skipReason":null},"testCount":12,"line":null,"column":null,"url":null},"type":"group","time":34233}
+{"group":{"id":286,"suiteID":283,"parentID":285,"name":"ListenableProxyProvider","metadata":{"skip":false,"skipReason":null},"testCount":6,"line":31,"column":3,"url":"file:///__w/provider/provider/test/listenable_proxy_provider_test.dart"},"type":"group","time":34233}
+{"test":{"id":287,"name":"ListenableProxyProvider throws if update is missing","suiteID":283,"groupIDs":[285,286],"metadata":{"skip":false,"skipReason":null},"line":32,"column":5,"url":"file:///__w/provider/provider/test/listenable_proxy_provider_test.dart"},"type":"testStart","time":34233}
+{"testID":287,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":34276}
+{"test":{"id":288,"name":"ListenableProxyProvider asserts that the created notifier has no listener","suiteID":283,"groupIDs":[285,286],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":83,"root_column":5,"root_url":"file:///__w/provider/provider/test/listenable_proxy_provider_test.dart"},"type":"testStart","time":34277}
+{"testID":288,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":34454}
+{"test":{"id":289,"name":"ListenableProxyProvider asserts that the created notifier has no listener after rebuild","suiteID":283,"groupIDs":[285,286],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":105,"root_column":5,"root_url":"file:///__w/provider/provider/test/listenable_proxy_provider_test.dart"},"type":"testStart","time":34454}
+{"testID":289,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":34472}
+{"test":{"id":290,"name":"ListenableProxyProvider rebuilds dependendents when listeners are called","suiteID":283,"groupIDs":[285,286],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":140,"root_column":5,"root_url":"file:///__w/provider/provider/test/listenable_proxy_provider_test.dart"},"type":"testStart","time":34473}
+{"testID":290,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":34493}
+{"test":{"id":291,"name":"ListenableProxyProvider update returning a new Listenable disposes the previously created value and update dependents","suiteID":283,"groupIDs":[285,286],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":170,"root_column":5,"root_url":"file:///__w/provider/provider/test/listenable_proxy_provider_test.dart"},"type":"testStart","time":34493}
+{"testID":291,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":34518}
+{"test":{"id":292,"name":"ListenableProxyProvider disposes of created value","suiteID":283,"groupIDs":[285,286],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":227,"root_column":5,"root_url":"file:///__w/provider/provider/test/listenable_proxy_provider_test.dart"},"type":"testStart","time":34519}
+{"testID":292,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":34532}
+{"group":{"id":293,"suiteID":283,"parentID":285,"name":"ListenableProxyProvider variants","metadata":{"skip":false,"skipReason":null},"testCount":6,"line":256,"column":3,"url":"file:///__w/provider/provider/test/listenable_proxy_provider_test.dart"},"type":"group","time":34532}
+{"test":{"id":294,"name":"ListenableProxyProvider variants ListenableProxyProvider","suiteID":283,"groupIDs":[285,293],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":259,"root_column":5,"root_url":"file:///__w/provider/provider/test/listenable_proxy_provider_test.dart"},"type":"testStart","time":34533}
+{"testID":294,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":34546}
+{"test":{"id":295,"name":"ListenableProxyProvider variants ListenableProxyProvider2","suiteID":283,"groupIDs":[285,293],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":304,"root_column":5,"root_url":"file:///__w/provider/provider/test/listenable_proxy_provider_test.dart"},"type":"testStart","time":34547}
+{"testID":295,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":34556}
+{"test":{"id":296,"name":"ListenableProxyProvider variants ListenableProxyProvider3","suiteID":283,"groupIDs":[285,293],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":333,"root_column":5,"root_url":"file:///__w/provider/provider/test/listenable_proxy_provider_test.dart"},"type":"testStart","time":34557}
+{"testID":296,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":34566}
+{"test":{"id":297,"name":"ListenableProxyProvider variants ListenableProxyProvider4","suiteID":283,"groupIDs":[285,293],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":362,"root_column":5,"root_url":"file:///__w/provider/provider/test/listenable_proxy_provider_test.dart"},"type":"testStart","time":34567}
+{"testID":297,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":34584}
+{"test":{"id":298,"name":"ListenableProxyProvider variants ListenableProxyProvider5","suiteID":283,"groupIDs":[285,293],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":391,"root_column":5,"root_url":"file:///__w/provider/provider/test/listenable_proxy_provider_test.dart"},"type":"testStart","time":34585}
+{"testID":298,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":34597}
+{"test":{"id":299,"name":"ListenableProxyProvider variants ListenableProxyProvider6","suiteID":283,"groupIDs":[285,293],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":420,"root_column":5,"root_url":"file:///__w/provider/provider/test/listenable_proxy_provider_test.dart"},"type":"testStart","time":34598}
+{"testID":299,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":34615}
+{"suite":{"id":300,"platform":"vm","path":"/__w/provider/provider/test/selector_test.dart"},"type":"suite","time":35494}
+{"test":{"id":301,"name":"loading /__w/provider/provider/test/selector_test.dart","suiteID":300,"groupIDs":[],"metadata":{"skip":false,"skipReason":null},"line":null,"column":null,"url":null},"type":"testStart","time":35494}
+{"testID":301,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":36128}
+{"group":{"id":302,"suiteID":300,"parentID":null,"name":"","metadata":{"skip":false,"skipReason":null},"testCount":17,"line":null,"column":null,"url":null},"type":"group","time":36128}
+{"test":{"id":303,"name":"asserts that builder/selector are not null","suiteID":300,"groupIDs":[302],"metadata":{"skip":false,"skipReason":null},"line":26,"column":3,"url":"file:///__w/provider/provider/test/selector_test.dart"},"type":"testStart","time":36129}
+{"testID":303,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":36161}
+{"test":{"id":304,"name":"Deep compare maps by default","suiteID":300,"groupIDs":[302],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":79,"root_column":3,"root_url":"file:///__w/provider/provider/test/selector_test.dart"},"type":"testStart","time":36161}
+{"testID":304,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":36319}
+{"test":{"id":305,"name":"Deep compare iterables by default","suiteID":300,"groupIDs":[302],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":108,"root_column":3,"root_url":"file:///__w/provider/provider/test/selector_test.dart"},"type":"testStart","time":36320}
+{"testID":305,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":36329}
+{"test":{"id":306,"name":"Deep compare sets by default","suiteID":300,"groupIDs":[302],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":137,"root_column":3,"root_url":"file:///__w/provider/provider/test/selector_test.dart"},"type":"testStart","time":36329}
+{"testID":306,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":36341}
+{"test":{"id":307,"name":"Deep compare lists by default","suiteID":300,"groupIDs":[302],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":166,"root_column":3,"root_url":"file:///__w/provider/provider/test/selector_test.dart"},"type":"testStart","time":36348}
+{"testID":307,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":36362}
+{"test":{"id":308,"name":"custom shouldRebuid","suiteID":300,"groupIDs":[302],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":195,"root_column":3,"root_url":"file:///__w/provider/provider/test/selector_test.dart"},"type":"testStart","time":36363}
+{"testID":308,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":36374}
+{"test":{"id":309,"name":"passes `child` and `key`","suiteID":300,"groupIDs":[302],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":235,"root_column":3,"root_url":"file:///__w/provider/provider/test/selector_test.dart"},"type":"testStart","time":36375}
+{"testID":309,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":36388}
+{"test":{"id":310,"name":"calls builder if the callback changes","suiteID":300,"groupIDs":[302],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":250,"root_column":3,"root_url":"file:///__w/provider/provider/test/selector_test.dart"},"type":"testStart","time":36388}
+{"testID":310,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":36402}
+{"test":{"id":311,"name":"works with MultiProvider","suiteID":300,"groupIDs":[302],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":271,"root_column":3,"root_url":"file:///__w/provider/provider/test/selector_test.dart"},"type":"testStart","time":36403}
+{"testID":311,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":36415}
+{"test":{"id":312,"name":"don't call builder again if it rebuilds but selector returns the same thing","suiteID":300,"groupIDs":[302],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":305,"root_column":3,"root_url":"file:///__w/provider/provider/test/selector_test.dart"},"type":"testStart","time":36415}
+{"testID":312,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":36424}
+{"test":{"id":313,"name":"call builder again if it rebuilds abd selector returns the a different variable","suiteID":300,"groupIDs":[302],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":340,"root_column":3,"root_url":"file:///__w/provider/provider/test/selector_test.dart"},"type":"testStart","time":36425}
+{"testID":313,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":36434}
+{"test":{"id":314,"name":"Selector","suiteID":300,"groupIDs":[302],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":379,"root_column":3,"root_url":"file:///__w/provider/provider/test/selector_test.dart"},"type":"testStart","time":36434}
+{"testID":314,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":36449}
+{"test":{"id":315,"name":"Selector2","suiteID":300,"groupIDs":[302],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":395,"root_column":3,"root_url":"file:///__w/provider/provider/test/selector_test.dart"},"type":"testStart","time":36449}
+{"testID":315,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":36458}
+{"test":{"id":316,"name":"Selector3","suiteID":300,"groupIDs":[302],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":412,"root_column":3,"root_url":"file:///__w/provider/provider/test/selector_test.dart"},"type":"testStart","time":36458}
+{"testID":316,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":36466}
+{"test":{"id":317,"name":"Selector4","suiteID":300,"groupIDs":[302],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":430,"root_column":3,"root_url":"file:///__w/provider/provider/test/selector_test.dart"},"type":"testStart","time":36467}
+{"testID":317,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":36476}
+{"test":{"id":318,"name":"Selector5","suiteID":300,"groupIDs":[302],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":449,"root_column":3,"root_url":"file:///__w/provider/provider/test/selector_test.dart"},"type":"testStart","time":36476}
+{"testID":318,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":36495}
+{"test":{"id":319,"name":"Selector6","suiteID":300,"groupIDs":[302],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":469,"root_column":3,"root_url":"file:///__w/provider/provider/test/selector_test.dart"},"type":"testStart","time":36495}
+{"testID":319,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":36506}
+{"suite":{"id":320,"platform":"vm","path":"/__w/provider/provider/test/stateful_provider_test.dart"},"type":"suite","time":37332}
+{"test":{"id":321,"name":"loading /__w/provider/provider/test/stateful_provider_test.dart","suiteID":320,"groupIDs":[],"metadata":{"skip":false,"skipReason":null},"line":null,"column":null,"url":null},"type":"testStart","time":37333}
+{"testID":321,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":37946}
+{"group":{"id":322,"suiteID":320,"parentID":null,"name":"","metadata":{"skip":false,"skipReason":null},"testCount":4,"line":null,"column":null,"url":null},"type":"group","time":37947}
+{"test":{"id":323,"name":"works with MultiProvider","suiteID":320,"groupIDs":[322],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":18,"root_column":3,"root_url":"file:///__w/provider/provider/test/stateful_provider_test.dart"},"type":"testStart","time":37947}
+{"testID":323,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":38150}
+{"test":{"id":324,"name":"asserts","suiteID":320,"groupIDs":[322],"metadata":{"skip":false,"skipReason":null},"line":32,"column":3,"url":"file:///__w/provider/provider/test/stateful_provider_test.dart"},"type":"testStart","time":38151}
+{"testID":324,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":38157}
+{"test":{"id":325,"name":"calls create only once","suiteID":320,"groupIDs":[322],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":41,"root_column":3,"root_url":"file:///__w/provider/provider/test/stateful_provider_test.dart"},"type":"testStart","time":38157}
+{"testID":325,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":38184}
+{"test":{"id":326,"name":"dispose","suiteID":320,"groupIDs":[322],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":56,"root_column":3,"root_url":"file:///__w/provider/provider/test/stateful_provider_test.dart"},"type":"testStart","time":38185}
+{"testID":326,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":38203}
+{"suite":{"id":327,"platform":"vm","path":"/__w/provider/provider/test/proxy_provider_test.dart"},"type":"suite","time":39356}
+{"test":{"id":328,"name":"loading /__w/provider/provider/test/proxy_provider_test.dart","suiteID":327,"groupIDs":[],"metadata":{"skip":false,"skipReason":null},"line":null,"column":null,"url":null},"type":"testStart","time":39356}
+{"testID":328,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":40041}
+{"group":{"id":329,"suiteID":327,"parentID":null,"name":"","metadata":{"skip":false,"skipReason":null},"testCount":16,"line":null,"column":null,"url":null},"type":"group","time":40042}
+{"group":{"id":330,"suiteID":327,"parentID":329,"name":"ProxyProvider","metadata":{"skip":false,"skipReason":null},"testCount":11,"line":37,"column":3,"url":"file:///__w/provider/provider/test/proxy_provider_test.dart"},"type":"group","time":40042}
+{"test":{"id":331,"name":"ProxyProvider throws if the provided value is a Listenable/Stream","suiteID":327,"groupIDs":[329,330],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":50,"root_column":5,"root_url":"file:///__w/provider/provider/test/proxy_provider_test.dart"},"type":"testStart","time":40042}
+{"testID":331,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":40251}
+{"test":{"id":332,"name":"ProxyProvider debugCheckInvalidValueType can be disabled","suiteID":327,"groupIDs":[329,330],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":80,"root_column":5,"root_url":"file:///__w/provider/provider/test/proxy_provider_test.dart"},"type":"testStart","time":40252}
+{"testID":332,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":40265}
+{"test":{"id":333,"name":"ProxyProvider create creates initial value","suiteID":327,"groupIDs":[329,330],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":110,"root_column":5,"root_url":"file:///__w/provider/provider/test/proxy_provider_test.dart"},"type":"testStart","time":40265}
+{"testID":333,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":40288}
+{"test":{"id":334,"name":"ProxyProvider consume another providers","suiteID":327,"groupIDs":[329,330],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":132,"root_column":5,"root_url":"file:///__w/provider/provider/test/proxy_provider_test.dart"},"type":"testStart","time":40289}
+{"testID":334,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":40307}
+{"test":{"id":335,"name":"ProxyProvider throws if update is null","suiteID":327,"groupIDs":[329,330],"metadata":{"skip":false,"skipReason":null},"line":154,"column":5,"url":"file:///__w/provider/provider/test/proxy_provider_test.dart"},"type":"testStart","time":40307}
+{"testID":335,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":40314}
+{"test":{"id":336,"name":"ProxyProvider rebuild descendants if value change","suiteID":327,"groupIDs":[329,330],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":171,"root_column":5,"root_url":"file:///__w/provider/provider/test/proxy_provider_test.dart"},"type":"testStart","time":40314}
+{"testID":336,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":40327}
+{"test":{"id":337,"name":"ProxyProvider call dispose when unmounted with the latest result","suiteID":327,"groupIDs":[329,330],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":209,"root_column":5,"root_url":"file:///__w/provider/provider/test/proxy_provider_test.dart"},"type":"testStart","time":40329}
+{"testID":337,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":40340}
+{"test":{"id":338,"name":"ProxyProvider don't rebuild descendants if value doesn't change","suiteID":327,"groupIDs":[329,330],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":250,"root_column":5,"root_url":"file:///__w/provider/provider/test/proxy_provider_test.dart"},"type":"testStart","time":40340}
+{"testID":338,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":40352}
+{"test":{"id":339,"name":"ProxyProvider pass down updateShouldNotify","suiteID":327,"groupIDs":[329,330],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":293,"root_column":5,"root_url":"file:///__w/provider/provider/test/proxy_provider_test.dart"},"type":"testStart","time":40353}
+{"testID":339,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":40372}
+{"test":{"id":340,"name":"ProxyProvider works with MultiProvider","suiteID":327,"groupIDs":[329,330],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":341,"root_column":5,"root_url":"file:///__w/provider/provider/test/proxy_provider_test.dart"},"type":"testStart","time":40372}
+{"testID":340,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":40388}
+{"test":{"id":341,"name":"ProxyProvider update callback can trigger descendants setState synchronously","suiteID":327,"groupIDs":[329,330],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":363,"root_column":5,"root_url":"file:///__w/provider/provider/test/proxy_provider_test.dart"},"type":"testStart","time":40389}
+{"testID":341,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":40413}
+{"group":{"id":342,"suiteID":327,"parentID":329,"name":"ProxyProvider variants","metadata":{"skip":false,"skipReason":null},"testCount":5,"line":415,"column":3,"url":"file:///__w/provider/provider/test/proxy_provider_test.dart"},"type":"group","time":40414}
+{"test":{"id":343,"name":"ProxyProvider variants ProxyProvider2","suiteID":327,"groupIDs":[329,342],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":416,"root_column":5,"root_url":"file:///__w/provider/provider/test/proxy_provider_test.dart"},"type":"testStart","time":40414}
+{"testID":343,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":40432}
+{"test":{"id":344,"name":"ProxyProvider variants ProxyProvider3","suiteID":327,"groupIDs":[329,342],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":444,"root_column":5,"root_url":"file:///__w/provider/provider/test/proxy_provider_test.dart"},"type":"testStart","time":40432}
+{"testID":344,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":40448}
+{"test":{"id":345,"name":"ProxyProvider variants ProxyProvider4","suiteID":327,"groupIDs":[329,342],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":472,"root_column":5,"root_url":"file:///__w/provider/provider/test/proxy_provider_test.dart"},"type":"testStart","time":40449}
+{"testID":345,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":40458}
+{"test":{"id":346,"name":"ProxyProvider variants ProxyProvider5","suiteID":327,"groupIDs":[329,342],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":500,"root_column":5,"root_url":"file:///__w/provider/provider/test/proxy_provider_test.dart"},"type":"testStart","time":40458}
+{"testID":346,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":40478}
+{"test":{"id":347,"name":"ProxyProvider variants ProxyProvider6","suiteID":327,"groupIDs":[329,342],"metadata":{"skip":false,"skipReason":null},"line":126,"column":5,"url":"package:flutter_test/src/widget_tester.dart","root_line":528,"root_column":5,"root_url":"file:///__w/provider/provider/test/proxy_provider_test.dart"},"type":"testStart","time":40478}
+{"testID":347,"result":"success","skipped":false,"hidden":false,"type":"testDone","time":40488}
diff --git a/src/parsers/dart-json/dart-json-parser.ts b/src/parsers/dart-json/dart-json-parser.ts
index f79f049..3096aed 100644
--- a/src/parsers/dart-json/dart-json-parser.ts
+++ b/src/parsers/dart-json/dart-json-parser.ts
@@ -14,7 +14,9 @@ import {
isTestStartEvent,
isTestDoneEvent,
isErrorEvent,
- isDoneEvent
+ isDoneEvent,
+ isMessageEvent,
+ MessageEvent
} from './dart-json-types'
import {
@@ -45,8 +47,10 @@ class TestCase {
this.groupId = testStart.test.groupIDs[testStart.test.groupIDs.length - 1]
}
readonly groupId: number
+ readonly print: MessageEvent[] = []
testDone?: TestDoneEvent
error?: ErrorEvent
+
get result(): TestExecutionResult {
if (this.testDone?.skipped) {
return 'skipped'
@@ -112,7 +116,10 @@ export class DartJsonParser implements TestParser {
tests[evt.testID].testDone = evt
} else if (isErrorEvent(evt)) {
tests[evt.testID].error = evt
- } else if (isDoneEvent(evt)) {
+ } else if (isMessageEvent(evt)) {
+ tests[evt.testID].print.push(evt)
+ }
+ else if (isDoneEvent(evt)) {
success = evt.success
totalTime = evt.time
}
@@ -151,6 +158,8 @@ export class DartJsonParser implements TestParser {
const {trackedFiles} = this.options
const message = test.error?.error ?? ''
const stackTrace = test.error?.stackTrace ?? ''
+ const print = test.print.filter(p => p.messageType === 'print').map(p => p.message).join('\n')
+ const details = [print, stackTrace].filter(str => str !== '').join('\n')
const src = this.exceptionThrowSource(stackTrace, trackedFiles)
let path
let line
@@ -170,7 +179,7 @@ export class DartJsonParser implements TestParser {
path,
line,
message,
- stackTrace
+ details
}
}
diff --git a/src/parsers/dart-json/dart-json-types.ts b/src/parsers/dart-json/dart-json-types.ts
index e5b34b8..df8d941 100644
--- a/src/parsers/dart-json/dart-json-types.ts
+++ b/src/parsers/dart-json/dart-json-types.ts
@@ -75,7 +75,7 @@ export interface DebugEvent extends Event {
export interface MessageEvent extends Event {
type: 'print'
testID: number
- messageType: string
+ messageType: 'print' | 'skip'
message: string
}
@@ -127,3 +127,6 @@ export function isErrorEvent(event: Event): event is ErrorEvent {
export function isDoneEvent(event: Event): event is DoneEvent {
return event.type === 'done'
}
+export function isMessageEvent(event: Event): event is MessageEvent {
+ return event.type === 'print'
+}
diff --git a/src/parsers/dotnet-trx/dotnet-trx-parser.ts b/src/parsers/dotnet-trx/dotnet-trx-parser.ts
index 67208f5..8ab7fa1 100644
--- a/src/parsers/dotnet-trx/dotnet-trx-parser.ts
+++ b/src/parsers/dotnet-trx/dotnet-trx-parser.ts
@@ -130,7 +130,7 @@ export class DotnetTrxParser implements TestParser {
path,
line,
message,
- stackTrace: `${message}\n${stackTrace}`
+ details: `${message}\n${stackTrace}`
}
}
diff --git a/src/parsers/jest-junit/jest-junit-parser.ts b/src/parsers/jest-junit/jest-junit-parser.ts
index 1b8275d..66c796e 100644
--- a/src/parsers/jest-junit/jest-junit-parser.ts
+++ b/src/parsers/jest-junit/jest-junit-parser.ts
@@ -75,11 +75,11 @@ export class JestJunitParser implements TestParser {
return undefined
}
- const stackTrace = tc.failure[0]
+ const details = tc.failure[0]
let path
let line
- const src = this.exceptionThrowSource(stackTrace)
+ const src = this.exceptionThrowSource(details)
if (src) {
path = src.path
line = src.line
@@ -88,7 +88,7 @@ export class JestJunitParser implements TestParser {
return {
path,
line,
- stackTrace
+ details
}
}
diff --git a/src/report/get-annotations.ts b/src/report/get-annotations.ts
index be9493b..b445ff1 100644
--- a/src/report/get-annotations.ts
+++ b/src/report/get-annotations.ts
@@ -19,8 +19,8 @@ interface TestError {
testName: string
path: string
line: number
- stackTrace: string
message: string
+ details: string
}
export function getAnnotations(results: TestRunResult[], maxCount: number): Annotation[] {
@@ -43,7 +43,7 @@ export function getAnnotations(results: TestRunResult[], maxCount: number): Anno
const path = err.path ?? tr.path
const line = err.line ?? 0
if (mergeDup) {
- const dup = errors.find(e => path === e.path && line === e.line && err.stackTrace === e.stackTrace)
+ const dup = errors.find(e => path === e.path && line === e.line && err.details === e.details)
if (dup !== undefined) {
dup.testRunPaths.push(tr.path)
continue
@@ -54,8 +54,8 @@ export function getAnnotations(results: TestRunResult[], maxCount: number): Anno
testRunPaths: [tr.path],
suiteName: ts.name,
testName: tc.name,
- stackTrace: err.stackTrace,
- message: err.message ?? getFirstNonEmptyLine(err.stackTrace) ?? 'Test failed',
+ details: err.details,
+ message: err.message ?? getFirstNonEmptyLine(err.details) ?? 'Test failed',
path,
line
})
@@ -81,7 +81,7 @@ export function getAnnotations(results: TestRunResult[], maxCount: number): Anno
end_line: e.line,
annotation_level: 'failure',
title: `${e.suiteName} ► ${e.testName}`,
- raw_details: fixEol(e.stackTrace),
+ raw_details: fixEol(e.details),
message
})
})
diff --git a/src/test-results.ts b/src/test-results.ts
index 3cabedd..7254350 100644
--- a/src/test-results.ts
+++ b/src/test-results.ts
@@ -97,5 +97,5 @@ export interface TestCaseError {
path?: string
line?: number
message?: string
- stackTrace: string
+ details: string
}