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 @@ +![Tests failed](https://img.shields.io/badge/tests-268%20passed%2C%201%20failed-critical) +## 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 }