Basically what I have observed is that having a bit of specially prepared dead code influences the compilation/optimization process of dart2js in such a way that it makes things work. I expect my code to work without the dead code but it doesn't. Without further ado, repro code here
Repro steps:
grab a stagehand angular starter project
throw in the test and the build.yaml file from gist
pub run build_runner test -r -- -p chrome
-r command line argument is important. DDC works fine.
There are a number of things that must be present in order for this to happen:
Component should use AsyncPipe on a special Stream
The implementation of that Stream must be "mockito-like" - overriding noSuchMethod
dart2js compiler must have -O1 or above optimization level
Until this point, component test fails, though I think it should pass. To fix it, there are 2 approaches:
add a bit of dead code like in the gist
use -O0 optimization level for dart2js
My expectation:
Both reachable tests pass without dead code
What happens:
Without dead code, the component test fails, though it shouldn't
Env
Dart SDK version: 2.10.4 (stable) (Wed Nov 11 13:35:58 2020 +0100) on "linux_x64"
Angular 5.3, 6
Uhm, so I'm wondering, is it an angular_test bug or did I stumble onto something compiler related? (There is a 3rd option: I'm a idiot and I'm missing something)
I'm not sure if it is dart2js or angular_test related issue. Due to lack of better idea, I'm pretty much duplicating https://github.com/angulardart/angular/issues/1952 here too.
Basically what I have observed is that having a bit of specially prepared dead code influences the compilation/optimization process of dart2js in such a way that it makes things work. I expect my code to work without the dead code but it doesn't. Without further ado, repro code here
Repro steps:
pub run build_runner test -r -- -p chrome
-r
command line argument is important. DDC works fine.There are a number of things that must be present in order for this to happen:
AsyncPipe
on a special StreamnoSuchMethod
dart2js
compiler must have-O1
or above optimization levelUntil this point, component test fails, though I think it should pass. To fix it, there are 2 approaches:
-O0
optimization level fordart2js
My expectation: Both reachable tests pass without dead code
What happens: Without dead code, the component test fails, though it shouldn't
Env
Dart SDK version: 2.10.4 (stable) (Wed Nov 11 13:35:58 2020 +0100) on "linux_x64"
Uhm, so I'm wondering, is it an
angular_test
bug or did I stumble onto something compiler related? (There is a 3rd option: I'm a idiot and I'm missing something)