diff --git a/.github/workflows/dart.yml b/.github/workflows/dart.yml index 00f2b417ff..d40d17e3be 100644 --- a/.github/workflows/dart.yml +++ b/.github/workflows/dart.yml @@ -195,83 +195,6 @@ jobs: needs: - job_001 job_004: - name: "analyze; Dart dev; PKGS: ngast, ngcompiler, ngdart, ngforms, ngrouter, ngtest; `dart analyze --fatal-infos .`" - runs-on: ubuntu-latest - steps: - - name: Cache Pub hosted dependencies - uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf - with: - path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:ngast-ngcompiler-ngdart-ngforms-ngrouter-ngtest;commands:analyze" - restore-keys: | - os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:ngast-ngcompiler-ngdart-ngforms-ngrouter-ngtest - os:ubuntu-latest;pub-cache-hosted;sdk:dev - os:ubuntu-latest;pub-cache-hosted - os:ubuntu-latest - - name: Setup Dart SDK - uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c - with: - sdk: dev - - id: checkout - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - - id: ngast_pub_upgrade - name: ngast; dart pub upgrade - run: dart pub upgrade - if: "always() && steps.checkout.conclusion == 'success'" - working-directory: ngast - - name: "ngast; dart analyze --fatal-infos ." - run: dart analyze --fatal-infos . - if: "always() && steps.ngast_pub_upgrade.conclusion == 'success'" - working-directory: ngast - - id: ngcompiler_pub_upgrade - name: ngcompiler; dart pub upgrade - run: dart pub upgrade - if: "always() && steps.checkout.conclusion == 'success'" - working-directory: ngcompiler - - name: "ngcompiler; dart analyze --fatal-infos ." - run: dart analyze --fatal-infos . - if: "always() && steps.ngcompiler_pub_upgrade.conclusion == 'success'" - working-directory: ngcompiler - - id: ngdart_pub_upgrade - name: ngdart; dart pub upgrade - run: dart pub upgrade - if: "always() && steps.checkout.conclusion == 'success'" - working-directory: ngdart - - name: "ngdart; dart analyze --fatal-infos ." - run: dart analyze --fatal-infos . - if: "always() && steps.ngdart_pub_upgrade.conclusion == 'success'" - working-directory: ngdart - - id: ngforms_pub_upgrade - name: ngforms; dart pub upgrade - run: dart pub upgrade - if: "always() && steps.checkout.conclusion == 'success'" - working-directory: ngforms - - name: "ngforms; dart analyze --fatal-infos ." - run: dart analyze --fatal-infos . - if: "always() && steps.ngforms_pub_upgrade.conclusion == 'success'" - working-directory: ngforms - - id: ngrouter_pub_upgrade - name: ngrouter; dart pub upgrade - run: dart pub upgrade - if: "always() && steps.checkout.conclusion == 'success'" - working-directory: ngrouter - - name: "ngrouter; dart analyze --fatal-infos ." - run: dart analyze --fatal-infos . - if: "always() && steps.ngrouter_pub_upgrade.conclusion == 'success'" - working-directory: ngrouter - - id: ngtest_pub_upgrade - name: ngtest; dart pub upgrade - run: dart pub upgrade - if: "always() && steps.checkout.conclusion == 'success'" - working-directory: ngtest - - name: "ngtest; dart analyze --fatal-infos ." - run: dart analyze --fatal-infos . - if: "always() && steps.ngtest_pub_upgrade.conclusion == 'success'" - working-directory: ngtest - needs: - - job_001 - job_005: name: "analyze; Dart stable; PKGS: ngast, ngcompiler, ngdart, ngforms, ngrouter, ngtest; `dart analyze --fatal-infos .`" runs-on: ubuntu-latest steps: @@ -348,8 +271,8 @@ jobs: working-directory: ngtest needs: - job_001 - job_006: - name: "build; Dart 3.6.0; PKG: _tests; `dart run build_runner build --fail-on-severe`" + job_005: + name: "build; Dart 3.6.0; PKG: _tests; `dart run build_runner build --delete-conflicting-outputs --fail-on-severe`" runs-on: ubuntu-latest steps: - name: Cache Pub hosted dependencies @@ -374,8 +297,8 @@ jobs: run: dart pub upgrade if: "always() && steps.checkout.conclusion == 'success'" working-directory: _tests - - name: "_tests; dart run build_runner build --fail-on-severe" - run: dart run build_runner build --fail-on-severe + - name: "_tests; dart run build_runner build --delete-conflicting-outputs --fail-on-severe" + run: dart run build_runner build --delete-conflicting-outputs --fail-on-severe if: "always() && steps._tests_pub_upgrade.conclusion == 'success'" working-directory: _tests needs: @@ -383,9 +306,8 @@ jobs: - job_002 - job_003 - job_004 - - job_005 - job_007: - name: "build; Dart 3.6.0; PKG: ngforms; `dart run build_runner build --fail-on-severe`" + job_006: + name: "build; Dart 3.6.0; PKG: ngforms; `dart run build_runner build --delete-conflicting-outputs --fail-on-severe`" runs-on: ubuntu-latest steps: - name: Cache Pub hosted dependencies @@ -410,8 +332,8 @@ jobs: run: dart pub upgrade if: "always() && steps.checkout.conclusion == 'success'" working-directory: ngforms - - name: "ngforms; dart run build_runner build --fail-on-severe" - run: dart run build_runner build --fail-on-severe + - name: "ngforms; dart run build_runner build --delete-conflicting-outputs --fail-on-severe" + run: dart run build_runner build --delete-conflicting-outputs --fail-on-severe if: "always() && steps.ngforms_pub_upgrade.conclusion == 'success'" working-directory: ngforms needs: @@ -419,9 +341,8 @@ jobs: - job_002 - job_003 - job_004 - - job_005 - job_008: - name: "build; Dart 3.6.0; PKG: ngrouter; `dart run build_runner build --fail-on-severe`" + job_007: + name: "build; Dart 3.6.0; PKG: ngrouter; `dart run build_runner build --delete-conflicting-outputs --fail-on-severe`" runs-on: ubuntu-latest steps: - name: Cache Pub hosted dependencies @@ -446,8 +367,8 @@ jobs: run: dart pub upgrade if: "always() && steps.checkout.conclusion == 'success'" working-directory: ngrouter - - name: "ngrouter; dart run build_runner build --fail-on-severe" - run: dart run build_runner build --fail-on-severe + - name: "ngrouter; dart run build_runner build --delete-conflicting-outputs --fail-on-severe" + run: dart run build_runner build --delete-conflicting-outputs --fail-on-severe if: "always() && steps.ngrouter_pub_upgrade.conclusion == 'success'" working-directory: ngrouter needs: @@ -455,9 +376,8 @@ jobs: - job_002 - job_003 - job_004 - - job_005 - job_009: - name: "build; Dart 3.6.0; PKG: ngtest; `dart run build_runner build --fail-on-severe`" + job_008: + name: "build; Dart 3.6.0; PKG: ngtest; `dart run build_runner build --delete-conflicting-outputs --fail-on-severe`" runs-on: ubuntu-latest steps: - name: Cache Pub hosted dependencies @@ -482,8 +402,8 @@ jobs: run: dart pub upgrade if: "always() && steps.checkout.conclusion == 'success'" working-directory: ngtest - - name: "ngtest; dart run build_runner build --fail-on-severe" - run: dart run build_runner build --fail-on-severe + - name: "ngtest; dart run build_runner build --delete-conflicting-outputs --fail-on-severe" + run: dart run build_runner build --delete-conflicting-outputs --fail-on-severe if: "always() && steps.ngtest_pub_upgrade.conclusion == 'success'" working-directory: ngtest needs: @@ -491,153 +411,8 @@ jobs: - job_002 - job_003 - job_004 - - job_005 - job_010: - name: "build; Dart dev; PKG: _tests; `dart run build_runner build --fail-on-severe`" - runs-on: ubuntu-latest - steps: - - name: Cache Pub hosted dependencies - uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf - with: - path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:_tests;commands:command_0" - restore-keys: | - os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:_tests - os:ubuntu-latest;pub-cache-hosted;sdk:dev - os:ubuntu-latest;pub-cache-hosted - os:ubuntu-latest - - name: Setup Dart SDK - uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c - with: - sdk: dev - - id: checkout - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - - id: _tests_pub_upgrade - name: _tests; dart pub upgrade - run: dart pub upgrade - if: "always() && steps.checkout.conclusion == 'success'" - working-directory: _tests - - name: "_tests; dart run build_runner build --fail-on-severe" - run: dart run build_runner build --fail-on-severe - if: "always() && steps._tests_pub_upgrade.conclusion == 'success'" - working-directory: _tests - needs: - - job_001 - - job_002 - - job_003 - - job_004 - - job_005 - job_011: - name: "build; Dart dev; PKG: ngforms; `dart run build_runner build --fail-on-severe`" - runs-on: ubuntu-latest - steps: - - name: Cache Pub hosted dependencies - uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf - with: - path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:ngforms;commands:command_0" - restore-keys: | - os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:ngforms - os:ubuntu-latest;pub-cache-hosted;sdk:dev - os:ubuntu-latest;pub-cache-hosted - os:ubuntu-latest - - name: Setup Dart SDK - uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c - with: - sdk: dev - - id: checkout - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - - id: ngforms_pub_upgrade - name: ngforms; dart pub upgrade - run: dart pub upgrade - if: "always() && steps.checkout.conclusion == 'success'" - working-directory: ngforms - - name: "ngforms; dart run build_runner build --fail-on-severe" - run: dart run build_runner build --fail-on-severe - if: "always() && steps.ngforms_pub_upgrade.conclusion == 'success'" - working-directory: ngforms - needs: - - job_001 - - job_002 - - job_003 - - job_004 - - job_005 - job_012: - name: "build; Dart dev; PKG: ngrouter; `dart run build_runner build --fail-on-severe`" - runs-on: ubuntu-latest - steps: - - name: Cache Pub hosted dependencies - uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf - with: - path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:ngrouter;commands:command_0" - restore-keys: | - os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:ngrouter - os:ubuntu-latest;pub-cache-hosted;sdk:dev - os:ubuntu-latest;pub-cache-hosted - os:ubuntu-latest - - name: Setup Dart SDK - uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c - with: - sdk: dev - - id: checkout - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - - id: ngrouter_pub_upgrade - name: ngrouter; dart pub upgrade - run: dart pub upgrade - if: "always() && steps.checkout.conclusion == 'success'" - working-directory: ngrouter - - name: "ngrouter; dart run build_runner build --fail-on-severe" - run: dart run build_runner build --fail-on-severe - if: "always() && steps.ngrouter_pub_upgrade.conclusion == 'success'" - working-directory: ngrouter - needs: - - job_001 - - job_002 - - job_003 - - job_004 - - job_005 - job_013: - name: "build; Dart dev; PKG: ngtest; `dart run build_runner build --fail-on-severe`" - runs-on: ubuntu-latest - steps: - - name: Cache Pub hosted dependencies - uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf - with: - path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:ngtest;commands:command_0" - restore-keys: | - os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:ngtest - os:ubuntu-latest;pub-cache-hosted;sdk:dev - os:ubuntu-latest;pub-cache-hosted - os:ubuntu-latest - - name: Setup Dart SDK - uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c - with: - sdk: dev - - id: checkout - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - - id: ngtest_pub_upgrade - name: ngtest; dart pub upgrade - run: dart pub upgrade - if: "always() && steps.checkout.conclusion == 'success'" - working-directory: ngtest - - name: "ngtest; dart run build_runner build --fail-on-severe" - run: dart run build_runner build --fail-on-severe - if: "always() && steps.ngtest_pub_upgrade.conclusion == 'success'" - working-directory: ngtest - needs: - - job_001 - - job_002 - - job_003 - - job_004 - - job_005 - job_014: - name: "build; Dart stable; PKG: _tests; `dart run build_runner build --fail-on-severe`" + job_009: + name: "build; Dart stable; PKG: _tests; `dart run build_runner build --delete-conflicting-outputs --fail-on-severe`" runs-on: ubuntu-latest steps: - name: Cache Pub hosted dependencies @@ -662,8 +437,8 @@ jobs: run: dart pub upgrade if: "always() && steps.checkout.conclusion == 'success'" working-directory: _tests - - name: "_tests; dart run build_runner build --fail-on-severe" - run: dart run build_runner build --fail-on-severe + - name: "_tests; dart run build_runner build --delete-conflicting-outputs --fail-on-severe" + run: dart run build_runner build --delete-conflicting-outputs --fail-on-severe if: "always() && steps._tests_pub_upgrade.conclusion == 'success'" working-directory: _tests needs: @@ -671,9 +446,8 @@ jobs: - job_002 - job_003 - job_004 - - job_005 - job_015: - name: "build; Dart stable; PKG: ngforms; `dart run build_runner build --fail-on-severe`" + job_010: + name: "build; Dart stable; PKG: ngforms; `dart run build_runner build --delete-conflicting-outputs --fail-on-severe`" runs-on: ubuntu-latest steps: - name: Cache Pub hosted dependencies @@ -698,8 +472,8 @@ jobs: run: dart pub upgrade if: "always() && steps.checkout.conclusion == 'success'" working-directory: ngforms - - name: "ngforms; dart run build_runner build --fail-on-severe" - run: dart run build_runner build --fail-on-severe + - name: "ngforms; dart run build_runner build --delete-conflicting-outputs --fail-on-severe" + run: dart run build_runner build --delete-conflicting-outputs --fail-on-severe if: "always() && steps.ngforms_pub_upgrade.conclusion == 'success'" working-directory: ngforms needs: @@ -707,9 +481,8 @@ jobs: - job_002 - job_003 - job_004 - - job_005 - job_016: - name: "build; Dart stable; PKG: ngrouter; `dart run build_runner build --fail-on-severe`" + job_011: + name: "build; Dart stable; PKG: ngrouter; `dart run build_runner build --delete-conflicting-outputs --fail-on-severe`" runs-on: ubuntu-latest steps: - name: Cache Pub hosted dependencies @@ -734,8 +507,8 @@ jobs: run: dart pub upgrade if: "always() && steps.checkout.conclusion == 'success'" working-directory: ngrouter - - name: "ngrouter; dart run build_runner build --fail-on-severe" - run: dart run build_runner build --fail-on-severe + - name: "ngrouter; dart run build_runner build --delete-conflicting-outputs --fail-on-severe" + run: dart run build_runner build --delete-conflicting-outputs --fail-on-severe if: "always() && steps.ngrouter_pub_upgrade.conclusion == 'success'" working-directory: ngrouter needs: @@ -743,9 +516,8 @@ jobs: - job_002 - job_003 - job_004 - - job_005 - job_017: - name: "build; Dart stable; PKG: ngtest; `dart run build_runner build --fail-on-severe`" + job_012: + name: "build; Dart stable; PKG: ngtest; `dart run build_runner build --delete-conflicting-outputs --fail-on-severe`" runs-on: ubuntu-latest steps: - name: Cache Pub hosted dependencies @@ -770,8 +542,8 @@ jobs: run: dart pub upgrade if: "always() && steps.checkout.conclusion == 'success'" working-directory: ngtest - - name: "ngtest; dart run build_runner build --fail-on-severe" - run: dart run build_runner build --fail-on-severe + - name: "ngtest; dart run build_runner build --delete-conflicting-outputs --fail-on-severe" + run: dart run build_runner build --delete-conflicting-outputs --fail-on-severe if: "always() && steps.ngtest_pub_upgrade.conclusion == 'success'" working-directory: ngtest needs: @@ -779,9 +551,8 @@ jobs: - job_002 - job_003 - job_004 - - job_005 - job_018: - name: "unit_test; Dart 3.6.0; PKG: _tests; `dart run build_runner test --fail-on-severe -- -P browser`" + job_013: + name: "unit_test; Dart 3.6.0; PKG: _tests; `dart run build_runner test --delete-conflicting-outputs --fail-on-severe -- -P browser`" runs-on: ubuntu-latest steps: - name: Cache Pub hosted dependencies @@ -806,8 +577,8 @@ jobs: run: dart pub upgrade if: "always() && steps.checkout.conclusion == 'success'" working-directory: _tests - - name: "_tests; dart run build_runner test --fail-on-severe -- -P browser" - run: dart run build_runner test --fail-on-severe -- -P browser + - name: "_tests; dart run build_runner test --delete-conflicting-outputs --fail-on-severe -- -P browser" + run: dart run build_runner test --delete-conflicting-outputs --fail-on-severe -- -P browser if: "always() && steps._tests_pub_upgrade.conclusion == 'success'" working-directory: _tests needs: @@ -823,12 +594,7 @@ jobs: - job_010 - job_011 - job_012 - - job_013 - - job_014 - - job_015 - - job_016 - - job_017 - job_019: + job_014: name: "unit_test; Dart 3.6.0; PKG: _tests; `dart test -P vm`" runs-on: ubuntu-latest steps: @@ -871,12 +637,7 @@ jobs: - job_010 - job_011 - job_012 - - job_013 - - job_014 - - job_015 - - job_016 - - job_017 - job_020: + job_015: name: "unit_test; Dart 3.6.0; PKG: ngast; `dart test -P ci`" runs-on: ubuntu-latest steps: @@ -919,12 +680,7 @@ jobs: - job_010 - job_011 - job_012 - - job_013 - - job_014 - - job_015 - - job_016 - - job_017 - job_021: + job_016: name: "unit_test; Dart 3.6.0; PKG: ngcompiler; `dart test -P ci`" runs-on: ubuntu-latest steps: @@ -967,13 +723,8 @@ jobs: - job_010 - job_011 - job_012 - - job_013 - - job_014 - - job_015 - - job_016 - - job_017 - job_022: - name: "unit_test; Dart 3.6.0; PKG: ngforms; `dart run build_runner test --fail-on-severe -- -P ci`" + job_017: + name: "unit_test; Dart 3.6.0; PKG: ngforms; `dart run build_runner test --delete-conflicting-outputs --fail-on-severe -- -P ci`" runs-on: ubuntu-latest steps: - name: Cache Pub hosted dependencies @@ -998,8 +749,8 @@ jobs: run: dart pub upgrade if: "always() && steps.checkout.conclusion == 'success'" working-directory: ngforms - - name: "ngforms; dart run build_runner test --fail-on-severe -- -P ci" - run: dart run build_runner test --fail-on-severe -- -P ci + - name: "ngforms; dart run build_runner test --delete-conflicting-outputs --fail-on-severe -- -P ci" + run: dart run build_runner test --delete-conflicting-outputs --fail-on-severe -- -P ci if: "always() && steps.ngforms_pub_upgrade.conclusion == 'success'" working-directory: ngforms needs: @@ -1015,13 +766,8 @@ jobs: - job_010 - job_011 - job_012 - - job_013 - - job_014 - - job_015 - - job_016 - - job_017 - job_023: - name: "unit_test; Dart 3.6.0; PKG: ngrouter; `dart run build_runner test --fail-on-severe -- -P ci`" + job_018: + name: "unit_test; Dart 3.6.0; PKG: ngrouter; `dart run build_runner test --delete-conflicting-outputs --fail-on-severe -- -P ci`" runs-on: ubuntu-latest steps: - name: Cache Pub hosted dependencies @@ -1046,8 +792,8 @@ jobs: run: dart pub upgrade if: "always() && steps.checkout.conclusion == 'success'" working-directory: ngrouter - - name: "ngrouter; dart run build_runner test --fail-on-severe -- -P ci" - run: dart run build_runner test --fail-on-severe -- -P ci + - name: "ngrouter; dart run build_runner test --delete-conflicting-outputs --fail-on-severe -- -P ci" + run: dart run build_runner test --delete-conflicting-outputs --fail-on-severe -- -P ci if: "always() && steps.ngrouter_pub_upgrade.conclusion == 'success'" working-directory: ngrouter needs: @@ -1063,13 +809,8 @@ jobs: - job_010 - job_011 - job_012 - - job_013 - - job_014 - - job_015 - - job_016 - - job_017 - job_024: - name: "unit_test; Dart 3.6.0; PKG: ngtest; `dart run build_runner test --fail-on-severe -- -P ci`" + job_019: + name: "unit_test; Dart 3.6.0; PKG: ngtest; `dart run build_runner test --delete-conflicting-outputs --fail-on-severe -- -P ci`" runs-on: ubuntu-latest steps: - name: Cache Pub hosted dependencies @@ -1094,344 +835,8 @@ jobs: run: dart pub upgrade if: "always() && steps.checkout.conclusion == 'success'" working-directory: ngtest - - name: "ngtest; dart run build_runner test --fail-on-severe -- -P ci" - run: dart run build_runner test --fail-on-severe -- -P ci - if: "always() && steps.ngtest_pub_upgrade.conclusion == 'success'" - working-directory: ngtest - needs: - - job_001 - - job_002 - - job_003 - - job_004 - - job_005 - - job_006 - - job_007 - - job_008 - - job_009 - - job_010 - - job_011 - - job_012 - - job_013 - - job_014 - - job_015 - - job_016 - - job_017 - job_025: - name: "unit_test; Dart dev; PKG: _tests; `dart run build_runner test --fail-on-severe -- -P browser`" - runs-on: ubuntu-latest - steps: - - name: Cache Pub hosted dependencies - uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf - with: - path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:_tests;commands:command_2" - restore-keys: | - os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:_tests - os:ubuntu-latest;pub-cache-hosted;sdk:dev - os:ubuntu-latest;pub-cache-hosted - os:ubuntu-latest - - name: Setup Dart SDK - uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c - with: - sdk: dev - - id: checkout - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - - id: _tests_pub_upgrade - name: _tests; dart pub upgrade - run: dart pub upgrade - if: "always() && steps.checkout.conclusion == 'success'" - working-directory: _tests - - name: "_tests; dart run build_runner test --fail-on-severe -- -P browser" - run: dart run build_runner test --fail-on-severe -- -P browser - if: "always() && steps._tests_pub_upgrade.conclusion == 'success'" - working-directory: _tests - needs: - - job_001 - - job_002 - - job_003 - - job_004 - - job_005 - - job_006 - - job_007 - - job_008 - - job_009 - - job_010 - - job_011 - - job_012 - - job_013 - - job_014 - - job_015 - - job_016 - - job_017 - job_026: - name: "unit_test; Dart dev; PKG: _tests; `dart test -P vm`" - runs-on: ubuntu-latest - steps: - - name: Cache Pub hosted dependencies - uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf - with: - path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:_tests;commands:command_1" - restore-keys: | - os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:_tests - os:ubuntu-latest;pub-cache-hosted;sdk:dev - os:ubuntu-latest;pub-cache-hosted - os:ubuntu-latest - - name: Setup Dart SDK - uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c - with: - sdk: dev - - id: checkout - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - - id: _tests_pub_upgrade - name: _tests; dart pub upgrade - run: dart pub upgrade - if: "always() && steps.checkout.conclusion == 'success'" - working-directory: _tests - - name: "_tests; dart test -P vm" - run: dart test -P vm - if: "always() && steps._tests_pub_upgrade.conclusion == 'success'" - working-directory: _tests - needs: - - job_001 - - job_002 - - job_003 - - job_004 - - job_005 - - job_006 - - job_007 - - job_008 - - job_009 - - job_010 - - job_011 - - job_012 - - job_013 - - job_014 - - job_015 - - job_016 - - job_017 - job_027: - name: "unit_test; Dart dev; PKG: ngast; `dart test -P ci`" - runs-on: ubuntu-latest - steps: - - name: Cache Pub hosted dependencies - uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf - with: - path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:ngast;commands:test" - restore-keys: | - os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:ngast - os:ubuntu-latest;pub-cache-hosted;sdk:dev - os:ubuntu-latest;pub-cache-hosted - os:ubuntu-latest - - name: Setup Dart SDK - uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c - with: - sdk: dev - - id: checkout - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - - id: ngast_pub_upgrade - name: ngast; dart pub upgrade - run: dart pub upgrade - if: "always() && steps.checkout.conclusion == 'success'" - working-directory: ngast - - name: "ngast; dart test -P ci" - run: dart test -P ci - if: "always() && steps.ngast_pub_upgrade.conclusion == 'success'" - working-directory: ngast - needs: - - job_001 - - job_002 - - job_003 - - job_004 - - job_005 - - job_006 - - job_007 - - job_008 - - job_009 - - job_010 - - job_011 - - job_012 - - job_013 - - job_014 - - job_015 - - job_016 - - job_017 - job_028: - name: "unit_test; Dart dev; PKG: ngcompiler; `dart test -P ci`" - runs-on: ubuntu-latest - steps: - - name: Cache Pub hosted dependencies - uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf - with: - path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:ngcompiler;commands:test" - restore-keys: | - os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:ngcompiler - os:ubuntu-latest;pub-cache-hosted;sdk:dev - os:ubuntu-latest;pub-cache-hosted - os:ubuntu-latest - - name: Setup Dart SDK - uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c - with: - sdk: dev - - id: checkout - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - - id: ngcompiler_pub_upgrade - name: ngcompiler; dart pub upgrade - run: dart pub upgrade - if: "always() && steps.checkout.conclusion == 'success'" - working-directory: ngcompiler - - name: "ngcompiler; dart test -P ci" - run: dart test -P ci - if: "always() && steps.ngcompiler_pub_upgrade.conclusion == 'success'" - working-directory: ngcompiler - needs: - - job_001 - - job_002 - - job_003 - - job_004 - - job_005 - - job_006 - - job_007 - - job_008 - - job_009 - - job_010 - - job_011 - - job_012 - - job_013 - - job_014 - - job_015 - - job_016 - - job_017 - job_029: - name: "unit_test; Dart dev; PKG: ngforms; `dart run build_runner test --fail-on-severe -- -P ci`" - runs-on: ubuntu-latest - steps: - - name: Cache Pub hosted dependencies - uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf - with: - path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:ngforms;commands:command_3" - restore-keys: | - os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:ngforms - os:ubuntu-latest;pub-cache-hosted;sdk:dev - os:ubuntu-latest;pub-cache-hosted - os:ubuntu-latest - - name: Setup Dart SDK - uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c - with: - sdk: dev - - id: checkout - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - - id: ngforms_pub_upgrade - name: ngforms; dart pub upgrade - run: dart pub upgrade - if: "always() && steps.checkout.conclusion == 'success'" - working-directory: ngforms - - name: "ngforms; dart run build_runner test --fail-on-severe -- -P ci" - run: dart run build_runner test --fail-on-severe -- -P ci - if: "always() && steps.ngforms_pub_upgrade.conclusion == 'success'" - working-directory: ngforms - needs: - - job_001 - - job_002 - - job_003 - - job_004 - - job_005 - - job_006 - - job_007 - - job_008 - - job_009 - - job_010 - - job_011 - - job_012 - - job_013 - - job_014 - - job_015 - - job_016 - - job_017 - job_030: - name: "unit_test; Dart dev; PKG: ngrouter; `dart run build_runner test --fail-on-severe -- -P ci`" - runs-on: ubuntu-latest - steps: - - name: Cache Pub hosted dependencies - uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf - with: - path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:ngrouter;commands:command_3" - restore-keys: | - os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:ngrouter - os:ubuntu-latest;pub-cache-hosted;sdk:dev - os:ubuntu-latest;pub-cache-hosted - os:ubuntu-latest - - name: Setup Dart SDK - uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c - with: - sdk: dev - - id: checkout - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - - id: ngrouter_pub_upgrade - name: ngrouter; dart pub upgrade - run: dart pub upgrade - if: "always() && steps.checkout.conclusion == 'success'" - working-directory: ngrouter - - name: "ngrouter; dart run build_runner test --fail-on-severe -- -P ci" - run: dart run build_runner test --fail-on-severe -- -P ci - if: "always() && steps.ngrouter_pub_upgrade.conclusion == 'success'" - working-directory: ngrouter - needs: - - job_001 - - job_002 - - job_003 - - job_004 - - job_005 - - job_006 - - job_007 - - job_008 - - job_009 - - job_010 - - job_011 - - job_012 - - job_013 - - job_014 - - job_015 - - job_016 - - job_017 - job_031: - name: "unit_test; Dart dev; PKG: ngtest; `dart run build_runner test --fail-on-severe -- -P ci`" - runs-on: ubuntu-latest - steps: - - name: Cache Pub hosted dependencies - uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf - with: - path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:ngtest;commands:command_3" - restore-keys: | - os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:ngtest - os:ubuntu-latest;pub-cache-hosted;sdk:dev - os:ubuntu-latest;pub-cache-hosted - os:ubuntu-latest - - name: Setup Dart SDK - uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c - with: - sdk: dev - - id: checkout - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - - id: ngtest_pub_upgrade - name: ngtest; dart pub upgrade - run: dart pub upgrade - if: "always() && steps.checkout.conclusion == 'success'" - working-directory: ngtest - - name: "ngtest; dart run build_runner test --fail-on-severe -- -P ci" - run: dart run build_runner test --fail-on-severe -- -P ci + - name: "ngtest; dart run build_runner test --delete-conflicting-outputs --fail-on-severe -- -P ci" + run: dart run build_runner test --delete-conflicting-outputs --fail-on-severe -- -P ci if: "always() && steps.ngtest_pub_upgrade.conclusion == 'success'" working-directory: ngtest needs: @@ -1447,13 +852,8 @@ jobs: - job_010 - job_011 - job_012 - - job_013 - - job_014 - - job_015 - - job_016 - - job_017 - job_032: - name: "unit_test; Dart stable; PKG: _tests; `dart run build_runner test --fail-on-severe -- -P browser`" + job_020: + name: "unit_test; Dart stable; PKG: _tests; `dart run build_runner test --delete-conflicting-outputs --fail-on-severe -- -P browser`" runs-on: ubuntu-latest steps: - name: Cache Pub hosted dependencies @@ -1478,8 +878,8 @@ jobs: run: dart pub upgrade if: "always() && steps.checkout.conclusion == 'success'" working-directory: _tests - - name: "_tests; dart run build_runner test --fail-on-severe -- -P browser" - run: dart run build_runner test --fail-on-severe -- -P browser + - name: "_tests; dart run build_runner test --delete-conflicting-outputs --fail-on-severe -- -P browser" + run: dart run build_runner test --delete-conflicting-outputs --fail-on-severe -- -P browser if: "always() && steps._tests_pub_upgrade.conclusion == 'success'" working-directory: _tests needs: @@ -1495,12 +895,7 @@ jobs: - job_010 - job_011 - job_012 - - job_013 - - job_014 - - job_015 - - job_016 - - job_017 - job_033: + job_021: name: "unit_test; Dart stable; PKG: _tests; `dart test -P vm`" runs-on: ubuntu-latest steps: @@ -1543,12 +938,7 @@ jobs: - job_010 - job_011 - job_012 - - job_013 - - job_014 - - job_015 - - job_016 - - job_017 - job_034: + job_022: name: "unit_test; Dart stable; PKG: ngast; `dart test -P ci`" runs-on: ubuntu-latest steps: @@ -1591,12 +981,7 @@ jobs: - job_010 - job_011 - job_012 - - job_013 - - job_014 - - job_015 - - job_016 - - job_017 - job_035: + job_023: name: "unit_test; Dart stable; PKG: ngcompiler; `dart test -P ci`" runs-on: ubuntu-latest steps: @@ -1639,13 +1024,8 @@ jobs: - job_010 - job_011 - job_012 - - job_013 - - job_014 - - job_015 - - job_016 - - job_017 - job_036: - name: "unit_test; Dart stable; PKG: ngforms; `dart run build_runner test --fail-on-severe -- -P ci`" + job_024: + name: "unit_test; Dart stable; PKG: ngforms; `dart run build_runner test --delete-conflicting-outputs --fail-on-severe -- -P ci`" runs-on: ubuntu-latest steps: - name: Cache Pub hosted dependencies @@ -1670,8 +1050,8 @@ jobs: run: dart pub upgrade if: "always() && steps.checkout.conclusion == 'success'" working-directory: ngforms - - name: "ngforms; dart run build_runner test --fail-on-severe -- -P ci" - run: dart run build_runner test --fail-on-severe -- -P ci + - name: "ngforms; dart run build_runner test --delete-conflicting-outputs --fail-on-severe -- -P ci" + run: dart run build_runner test --delete-conflicting-outputs --fail-on-severe -- -P ci if: "always() && steps.ngforms_pub_upgrade.conclusion == 'success'" working-directory: ngforms needs: @@ -1687,13 +1067,8 @@ jobs: - job_010 - job_011 - job_012 - - job_013 - - job_014 - - job_015 - - job_016 - - job_017 - job_037: - name: "unit_test; Dart stable; PKG: ngrouter; `dart run build_runner test --fail-on-severe -- -P ci`" + job_025: + name: "unit_test; Dart stable; PKG: ngrouter; `dart run build_runner test --delete-conflicting-outputs --fail-on-severe -- -P ci`" runs-on: ubuntu-latest steps: - name: Cache Pub hosted dependencies @@ -1718,8 +1093,8 @@ jobs: run: dart pub upgrade if: "always() && steps.checkout.conclusion == 'success'" working-directory: ngrouter - - name: "ngrouter; dart run build_runner test --fail-on-severe -- -P ci" - run: dart run build_runner test --fail-on-severe -- -P ci + - name: "ngrouter; dart run build_runner test --delete-conflicting-outputs --fail-on-severe -- -P ci" + run: dart run build_runner test --delete-conflicting-outputs --fail-on-severe -- -P ci if: "always() && steps.ngrouter_pub_upgrade.conclusion == 'success'" working-directory: ngrouter needs: @@ -1735,13 +1110,8 @@ jobs: - job_010 - job_011 - job_012 - - job_013 - - job_014 - - job_015 - - job_016 - - job_017 - job_038: - name: "unit_test; Dart stable; PKG: ngtest; `dart run build_runner test --fail-on-severe -- -P ci`" + job_026: + name: "unit_test; Dart stable; PKG: ngtest; `dart run build_runner test --delete-conflicting-outputs --fail-on-severe -- -P ci`" runs-on: ubuntu-latest steps: - name: Cache Pub hosted dependencies @@ -1766,8 +1136,8 @@ jobs: run: dart pub upgrade if: "always() && steps.checkout.conclusion == 'success'" working-directory: ngtest - - name: "ngtest; dart run build_runner test --fail-on-severe -- -P ci" - run: dart run build_runner test --fail-on-severe -- -P ci + - name: "ngtest; dart run build_runner test --delete-conflicting-outputs --fail-on-severe -- -P ci" + run: dart run build_runner test --delete-conflicting-outputs --fail-on-severe -- -P ci if: "always() && steps.ngtest_pub_upgrade.conclusion == 'success'" working-directory: ngtest needs: @@ -1783,8 +1153,3 @@ jobs: - job_010 - job_011 - job_012 - - job_013 - - job_014 - - job_015 - - job_016 - - job_017 diff --git a/_tests/dart_test.yaml b/_tests/dart_test.yaml index df4d34ee01..581c9b0d2c 100644 --- a/_tests/dart_test.yaml +++ b/_tests/dart_test.yaml @@ -5,6 +5,9 @@ presets: browser: platforms: - chrome + compilers: + - dart2js + - dart2wasm paths: - test/bootstrap - test/common diff --git a/_tests/lib/compiler.dart b/_tests/lib/compiler.dart index e011bf78a6..e8c6033bfc 100644 --- a/_tests/lib/compiler.dart +++ b/_tests/lib/compiler.dart @@ -106,7 +106,7 @@ Future _testBuilder( inputIds, reader, writer, - AnalyzerResolvers(), + AnalyzerResolvers.custom(), logger: logger, ), ['non-nullable'], diff --git a/_tests/lib/matchers.dart b/_tests/lib/matchers.dart index 9309be769f..9e528605f5 100644 --- a/_tests/lib/matchers.dart +++ b/_tests/lib/matchers.dart @@ -1,11 +1,18 @@ -import 'dart:html'; +import 'dart:js_interop'; import 'package:ngdart/angular.dart'; import 'package:test/test.dart'; +import 'package:web/web.dart'; /// Matches textual content of an element including children. Matcher hasTextContent(String expected) => _HasTextContent(expected); +/// Matches DOMTokenList. +Matcher hasDomTokenList(List expected) => _HasDomTokenList(expected); + +/// Matches textual content of an element including children. +Matcher hasInnerHtml(String expected) => _HasInnerHtml(expected); + final throwsNoProviderError = throwsA(_isNoProviderError); final _isNoProviderError = const TypeMatcher(); @@ -15,7 +22,8 @@ class _HasTextContent extends Matcher { const _HasTextContent(this.expectedText); @override - bool matches(Object? item, void _) => _elementText(item) == expectedText; + bool matches(Object? item, void _) => + _elementText(item as JSAny?) == expectedText; @override Description describe(Description description) => @@ -29,33 +37,100 @@ class _HasTextContent extends Matcher { void __, ) { mismatchDescription.add('Text content of element: ' - '\'${_elementText(item)}\''); + '\'${_elementText(item as JSAny?)}\''); return mismatchDescription; } } -String? _elementText(Object? n) { - if (n is Iterable) { - return n.map(_elementText).join(''); - } else if (n is Node) { - if (n is Comment) { +String? _elementText(JSAny? node) { + if (node.isA()) { + return [ + for (var i = 0; i < (node as NodeList).length; i++) + _elementText(node.item(i)) + ].join(''); + } + + if (node.isA()) { + if (node.isA()) { return ''; } - if (n is ContentElement) { - return _elementText(n.getDistributedNodes()); + if (node.isA() && (node as Element).shadowRoot != null) { + return _elementText(node.shadowRoot!.childNodes); + } + + if ((node as Node).childNodes.length != 0) { + return _elementText(node.childNodes); } - if (n is Element && n.shadowRoot != null) { - return _elementText(n.shadowRoot!.nodes); + return node.textContent; + } + + return null; +} + +class _HasDomTokenList extends Matcher { + final List expectedTokens; + + const _HasDomTokenList(this.expectedTokens); + + @override + bool matches(Object? item, void _) { + final tokens = item as DOMTokenList; + + if (tokens.length != expectedTokens.length) { + return false; } - if (n.nodes.isNotEmpty) { - return _elementText(n.nodes); + for (var i = 0; i < expectedTokens.length; i++) { + if (tokens.item(i) != expectedTokens[i]) { + return false; + } } - return n.text; - } else { - return '$n'; + return true; + } + + @override + Description describe(Description description) { + return description.add(expectedTokens.join(',')); + } + + @override + Description describeMismatch( + item, + Description mismatchDescription, + void _, + void __, + ) { + mismatchDescription.add('DOMTokenList: \'$item}\''); + return mismatchDescription; + } +} + +class _HasInnerHtml extends Matcher { + final String expectedHtml; + + const _HasInnerHtml(this.expectedHtml); + + @override + bool matches(Object? item, void _) { + return ((item as Element).innerHTML as JSString).toDart == expectedHtml; + } + + @override + Description describe(Description description) => + description.add(expectedHtml); + + @override + Description describeMismatch( + item, + Description mismatchDescription, + void _, + void __, + ) { + mismatchDescription.add('Inner HTML of element: ' + '\'${_elementText(item as Element)}\''); + return mismatchDescription; } } diff --git a/_tests/mono_pkg.yaml b/_tests/mono_pkg.yaml index ff19ea1a63..7517a33007 100644 --- a/_tests/mono_pkg.yaml +++ b/_tests/mono_pkg.yaml @@ -1,11 +1,11 @@ sdk: - pubspec - - dev - stable + # - dev stages: - build: - - command: dart run build_runner build --fail-on-severe + - command: dart run build_runner build --delete-conflicting-outputs --fail-on-severe - unit_test: - command: dart test -P vm - - command: dart run build_runner test --fail-on-severe -- -P browser + - command: dart run build_runner test --delete-conflicting-outputs --fail-on-severe -- -P browser diff --git a/_tests/pubspec.yaml b/_tests/pubspec.yaml index 21afcfec53..fefc46af6e 100644 --- a/_tests/pubspec.yaml +++ b/_tests/pubspec.yaml @@ -13,13 +13,13 @@ dependencies: build_test: ^2.2.2 collection: ^1.19.1 glob: ^2.1.2 - js: ^0.7.1 logging: ^1.3.0 ngcompiler: ^3.0.0-dev.3 ngdart: ^8.0.0-dev.4 ngtest: ^5.0.0-dev.2 source_gen: ^1.5.0 test: ^1.25.9 + web: ^1.1.1 dev_dependencies: analyzer: ^6.5.0 diff --git a/_tests/test/bootstrap/run_app_test.dart b/_tests/test/bootstrap/run_app_test.dart index fcee2b14f2..e76876e662 100644 --- a/_tests/test/bootstrap/run_app_test.dart +++ b/_tests/test/bootstrap/run_app_test.dart @@ -1,12 +1,9 @@ -@JS() -library angular.test.bootstrap.run_app_test; - import 'dart:async'; -import 'dart:html'; +import 'dart:js_interop'; -import 'package:js/js.dart'; import 'package:ngdart/angular.dart'; import 'package:test/test.dart'; +import 'package:web/web.dart'; import 'run_app_test.template.dart' as ng; @@ -27,9 +24,9 @@ void main() { /// Verify that the DOM of the page represents the component. void verifyDomAndStyles({String innerText = 'Hello World!'}) { - expect(rootDomContainer.text, innerText); + expect(rootDomContainer.textContent, innerText); final h1 = rootDomContainer.querySelector('h1'); - expect(h1!.getComputedStyle().height, '100px'); + expect(window.getComputedStyle(h1!).height, '100px'); } /// Verify the `Testability` interface is working for this application. @@ -38,21 +35,21 @@ void main() { void verifyTestability() { expect(component.injector.get(Testability), isNotNull); var jsTestability = getAngularTestability( - rootDomContainer.children.first, + rootDomContainer.children.item(0)!, ); - expect(getAllAngularTestabilities(), isNot(hasLength(0))); + expect(getAllAngularTestabilities().length, isNot(equals(0))); expect(jsTestability.isStable(), isTrue, reason: 'Expected stability'); - jsTestability.whenStable(allowInterop(expectAsync0(() { + jsTestability.whenStable(expectAsync0(() { Future(expectAsync0(() { verifyDomAndStyles(innerText: 'Hello Universe!'); })); - }))); + }).toJS); runInApp(() => HelloWorldComponent.doAsyncTaskAndThenRename('Universe')); } setUp(() { - rootDomContainer = DivElement()..id = 'test-root-dom'; - rootDomContainer.append(Element.tag('hello-world')); + rootDomContainer = HTMLDivElement()..id = 'test-root-dom'; + rootDomContainer.append(document.createElement('hello-world')); document.body!.append(rootDomContainer); HelloWorldComponent.name = 'World'; }); @@ -166,10 +163,9 @@ class StubExceptionHandler implements ExceptionHandler { external JsTestability getAngularTestability(Element e); @JS() -external List getAllAngularTestabilities(); +external JSArray getAllAngularTestabilities(); -@JS() -abstract class JsTestability { +extension type JsTestability._(JSObject _) implements JSObject { external bool isStable(); - external void whenStable(void Function() fn); + external void whenStable(JSFunction fn); } diff --git a/_tests/test/common/directives/for_test.dart b/_tests/test/common/directives/for_test.dart index b881721920..ab83eb5e4b 100644 --- a/_tests/test/common/directives/for_test.dart +++ b/_tests/test/common/directives/for_test.dart @@ -1,5 +1,3 @@ -library angular2.test.common.directives.for_test; - import 'dart:async'; import 'package:_tests/matchers.dart'; @@ -298,7 +296,7 @@ void main() { await testFixture.update((component) { component.child!.items = ['a', 'b', 'c']; }); - expect(testFixture.text, hasTextContent('0: a;1: b;2: c;')); + expect(testFixture.text, equals('0: a;1: b;2: c;')); }); test('should use a default template if a custom one is null', () async { @@ -308,7 +306,7 @@ void main() { await testFixture.update((NgForCustomTemplateNullTest component) { component.child!.items = ['a', 'b', 'c']; }); - expect(testFixture.text, hasTextContent('0: a;1: b;2: c;')); + expect(testFixture.text, equals('0: a;1: b;2: c;')); }); test( @@ -320,7 +318,7 @@ void main() { await testFixture.update((NgForCustomTemplatePrecedenceTest component) { component.child!.items = ['a', 'b', 'c']; }); - expect(testFixture.text, hasTextContent('0: a;1: b;2: c;')); + expect(testFixture.text, equals('0: a;1: b;2: c;')); }); group('track by', () { @@ -380,8 +378,8 @@ void main() { ]; }); var endElements = testFixture.rootElement.querySelectorAll('p'); - expect(startElements[0], endElements[1]); - expect(startElements[1], endElements[0]); + expect(startElements.item(0), endElements.item(1)); + expect(startElements.item(1), endElements.item(0)); }); test( diff --git a/_tests/test/common/directives/if_test.dart b/_tests/test/common/directives/if_test.dart index 956a8b7028..ef4122c5e6 100644 --- a/_tests/test/common/directives/if_test.dart +++ b/_tests/test/common/directives/if_test.dart @@ -1,3 +1,5 @@ +import 'dart:js_interop'; + import 'package:ngdart/angular.dart'; import 'package:ngdart/src/runtime/check_binding.dart'; import 'package:ngtest/angular_test.dart'; @@ -15,7 +17,7 @@ void main() { var testFixture = await testBed.create(); var element = testFixture.rootElement; expect(element.querySelectorAll('copy-me'), hasLength(1)); - expect(element.innerHtml, contains('hello2')); + expect(element.innerHTML, contains('hello2')); }); test('should toggle node when condition changes', () async { @@ -50,31 +52,31 @@ void main() { component.booleanCondition = false; }); expect(element.querySelectorAll('copy-me'), hasLength(0)); - expect(element.innerHtml!.contains('hello'), false); + expect((element.innerHTML as JSString).toDart.contains('hello'), isFalse); await testFixture.update((NgIfNestedTestComponent component) { component.booleanCondition = true; }); expect(element.querySelectorAll('copy-me'), hasLength(1)); - expect(element.innerHtml!.contains('hello'), true); + expect((element.innerHTML as JSString).toDart.contains('hello'), isTrue); await testFixture.update((NgIfNestedTestComponent component) { component.nestedBooleanCondition = false; }); expect(element.querySelectorAll('copy-me'), hasLength(0)); - expect(element.innerHtml!.contains('hello'), false); + expect((element.innerHTML as JSString).toDart.contains('hello'), isFalse); await testFixture.update((NgIfNestedTestComponent component) { component.nestedBooleanCondition = true; }); expect(element.querySelectorAll('copy-me'), hasLength(1)); - expect(element.innerHtml!.contains('hello'), true); + expect((element.innerHTML as JSString).toDart.contains('hello'), isTrue); await testFixture.update((NgIfNestedTestComponent component) { component.booleanCondition = false; }); expect(element.querySelectorAll('copy-me'), hasLength(0)); - expect(element.innerHtml!.contains('hello'), false); + expect((element.innerHTML as JSString).toDart.contains('hello'), isFalse); }); test('should update multiple bindings', () async { @@ -84,20 +86,21 @@ void main() { var element = testFixture.rootElement; // Check startup. expect(element.querySelectorAll('copy-me'), hasLength(3)); - expect(element.text, 'helloNumberhelloStringhelloFunction'); + expect( + element.textContent, equals('helloNumberhelloStringhelloFunction')); await testFixture.update((NgIfMultiUpdateTestComponent component) { component.numberCondition = 0; }); expect(element.querySelectorAll('copy-me'), hasLength(1)); - expect(element.text, 'helloString'); + expect(element.textContent, equals('helloString')); await testFixture.update((NgIfMultiUpdateTestComponent component) { component.numberCondition = 1; component.stringCondition = 'bar'; }); expect(element.querySelectorAll('copy-me'), hasLength(1)); - expect(element.text, 'helloNumber'); + expect(element.textContent, equals('helloNumber')); await testFixture.update((NgIfMultiUpdateTestComponent component) { component.booleanCondition = false; }); diff --git a/_tests/test/common/directives/ng_class_test.dart b/_tests/test/common/directives/ng_class_test.dart index 1692a5753b..c15db1f6d7 100644 --- a/_tests/test/common/directives/ng_class_test.dart +++ b/_tests/test/common/directives/ng_class_test.dart @@ -1,8 +1,8 @@ -import 'dart:html'; - +import 'package:_tests/matchers.dart'; import 'package:ngdart/angular.dart'; import 'package:ngtest/angular_test.dart'; import 'package:test/test.dart'; +import 'package:web/web.dart'; import 'ng_class_test.template.dart' as ng; @@ -25,8 +25,8 @@ void main() { ]; }); expect( - testFixture.rootElement.querySelector('div')!.classes, - equals(['1']), + testFixture.rootElement.querySelector('div')!.classList, + hasDomTokenList(['1']), ); }); @@ -35,8 +35,8 @@ void main() { var testBed = NgTestBed(ng.createClassWithNamesFactory()); var testFixture = await testBed.create(); expect( - testFixture.rootElement.querySelector('div')!.classes, - equals(['foo-bar', 'fooBar']), + testFixture.rootElement.querySelector('div')!.classList, + hasDomTokenList(['foo-bar', 'fooBar']), ); }); @@ -45,30 +45,30 @@ void main() { NgTestBed(ng.createConditionMapTestFactory()); var testFixture = await testBed.create(); var content = testFixture.rootElement.querySelector('div')!; - expect(content.classes, equals(['foo'])); + expect(content.classList, hasDomTokenList(['foo'])); await testFixture.update((ConditionMapTest component) { component.condition = false; }); - expect(content.classes, equals(['bar'])); + expect(content.classList, hasDomTokenList(['bar'])); }); test('should update classes based on changes to the map', () async { var testBed = NgTestBed(ng.createMapUpdateTestFactory()); var testFixture = await testBed.create(); var content = testFixture.rootElement.querySelector('div')!; - expect(content.classes, equals(['foo'])); + expect(content.classList, hasDomTokenList(['foo'])); await testFixture.update((MapUpdateTest component) { component.map!['bar'] = true; }); - expect(content.classes, equals(['foo', 'bar'])); + expect(content.classList, hasDomTokenList(['foo', 'bar'])); await testFixture.update((MapUpdateTest component) { component.map!['baz'] = true; }); - expect(content.classes, equals(['foo', 'bar', 'baz'])); + expect(content.classList, hasDomTokenList(['foo', 'bar', 'baz'])); await testFixture.update((MapUpdateTest component) { component.map!.remove('bar'); }); - expect(content.classes, equals(['foo', 'baz'])); + expect(content.classList, hasDomTokenList(['foo', 'baz'])); }); test('should update classes based on reference changes to the map', @@ -76,30 +76,30 @@ void main() { var testBed = NgTestBed(ng.createMapUpdateTestFactory()); var testFixture = await testBed.create(); var content = testFixture.rootElement.querySelector('div')!; - expect(content.classes, equals(['foo'])); + expect(content.classList, hasDomTokenList(['foo'])); await testFixture.update((MapUpdateTest component) { component.map = {'foo': true, 'bar': true}; }); - expect(content.classes, equals(['foo', 'bar'])); + expect(content.classList, hasDomTokenList(['foo', 'bar'])); await testFixture.update((MapUpdateTest component) { component.map = {'baz': true}; }); - expect(content.classes, equals(['baz'])); + expect(content.classList, hasDomTokenList(['baz'])); }); test('should remove classes when expression is null', () async { var testBed = NgTestBed(ng.createMapUpdateTestFactory()); var testFixture = await testBed.create(); var content = testFixture.rootElement.querySelector('div')!; - expect(content.classes, equals(['foo'])); + expect(content.classList, hasDomTokenList(['foo'])); await testFixture.update((MapUpdateTest component) { component.map = null; }); - expect(content.classes, isEmpty); + expect(content.classList, hasDomTokenList([])); await testFixture.update((MapUpdateTest component) { component.map = {'foo': false, 'bar': true}; }); - expect(content.classes, equals(['bar'])); + expect(content.classList, hasDomTokenList(['bar'])); }); test('should allow multiple classes per expression', () async { @@ -109,11 +109,12 @@ void main() { await testFixture.update((MapUpdateTest component) { component.map = {'bar baz': true, 'bar1 baz1': true}; }); - expect(content.classes, equals(['bar', 'baz', 'bar1', 'baz1'])); + expect( + content.classList, hasDomTokenList(['bar', 'baz', 'bar1', 'baz1'])); await testFixture.update((MapUpdateTest component) { component.map = {'bar baz': false, 'bar1 baz1': true}; }); - expect(content.classes, equals(['bar1', 'baz1'])); + expect(content.classList, hasDomTokenList(['bar1', 'baz1'])); }); test('should split by one or more spaces between classes', () async { @@ -123,37 +124,37 @@ void main() { await testFixture.update((MapUpdateTest component) { component.map = {'foo bar baz': true}; }); - expect(content.classes, equals(['foo', 'bar', 'baz'])); + expect(content.classList, hasDomTokenList(['foo', 'bar', 'baz'])); }); test('should update classes based on changes to the list', () async { var testBed = NgTestBed(ng.createListUpdateTestFactory()); var testFixture = await testBed.create(); var content = testFixture.rootElement.querySelector('div')!; - expect(content.classes, equals(['foo'])); + expect(content.classList, hasDomTokenList(['foo'])); await testFixture.update((ListUpdateTest component) { component.list.add('bar'); }); - expect(content.classes, equals(['foo', 'bar'])); + expect(content.classList, hasDomTokenList(['foo', 'bar'])); await testFixture.update((ListUpdateTest component) { component.list[1] = 'baz'; }); - expect(content.classes, equals(['foo', 'baz'])); + expect(content.classList, hasDomTokenList(['foo', 'baz'])); await testFixture.update((ListUpdateTest component) { component.list.remove('baz'); }); - expect(content.classes, equals(['foo'])); + expect(content.classList, hasDomTokenList(['foo'])); }); test('should update classes when list reference changes', () async { var testBed = NgTestBed(ng.createListUpdateTestFactory()); var testFixture = await testBed.create(); var content = testFixture.rootElement.querySelector('div')!; - expect(content.classes, equals(['foo'])); + expect(content.classList, hasDomTokenList(['foo'])); await testFixture.update((ListUpdateTest component) { component.list = ['bar']; }); - expect(content.classes, equals(['bar'])); + expect(content.classList, hasDomTokenList(['bar'])); }); test('should take initial classes into account when a reference changes', @@ -162,11 +163,11 @@ void main() { ng.createListUpdateWithInitialTestFactory()); var testFixture = await testBed.create(); var content = testFixture.rootElement.querySelector('div')!; - expect(content.classes, equals(['foo'])); + expect(content.classList, hasDomTokenList(['foo'])); await testFixture.update((ListUpdateWithInitialTest component) { component.list = ['bar']; }); - expect(content.classes, equals(['foo', 'bar'])); + expect(content.classList, hasDomTokenList(['foo', 'bar'])); }); test('should ignore empty or blank class names', () async { @@ -177,7 +178,7 @@ void main() { await testFixture.update((ListUpdateWithInitialTest component) { component.list = ['', ' ']; }); - expect(content.classes, equals(['foo'])); + expect(content.classList, hasDomTokenList(['foo'])); }); test('should trim blanks from class names', () async { @@ -188,7 +189,7 @@ void main() { await testFixture.update((ListUpdateWithInitialTest component) { component.list = [' bar ']; }); - expect(content.classes, equals(['foo', 'bar'])); + expect(content.classList, hasDomTokenList(['foo', 'bar'])); }); test('should allow multiple classes per item in lists', () async { @@ -198,12 +199,13 @@ void main() { await testFixture.update((ListUpdateTest component) { component.list = ['foo bar baz', 'foo1 bar1 baz1']; }); - expect(content.classes, - equals(['foo', 'bar', 'baz', 'foo1', 'bar1', 'baz1'])); + expect(content.classList, + hasDomTokenList(['foo', 'bar', 'baz', 'foo1', 'bar1', 'baz1'])); await testFixture.update((ListUpdateTest component) { component.list = ['foo bar baz foobar']; }); - expect(content.classes, equals(['foo', 'bar', 'baz', 'foobar'])); + expect( + content.classList, hasDomTokenList(['foo', 'bar', 'baz', 'foobar'])); }); test('should update classes if the set instance changes', () async { @@ -215,13 +217,13 @@ void main() { await testFixture.update((SetUpdateTest component) { component.set = set; }); - expect(content.classes, equals(['bar'])); + expect(content.classList, hasDomTokenList(['bar'])); set = {}; set.add('baz'); await testFixture.update((SetUpdateTest component) { component.set = set; }); - expect(content.classes, equals(['baz'])); + expect(content.classList, hasDomTokenList(['baz'])); }); test('should add classes specified in a string literal', () async { @@ -229,7 +231,8 @@ void main() { NgTestBed(ng.createStringLiteralTestFactory()); var testFixture = await testBed.create(); var content = testFixture.rootElement.querySelector('div')!; - expect(content.classes, equals(['foo', 'bar', 'foo-bar', 'fooBar'])); + expect(content.classList, + hasDomTokenList(['foo', 'bar', 'foo-bar', 'fooBar'])); }); test('should update classes based on changes to the string', () async { @@ -237,15 +240,15 @@ void main() { NgTestBed(ng.createStringUpdateTestFactory()); var testFixture = await testBed.create(); var content = testFixture.rootElement.querySelector('div')!; - expect(content.classes, equals(['foo'])); + expect(content.classList, hasDomTokenList(['foo'])); await testFixture.update((StringUpdateTest component) { component.string = 'foo bar'; }); - expect(content.classes, equals(['foo', 'bar'])); + expect(content.classList, hasDomTokenList(['foo', 'bar'])); await testFixture.update((StringUpdateTest component) { component.string = 'baz'; }); - expect(content.classes, equals(['baz'])); + expect(content.classList, hasDomTokenList(['baz'])); }); test('should remove active classes when switching from string to null', @@ -254,11 +257,11 @@ void main() { NgTestBed(ng.createStringUpdateTestFactory()); var testFixture = await testBed.create(); var content = testFixture.rootElement.querySelector('div')!; - expect(content.classes, equals(['foo'])); + expect(content.classList, hasDomTokenList(['foo'])); await testFixture.update((StringUpdateTest component) { component.string = null; }); - expect(content.classes, isEmpty); + expect(content.classList.length, equals(0)); }); test( @@ -268,11 +271,11 @@ void main() { ng.createStringUpdateWithInitialTestFactory()); var testFixture = await testBed.create(); var content = testFixture.rootElement.querySelector('div')!; - expect(content.classes, equals(['foo'])); + expect(content.classList, hasDomTokenList(['foo'])); await testFixture.update((StringUpdateWithInitialTest component) { component.string = null; }); - expect(content.classes, equals(['foo'])); + expect(content.classList, hasDomTokenList(['foo'])); }); test('should ignore empty and blank strings', () async { @@ -283,7 +286,7 @@ void main() { await testFixture.update((StringUpdateWithInitialTest component) { component.string = ''; }); - expect(content.classes, equals(['foo'])); + expect(content.classList, hasDomTokenList(['foo'])); }); test('should cooperate with the class attribute', () async { @@ -294,15 +297,15 @@ void main() { await testFixture.update((MapUpdateWithInitialTest component) { component.map!['bar'] = true; }); - expect(content.classes, equals(['init', 'foo', 'bar'])); + expect(content.classList, hasDomTokenList(['init', 'foo', 'bar'])); await testFixture.update((MapUpdateWithInitialTest component) { component.map!['foo'] = false; }); - expect(content.classes, equals(['init', 'bar'])); + expect(content.classList, hasDomTokenList(['init', 'bar'])); await testFixture.update((MapUpdateWithInitialTest component) { component.map = null; }); - expect(content.classes, equals(['init', 'foo'])); + expect(content.classList, hasDomTokenList(['init', 'foo'])); }); test('should cooperate with interpolated class attribute', () async { @@ -314,17 +317,17 @@ void main() { .update((MapUpdateWithInitialInterpolationTest component) { component.map!['bar'] = true; }); - expect(content.classes, equals(['init', 'foo', 'bar'])); + expect(content.classList, hasDomTokenList(['init', 'foo', 'bar'])); await testFixture .update((MapUpdateWithInitialInterpolationTest component) { component.map!['foo'] = false; }); - expect(content.classes, equals(['init', 'bar'])); + expect(content.classList, hasDomTokenList(['init', 'bar'])); await testFixture .update((MapUpdateWithInitialInterpolationTest component) { component.map = null; }); - expect(content.classes, equals(['init', 'foo'])); + expect(content.classList, hasDomTokenList(['init', 'foo'])); }); test('should cooperate with class attribute and binding to it', () async { @@ -335,15 +338,15 @@ void main() { await testFixture.update((MapUpdateWithInitialBindingTest component) { component.map!['bar'] = true; }); - expect(content.classes, equals(['init', 'foo', 'bar'])); + expect(content.classList, hasDomTokenList(['init', 'foo', 'bar'])); await testFixture.update((MapUpdateWithInitialBindingTest component) { component.map!['foo'] = false; }); - expect(content.classes, equals(['init', 'bar'])); + expect(content.classList, hasDomTokenList(['init', 'bar'])); await testFixture.update((MapUpdateWithInitialBindingTest component) { component.map = null; }); - expect(content.classes, equals(['init', 'foo'])); + expect(content.classList, hasDomTokenList(['init', 'foo'])); }); test('should cooperate with class attribute and class.name binding', @@ -352,19 +355,19 @@ void main() { ng.createMapUpdateWithConditionBindingTestFactory()); var testFixture = await testBed.create(); var content = testFixture.rootElement.querySelector('div')!; - expect(content.classes, equals(['init', 'foo', 'baz'])); + expect(content.classList, hasDomTokenList(['init', 'foo', 'baz'])); await testFixture.update((MapUpdateWithConditionBindingTest component) { component.map!['bar'] = true; }); - expect(content.classes, equals(['init', 'foo', 'baz', 'bar'])); + expect(content.classList, hasDomTokenList(['init', 'foo', 'baz', 'bar'])); await testFixture.update((MapUpdateWithConditionBindingTest component) { component.map!['foo'] = false; }); - expect(content.classes, equals(['init', 'baz', 'bar'])); + expect(content.classList, hasDomTokenList(['init', 'baz', 'bar'])); await testFixture.update((MapUpdateWithConditionBindingTest component) { component.condition = false; }); - expect(content.classes, equals(['init', 'bar'])); + expect(content.classList, hasDomTokenList(['init', 'bar'])); }); test( @@ -374,19 +377,19 @@ void main() { ng.createMapUpdateWithStringBindingTestFactory()); var testFixture = await testBed.create(); var content = testFixture.rootElement.querySelector('div')!; - expect(content.classes, equals(['init', 'foo'])); + expect(content.classList, hasDomTokenList(['init', 'foo'])); await testFixture.update((MapUpdateWithStringBindingTest component) { component.map!['bar'] = true; }); - expect(content.classes, equals(['init', 'foo', 'bar'])); + expect(content.classList, hasDomTokenList(['init', 'foo', 'bar'])); await testFixture.update((MapUpdateWithStringBindingTest component) { component.string = 'baz'; }); - expect(content.classes, equals(['init', 'bar', 'baz', 'foo'])); + expect(content.classList, hasDomTokenList(['init', 'bar', 'baz', 'foo'])); await testFixture.update((MapUpdateWithStringBindingTest component) { component.map = null; }); - expect(content.classes, equals(['init', 'baz'])); + expect(content.classList, hasDomTokenList(['init', 'baz'])); }); test( @@ -396,17 +399,17 @@ void main() { ng.createInterpolationWithConditionBindingTestFactory()); var testFixture = await testBed.create(); var content = testFixture.rootElement.querySelector('div')!; - expect(content.classes, equals(['foo', 'baz'])); + expect(content.classList, hasDomTokenList(['foo', 'baz'])); await testFixture .update((InterpolationWithConditionBindingTest component) { component.condition = false; }); - expect(content.classes, equals(['foo'])); + expect(content.classList, hasDomTokenList(['foo'])); await testFixture .update((InterpolationWithConditionBindingTest component) { component.condition = true; }); - expect(content.classes, equals(['foo', 'baz'])); + expect(content.classList, hasDomTokenList(['foo', 'baz'])); }); }); @@ -681,8 +684,16 @@ class MapUpdateWithStringBindingTest extends Base {} class InterpolationWithConditionBindingTest extends Base {} extension _SumCssClasses on Element { - Iterable get allCssClasses { - return querySelectorAll('*').map((e) => e.classes).expand((c) => c); + Iterable get allCssClasses sync* { + final nodes = querySelectorAll('*'); + final nodesLength = nodes.length; + for (var i = 0; i < nodesLength; i++) { + final classList = (nodes.item(i) as Element).classList; + final classListLength = classList.length; + for (var j = 0; j < classListLength; j++) { + yield classList.item(j)!; + } + } } } diff --git a/_tests/test/common/directives/ng_style_test.dart b/_tests/test/common/directives/ng_style_test.dart index 756dff719b..66995c8baf 100644 --- a/_tests/test/common/directives/ng_style_test.dart +++ b/_tests/test/common/directives/ng_style_test.dart @@ -1,6 +1,7 @@ import 'package:ngdart/angular.dart'; import 'package:ngtest/angular_test.dart'; import 'package:test/test.dart'; +import 'package:web/web.dart'; import 'ng_style_test.template.dart' as ng; @@ -11,7 +12,7 @@ void main() { test('should update styles specified in an map literal', () async { var testBed = NgTestBed(ng.createMapUpdateTestFactory()); var testFixture = await testBed.create(); - var content = testFixture.rootElement.querySelector('div')!; + var content = testFixture.rootElement.querySelector('div') as HTMLElement; await testFixture.update((MapUpdateTest component) { component.map = {'max-width': '40px'}; }); @@ -25,7 +26,7 @@ void main() { test('should remove styles when deleting a key in a map literal', () async { var testBed = NgTestBed(ng.createMapUpdateTestFactory()); var testFixture = await testBed.create(); - var content = testFixture.rootElement.querySelector('div')!; + var content = testFixture.rootElement.querySelector('div') as HTMLElement; await testFixture.update((MapUpdateTest component) { component.map = {'max-width': '40px'}; }); @@ -40,7 +41,7 @@ void main() { var testBed = NgTestBed( ng.createMapUpdateWithDefaultTestFactory()); var testFixture = await testBed.create(); - var content = testFixture.rootElement.querySelector('div')!; + var content = testFixture.rootElement.querySelector('div') as HTMLElement; await testFixture.update((MapUpdateWithDefaultTest component) { component.map = {'max-width': '40px'}; }); @@ -58,7 +59,7 @@ void main() { var testBed = NgTestBed( ng.createMapUpdateWithStyleExprTestFactory()); var testFixture = await testBed.create(); - var content = testFixture.rootElement.querySelector('div')!; + var content = testFixture.rootElement.querySelector('div') as HTMLElement; await testFixture.update((MapUpdateWithStyleExprTest component) { component.map = {'max-width': '40px'}; }); diff --git a/_tests/test/common/pipes/async_pipe_test.dart b/_tests/test/common/pipes/async_pipe_test.dart index e7b31e9d7e..72722c7729 100644 --- a/_tests/test/common/pipes/async_pipe_test.dart +++ b/_tests/test/common/pipes/async_pipe_test.dart @@ -175,5 +175,5 @@ class FakeChangeDetectorRef implements ChangeDetectorRef { } @override - dynamic noSuchMethod(_) => super.noSuchMethod(_); + dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); } diff --git a/_tests/test/compiler/expression_parser/analyzer_test.dart b/_tests/test/compiler/expression_parser/analyzer_test.dart index 0a26291b16..0e8c338936 100644 --- a/_tests/test/compiler/expression_parser/analyzer_test.dart +++ b/_tests/test/compiler/expression_parser/analyzer_test.dart @@ -6,7 +6,7 @@ import 'package:test/test.dart'; import 'unparser.dart'; const _isParseException = TypeMatcher(); -const _throwsParseException = Throws(_isParseException); +final _throwsParseException = throwsA(_isParseException); void main() { final parser = AnalyzerExpressionParser(); diff --git a/_tests/test/compiler_integration/invalid_late_fields_test.dart b/_tests/test/compiler_integration/invalid_late_fields_test.dart index 01ea076e08..064c534e32 100644 --- a/_tests/test/compiler_integration/invalid_late_fields_test.dart +++ b/_tests/test/compiler_integration/invalid_late_fields_test.dart @@ -24,9 +24,10 @@ void main() { test('should refuse to compile non-nullable single child query', () async { await compilesExpecting(""" - import 'dart:html'; import '$ngImport'; + import 'package:web/web.dart'; + @Component( selector: 'example-comp', template: '
', @@ -42,9 +43,10 @@ void main() { test('should refuse to compile late fields with a child query', () async { await compilesExpecting(""" - import 'dart:html'; import '$ngImport'; + import 'package:web/web.dart'; + @Component( selector: 'example-comp', template: '
', @@ -60,9 +62,10 @@ void main() { test('should refuse to compile late fields with a children query', () async { await compilesExpecting(""" - import 'dart:html'; import '$ngImport'; + import 'package:web/web.dart'; + @Component( selector: 'example-comp', template: '
', @@ -78,9 +81,10 @@ void main() { test('should compile non-nullable fields with a children query', () async { await compilesNormally(""" - import 'dart:html'; import '$ngImport'; + import 'package:web/web.dart'; + @Component( selector: 'example-comp', template: '
', diff --git a/_tests/test/core/application_ref_test.dart b/_tests/test/core/application_ref_test.dart index 13a68cd6b8..873cc5907b 100644 --- a/_tests/test/core/application_ref_test.dart +++ b/_tests/test/core/application_ref_test.dart @@ -1,11 +1,11 @@ import 'dart:async'; -import 'dart:html'; import 'package:ngdart/angular.dart'; import 'package:ngdart/src/core/application_ref.dart'; import 'package:ngdart/src/core/linker/app_view_utils.dart'; import 'package:ngdart/src/runtime/dom_events.dart'; import 'package:test/test.dart'; +import 'package:web/web.dart'; import 'application_ref_test.template.dart' as ng; @@ -55,11 +55,12 @@ void main() { group('bootstrap should', () { test('replace an existing element if in the DOM', () { - final existing = Element.tag('hello-component')..text = 'Loading...'; + final existing = document.createElement('hello-component') + ..textContent = 'Loading...'; document.body!.append(existing); final comp = appRef.bootstrap(ng.createHelloComponentFactory()); - expect(comp.location.text, 'Hello World'); + expect(comp.location.textContent, 'Hello World'); expect( document.body!.querySelector('hello-component'), same(comp.location), @@ -69,7 +70,7 @@ void main() { test('create a new element if missing from the DOM', () { final comp = appRef.bootstrap(ng.createHelloComponentFactory()); - expect(comp.location.text, 'Hello World'); + expect(comp.location.textContent, 'Hello World'); expect( document.body!.querySelector('hello-component'), same(comp.location), @@ -100,12 +101,12 @@ void main() { test('return an asynchronous null', () { final result = appRef.run(() async => null); - expect(result, isInstanceOf>()); + expect(result, isA>()); }); test('return an asynchronous nullable value', () { final result = appRef.run(() async => null); - expect(result, isInstanceOf>()); + expect(result, isA>()); }); test('never return (threw synchronously)', () { diff --git a/_tests/test/core/change_detection/detect_host_changes_test.dart b/_tests/test/core/change_detection/detect_host_changes_test.dart index 6d349e1c1a..31c8b49b32 100644 --- a/_tests/test/core/change_detection/detect_host_changes_test.dart +++ b/_tests/test/core/change_detection/detect_host_changes_test.dart @@ -1,8 +1,7 @@ -import 'dart:html'; - import 'package:ngdart/angular.dart'; import 'package:ngtest/angular_test.dart'; import 'package:test/test.dart'; +import 'package:web/web.dart'; import 'detect_host_changes_test.template.dart' as ng; @@ -19,8 +18,8 @@ void main() { var testBed = NgTestBed(ng.createTestContainerFactory()); var testRoot = await testBed.create(); var targetElement = testRoot.rootElement.querySelector('.mytarget')!; - expect(targetElement.firstChild!.text, 'ChildHello'); - expect(targetElement.attributes['data-xyz'], 'abc'); + expect(targetElement.firstChild!.textContent, 'ChildHello'); + expect(targetElement.getAttribute('data-xyz'), 'abc'); }); } @@ -58,5 +57,5 @@ class SomeDirective { void handleClick(Event e) {} @HostListener('keypress') - void handleKeyPress(KeyEvent e) {} + void handleKeyPress(KeyboardEvent e) {} } diff --git a/_tests/test/core/change_detection/differs/default_iterable_differ_test.dart b/_tests/test/core/change_detection/differs/default_iterable_differ_test.dart index abd3b213c6..e2427607bd 100644 --- a/_tests/test/core/change_detection/differs/default_iterable_differ_test.dart +++ b/_tests/test/core/change_detection/differs/default_iterable_differ_test.dart @@ -1,5 +1,3 @@ -library angular2.test.core.change_detection.differs.default_iterable_differ_test; - import 'dart:collection'; import 'package:ngdart/src/core/change_detection/differs/default_iterable_differ.dart'; diff --git a/_tests/test/core/change_detection/on_push_embedded_view_test.dart b/_tests/test/core/change_detection/on_push_embedded_view_test.dart index 48ec96ad90..189b6bf182 100644 --- a/_tests/test/core/change_detection/on_push_embedded_view_test.dart +++ b/_tests/test/core/change_detection/on_push_embedded_view_test.dart @@ -1,8 +1,7 @@ -import 'dart:html'; - import 'package:ngdart/angular.dart'; import 'package:ngtest/angular_test.dart'; import 'package:test/test.dart'; +import 'package:web/web.dart'; import 'on_push_embedded_view_test.template.dart' as ng; @@ -39,25 +38,27 @@ void main() { test('when embedded within the OnPush component of origin', () async { final component = fixture.assertOnlyInstance; - expect(component.templateProducer!.text, isEmpty); + expect(component.templateProducer!.textContent, isEmpty); await fixture.update((component) { component.templateText = 'Hello template!'; }); - expect(component.templateProducer!.text, contains('Hello template!')); + expect( + component.templateProducer!.textContent, contains('Hello template!')); await fixture.update((component) { component.templateText = 'Goodbye template!'; }); - expect(component.templateProducer!.text, contains('Goodbye template!')); + expect(component.templateProducer!.textContent, + contains('Goodbye template!')); }); test('when embedded within a separate OnPush component', () async { final component = fixture.assertOnlyInstance; - expect(component.templateConsumer!.text, isEmpty); + expect(component.templateConsumer!.textContent, isEmpty); await fixture.update((component) { component.templateText = 'Hello template!'; @@ -67,7 +68,7 @@ void main() { // views to be updated. Any templates that originated within its view that // are embedded in a foreign OnPush view don't receive these changes. expect( - component.templateConsumer!.text, + component.templateConsumer!.textContent, contains('Hello template!'), skip: 'b/130433627', ); @@ -79,13 +80,14 @@ void main() { // The above change that was previously expected is now observed in the // template embedded in a foreign view container with an OnPush parent. expect( - component.templateConsumer!.text, + component.templateConsumer!.textContent, contains('Hello template!'), reason: 'Unrelated change to view container parent triggers change ' 'detection of nested views which delivers an old change from the ' 'template parent to the embedded view.', ); - expect(component.templateConsumer!.text, contains('Hello consumer!')); + expect( + component.templateConsumer!.textContent, contains('Hello consumer!')); }); }); } diff --git a/_tests/test/core/directive_inheritance_test.dart b/_tests/test/core/directive_inheritance_test.dart index 696e9c61a6..a35164b4b5 100644 --- a/_tests/test/core/directive_inheritance_test.dart +++ b/_tests/test/core/directive_inheritance_test.dart @@ -1,9 +1,9 @@ import 'dart:async'; -import 'dart:html'; import 'package:ngdart/angular.dart'; import 'package:ngtest/angular_test.dart'; import 'package:test/test.dart'; +import 'package:web/web.dart'; import 'directive_inheritance_test.template.dart' as ng; @@ -38,7 +38,7 @@ void main() { ng.createTestDerivedComponentFactory()); final testFixture = await testBed.create(); final hostElement = testFixture.rootElement.querySelector('derived')!; - expect(hostElement.attributes, containsPair('title', 'inherited')); + expect(hostElement.getAttribute('title'), equals('inherited')); }); test('implementation should be overriden', () async { @@ -46,7 +46,7 @@ void main() { ng.createTestOverrideComponentFactory()); final testFixture = await testBed.create(); final hostElement = testFixture.rootElement.querySelector('override')!; - expect(hostElement.attributes, containsPair('title', 'overridden')); + expect(hostElement.getAttribute('title'), equals('overridden')); }); test('should allow multiple bindings to inherited property', () async { @@ -55,8 +55,8 @@ void main() { final testFixture = await testBed.create(); final hostElement = testFixture.rootElement.querySelector('annotated-derived')!; - expect(hostElement.attributes, containsPair('title', 'inherited')); - expect(hostElement.attributes, containsPair('id', 'inherited')); + expect(hostElement.getAttribute('title'), equals('inherited')); + expect(hostElement.getAttribute('id'), equals('inherited')); }); }); @@ -215,9 +215,9 @@ void main() { }); final element = testFixture.rootElement.querySelector('multiple-supertypes')!; - expect(element.attributes, containsPair('foo', '1')); - expect(element.attributes, containsPair('bar', '2')); - expect(element.attributes, containsPair('baz', '3')); + expect(element.getAttribute('foo'), equals('1')); + expect(element.getAttribute('bar'), equals('2')); + expect(element.getAttribute('baz'), equals('3')); }); test('from most derived binding', () async { @@ -229,8 +229,8 @@ void main() { ..value = '1' ..fooValue = '2'; }); - expect(testFixture.rootElement.attributes, containsPair('foo', '2')); - expect(testFixture.rootElement.attributes, containsPair('bar', '1')); + expect(testFixture.rootElement.getAttribute('foo'), equals('2')); + expect(testFixture.rootElement.getAttribute('bar'), equals('1')); }); }); diff --git a/_tests/test/core/directive_lifecycle_integration_test.dart b/_tests/test/core/directive_lifecycle_integration_test.dart index 2713940385..ff7b750ada 100644 --- a/_tests/test/core/directive_lifecycle_integration_test.dart +++ b/_tests/test/core/directive_lifecycle_integration_test.dart @@ -1,5 +1,3 @@ -library angular2.test.core.directive_lifecycle_integration_test; - import 'package:ngdart/angular.dart'; import 'package:ngtest/angular_test.dart'; import 'package:test/test.dart'; diff --git a/_tests/test/core/event_handler_test.dart b/_tests/test/core/event_handler_test.dart index d942fd34b9..6274001ea2 100644 --- a/_tests/test/core/event_handler_test.dart +++ b/_tests/test/core/event_handler_test.dart @@ -1,9 +1,9 @@ import 'dart:async'; -import 'dart:html'; import 'package:ngdart/angular.dart'; import 'package:ngtest/angular_test.dart'; import 'package:test/test.dart'; +import 'package:web/web.dart'; import 'event_handler_test.template.dart' as ng; @@ -55,7 +55,8 @@ void main() { ); final fixture = await testBed.create(); await fixture.update((_) { - fixture.rootElement.querySelector('button')!.click(); + (fixture.rootElement.querySelector('button') as HTMLButtonElement) + .click(); }); expect(fixture.assertOnlyInstance.captured, ['bar']); }); @@ -66,7 +67,8 @@ void main() { ); final fixture = await testBed.create(); await fixture.update((_) { - fixture.rootElement.querySelector('button')!.click(); + (fixture.rootElement.querySelector('button') as HTMLButtonElement) + .click(); }); expect(fixture.assertOnlyInstance.captured, ['bar']); }); @@ -77,7 +79,8 @@ void main() { ); final fixture = await testBed.create(); await fixture.update((_) { - fixture.rootElement.querySelector('button')!.click(); + (fixture.rootElement.querySelector('button') as HTMLButtonElement) + .click(); }); expect(fixture.assertOnlyInstance.captured, ['bar']); }); @@ -88,7 +91,8 @@ void main() { ); final fixture = await testBed.create(); await fixture.update((_) { - fixture.rootElement.querySelector('button')!.click(); + (fixture.rootElement.querySelector('button') as HTMLButtonElement) + .click(); }); expect(fixture.assertOnlyInstance.captured, ['bar']); }); @@ -99,7 +103,8 @@ void main() { ); final fixture = await testBed.create(); await fixture.update((_) { - fixture.rootElement.querySelector('button')!.click(); + (fixture.rootElement.querySelector('button') as HTMLButtonElement) + .click(); }); expect(fixture.assertOnlyInstance.captured, ['bar']); }); @@ -110,7 +115,8 @@ void main() { ); final fixture = await testBed.create(); await fixture.update((_) { - fixture.rootElement.querySelector('button')!.click(); + (fixture.rootElement.querySelector('button') as HTMLButtonElement) + .click(); }); expect(fixture.assertOnlyInstance.captured, ['bar']); }); @@ -123,7 +129,8 @@ void main() { final fixture = await testBed.create(); overrideTopLevelDoCapture = expectAsync0(() {}); await fixture.update((_) { - fixture.rootElement.querySelector('button')!.click(); + (fixture.rootElement.querySelector('button') as HTMLButtonElement) + .click(); }); }, skip: 'https://github.com/angulardart/angular/issues/1670'); @@ -134,7 +141,8 @@ void main() { final fixture = await testBed.create(); overrideTopLevelDoCapture = expectAsync0(() {}); await fixture.update((_) { - fixture.rootElement.querySelector('button')!.click(); + (fixture.rootElement.querySelector('button') as HTMLButtonElement) + .click(); }); }); @@ -145,7 +153,8 @@ void main() { final fixture = await testBed.create(); TestStaticMethods.overrideDoCapture = expectAsync0(() {}); await fixture.update((_) { - fixture.rootElement.querySelector('button')!.click(); + (fixture.rootElement.querySelector('button') as HTMLButtonElement) + .click(); }); }); @@ -156,7 +165,8 @@ void main() { final fixture = await testBed.create(); TestStaticMethodsDirect.overrideDoCapture = expectAsync0(() {}); await fixture.update((_) { - fixture.rootElement.querySelector('button')!.click(); + (fixture.rootElement.querySelector('button') as HTMLButtonElement) + .click(); }); }); @@ -167,7 +177,8 @@ void main() { final fixture = await testBed.create(); fixture.assertOnlyInstance.bar.overrideDoCapture = expectAsync0(() {}); await fixture.update((_) { - fixture.rootElement.querySelector('button')!.click(); + (fixture.rootElement.querySelector('button') as HTMLButtonElement) + .click(); }); }, skip: 'https://github.com/angulardart/angular/issues/1670'); @@ -178,7 +189,8 @@ void main() { final fixture = await testBed.create(); fixture.assertOnlyInstance.bar.overrideDoCapture = expectAsync0(() {}); await fixture.update((_) { - fixture.rootElement.querySelector('button')!.click(); + (fixture.rootElement.querySelector('button') as HTMLButtonElement) + .click(); }); }); @@ -188,7 +200,7 @@ void main() { ng.createComponentWithHostEventThatThrowsFactory()); final fixture = await testBed.create(); expect( - fixture.update((_) => fixture.rootElement.click()), + fixture.update((_) => (fixture.rootElement as HTMLElement).click()), throwsIntentional, ); }); @@ -206,19 +218,19 @@ void main() { ) class ClickHandler extends SuperClick { @ViewChild('noArg') - HtmlElement? noArgButton; + HTMLElement? noArgButton; @ViewChild('oneArg') - HtmlElement? oneArgButton; + HTMLElement? oneArgButton; @ViewChild('noArgTearoff') - HtmlElement? noArgTearoffButton; + HTMLElement? noArgTearoffButton; @ViewChild('oneArgTearoff') - HtmlElement? oneArgTearoffButton; + HTMLElement? oneArgTearoffButton; @ViewChild('superTearoff') - HtmlElement? superTearoffButton; + HTMLElement? superTearoffButton; void onClick() { _clicks.add(null); diff --git a/_tests/test/core/exports_test.dart b/_tests/test/core/exports_test.dart index 837a6df42d..5abedcefee 100644 --- a/_tests/test/core/exports_test.dart +++ b/_tests/test/core/exports_test.dart @@ -1,6 +1,7 @@ import 'package:ngdart/angular.dart'; import 'package:ngtest/angular_test.dart'; import 'package:test/test.dart'; +import 'package:web/web.dart'; import 'exports_statics.dart' as lib; import 'exports_statics.dart'; @@ -54,7 +55,7 @@ void main() { var testBed = NgTestBed( ng.createStaticEventHandlerTestFactory()); var fixture = await testBed.create(); - var div = fixture.rootElement.querySelector('div')!; + var div = fixture.rootElement.querySelector('div') as HTMLDivElement; clickHandled = false; await fixture.update((_) { div.click(); @@ -66,7 +67,7 @@ void main() { var testBed = NgTestBed( ng.createStaticEventHandlerTargetTestFactory()); var fixture = await testBed.create(); - var div = fixture.rootElement.querySelector('div')!; + var div = fixture.rootElement.querySelector('div') as HTMLDivElement; MyClass.clickHandled = false; await fixture.update((_) { div.click(); @@ -78,7 +79,7 @@ void main() { var testBed = NgTestBed( ng.createStaticEventHandlerArgTestFactory()); var fixture = await testBed.create(); - var div = fixture.rootElement.querySelector('div')!; + var div = fixture.rootElement.querySelector('div') as HTMLDivElement; late List listArg; await fixture.update((StaticEventHandlerArgTest component) { component.clickHandler = (list) { @@ -103,11 +104,11 @@ void main() { var testBed = NgTestBed( ng.createSelfReferHostBindingTestFactory()); var fixture = await testBed.create(); - expect(fixture.rootElement.title, 'hello'); + expect((fixture.rootElement as HTMLElement).title, 'hello'); await fixture.update((_) { SelfReferHostBindingTest.staticField = 'goodbye'; }); - expect(fixture.rootElement.title, 'goodbye'); + expect((fixture.rootElement as HTMLElement).title, 'goodbye'); }); group('can be prefixed', () { diff --git a/_tests/test/core/host_annotation_test.dart b/_tests/test/core/host_annotation_test.dart index 92b9142996..2c23dd0e98 100644 --- a/_tests/test/core/host_annotation_test.dart +++ b/_tests/test/core/host_annotation_test.dart @@ -1,8 +1,7 @@ -import 'dart:html'; - import 'package:ngdart/angular.dart'; import 'package:ngtest/angular_test.dart'; import 'package:test/test.dart'; +import 'package:web/web.dart'; import 'host_annotation_test.template.dart' as ng; @@ -10,11 +9,13 @@ void main() { tearDown(disposeAnyRunningTest); /// Returns the root [Element] created by initializing [component]. - Future rootElementOf( + Future rootElementOf( ComponentFactory component, ) { final testBed = NgTestBed(component); - return testBed.create().then((fixture) => fixture.rootElement); + return testBed + .create() + .then((fixture) => fixture.rootElement as HTMLElement); } group('@HostBinding', () { @@ -88,16 +89,16 @@ void main() { ); final fixture = await testBed.create(); final element = fixture.rootElement; - expect(element.attributes, isNot(contains('disabled'))); - expect(element.attributes, isNot(contains('aria-disabled'))); + expect(element.getAttribute('disabled'), isNull); + expect(element.getAttribute('aria-disabled'), isNull); await fixture.update((c) => c.disabledBackingValue = true); - expect(element.attributes, contains('disabled')); - expect(element.attributes, contains('aria-disabled')); + expect(element.getAttribute('disabled'), isNotNull); + expect(element.getAttribute('aria-disabled'), isNotNull); await fixture.update((c) => c.disabledBackingValue = false); - expect(element.attributes, isNot(contains('disabled'))); - expect(element.attributes, isNot(contains('aria-disabled'))); + expect(element.getAttribute('disabled'), isNull); + expect(element.getAttribute('aria-disabled'), isNull); }); test('should support conditional attributes on static members', () async { @@ -106,8 +107,8 @@ void main() { ); final fixture = await testBed.create(); final element = fixture.rootElement; - expect(element.attributes, contains('disabled')); - expect(element.attributes, contains('aria-disabled')); + expect(element.getAttribute('disabled'), isNotNull); + expect(element.getAttribute('aria-disabled'), isNotNull); }); test('should support conditional classes', () async { @@ -116,13 +117,13 @@ void main() { ); final fixture = await testBed.create(); final element = fixture.rootElement; - expect(element.classes, isNot(contains('fancy'))); + expect(element.classList.value, isNot(contains('fancy'))); await fixture.update((c) => c.fancy = true); - expect(element.classes, contains('fancy')); + expect(element.classList.value, contains('fancy')); await fixture.update((c) => c.fancy = false); - expect(element.classes, isNot(contains('fancy'))); + expect(element.classList.value, isNot(contains('fancy'))); }); test('should support multiple annotations on a single field', () async { @@ -139,7 +140,7 @@ void main() { NgTestBed(ng.createHostListenerClickFactory()); final fixture = await testBed.create(); fixture.assertOnlyInstance.clickHandler = expectAsync0(() {}); - await fixture.update((_) => fixture.rootElement.click()); + await fixture.update((_) => (fixture.rootElement as HTMLElement).click()); }); test('should support click through inheritance', () async { @@ -147,7 +148,7 @@ void main() { ng.createHostListenerInheritedClickFactory()); final fixture = await testBed.create(); fixture.assertOnlyInstance.clickHandler = expectAsync0(() {}); - await fixture.update((_) => fixture.rootElement.click()); + await fixture.update((_) => (fixture.rootElement as HTMLElement).click()); }); test('should support multiple annotations on a single field', () async { diff --git a/_tests/test/core/i18n_escape_test.dart b/_tests/test/core/i18n_escape_test.dart index 3896dfd2a2..14f82d25a9 100644 --- a/_tests/test/core/i18n_escape_test.dart +++ b/_tests/test/core/i18n_escape_test.dart @@ -1,8 +1,7 @@ -import 'dart:html'; - import 'package:ngdart/angular.dart'; import 'package:ngtest/angular_test.dart'; import 'package:test/test.dart'; +import 'package:web/web.dart'; import 'i18n_escape_test.template.dart' as ng; @@ -40,7 +39,7 @@ void main() { ng.createShouldEscapeI18nPropertyFactory()); final testFixture = await testBed.create(); final imgElement = - testFixture.rootElement.querySelector('img') as ImageElement; + testFixture.rootElement.querySelector('img') as HTMLImageElement; expect(imgElement.alt, matches(regExp)); }); diff --git a/_tests/test/core/i18n_test.dart b/_tests/test/core/i18n_test.dart index e3f54808c8..50f77b2ce9 100644 --- a/_tests/test/core/i18n_test.dart +++ b/_tests/test/core/i18n_test.dart @@ -1,8 +1,7 @@ -import 'dart:html'; - import 'package:ngdart/angular.dart'; import 'package:ngtest/angular_test.dart'; import 'package:test/test.dart'; +import 'package:web/web.dart'; import 'i18n_test.template.dart' as ng; @@ -20,7 +19,7 @@ void main() { NgTestBed(ng.createTestI18nAttributeFactory()); final testFixture = await testBed.create(); final imgElement = - testFixture.rootElement.querySelector('img') as ImageElement; + testFixture.rootElement.querySelector('img') as HTMLImageElement; expect(imgElement.alt, 'A puppy!'); }); @@ -32,7 +31,7 @@ void main() { final lineBreaks = testFixture.rootElement.querySelectorAll('br'); expect(lineBreaks, hasLength(1)); final strongElement = testFixture.rootElement.querySelector('strong')!; - expect(strongElement.text, 'emphasis!'); + expect(strongElement.textContent, 'emphasis!'); }); test('should render message with unsafe HTML', () async { @@ -57,7 +56,7 @@ void main() { final testFixture = await testBed.create(); expect(testFixture.text, 'Italic, not italic.'); final italicElement = testFixture.rootElement.querySelector('i')!; - expect(italicElement.text, 'Italic'); + expect(italicElement.textContent, 'Italic'); }); // This test ensures none of our Intl.message() parameters are invalid. diff --git a/_tests/test/core/linker/component_loader_test.dart b/_tests/test/core/linker/component_loader_test.dart index 44de40109d..915daf0957 100644 --- a/_tests/test/core/linker/component_loader_test.dart +++ b/_tests/test/core/linker/component_loader_test.dart @@ -48,7 +48,7 @@ void main() { ng.createDynamicCompFactory(), injector: logInjector(comp.context), ); - expect(ref.location.text, 'Dynamic'); + expect(ref.location.textContent, 'Dynamic'); }); }); @@ -149,7 +149,7 @@ void main() { ng.createDynamicOnPushCompFactory(), injector: logInjector(comp.context), ); - expect(ref.location.text, 'Dynamic'); + expect(ref.location.textContent, 'Dynamic'); }); }); diff --git a/_tests/test/core/linker/component_selector_test.dart b/_tests/test/core/linker/component_selector_test.dart index 766490f6fe..160142632e 100644 --- a/_tests/test/core/linker/component_selector_test.dart +++ b/_tests/test/core/linker/component_selector_test.dart @@ -21,72 +21,93 @@ void main() { final testBed = NgTestBed( ng.createExactAttributeSelectorTestComponentFactory()); final testFixture = await testBed.create(); - final select = testFixture.rootElement.querySelector; - expect(select('[foo]')!.text, isEmpty); - expect(select('[foo=bar]')!.text, 'Matched!'); - expect(select('[foo=barbaz]')!.text, isEmpty); + expect( + testFixture.rootElement.querySelector('[foo]')!.textContent, isEmpty); + expect(testFixture.rootElement.querySelector('[foo=bar]')!.textContent, + 'Matched!'); + expect(testFixture.rootElement.querySelector('[foo=barbaz]')!.textContent, + isEmpty); }); test('should support hypen attribute selector', () async { final testBed = NgTestBed( ng.createHyphenAttributeSelectorTestComponentFactory()); final testFixture = await testBed.create(); - final select = testFixture.rootElement.querySelector; - expect(select('[foo=bar]')!.text, 'Matched!'); - expect(select('[foo="bar-baz"]')!.text, 'Matched!'); - expect(select('[foo=barbaz]')!.text, isEmpty); + expect(testFixture.rootElement.querySelector('[foo=bar]')!.textContent, + 'Matched!'); + expect( + testFixture.rootElement.querySelector('[foo="bar-baz"]')!.textContent, + 'Matched!'); + expect(testFixture.rootElement.querySelector('[foo=barbaz]')!.textContent, + isEmpty); }); test('should support list attribute selector', () async { final testBed = NgTestBed( ng.createListAttributeSelectorTestComponentFactory()); final testFixture = await testBed.create(); - final select = testFixture.rootElement.querySelector; - expect(select('[foo=bar]')!.text, 'Matched!'); - expect(select('[foo="bar baz"]')!.text, 'Matched!'); - expect(select('[foo="baz bar qux"]')!.text, 'Matched!'); - expect(select('[foo=barbaz]')!.text, isEmpty); + expect(testFixture.rootElement.querySelector('[foo=bar]')!.textContent, + 'Matched!'); + expect( + testFixture.rootElement.querySelector('[foo="bar baz"]')!.textContent, + 'Matched!'); + expect( + testFixture.rootElement + .querySelector('[foo="baz bar qux"]')! + .textContent, + 'Matched!'); + expect(testFixture.rootElement.querySelector('[foo=barbaz]')!.textContent, + isEmpty); }); test('should support prefix attribute selector', () async { final testBed = NgTestBed( ng.createPrefixAttributeSelectorTestComponentFactory()); final testFixture = await testBed.create(); - final select = testFixture.rootElement.querySelector; - expect(select('[foo=bar]')!.text, 'Matched!'); - expect(select('[foo=barbaz]')!.text, 'Matched!'); - expect(select('[foo=bazbar]')!.text, isEmpty); + expect(testFixture.rootElement.querySelector('[foo=bar]')!.textContent, + 'Matched!'); + expect(testFixture.rootElement.querySelector('[foo=barbaz]')!.textContent, + 'Matched!'); + expect(testFixture.rootElement.querySelector('[foo=bazbar]')!.textContent, + isEmpty); }); test('should support set attribute selector', () async { final testBed = NgTestBed( ng.createSetAttributeSelectorTestComponentFactory()); final testFixture = await testBed.create(); - final select = testFixture.rootElement.querySelector; - expect(select('div')!.text, isEmpty); - expect(select('[foo]')!.text, 'Matched!'); - expect(select('[foo=""]')!.text, 'Matched!'); - expect(select('[foo="bar"]')!.text, 'Matched!'); + expect( + testFixture.rootElement.querySelector('div')!.textContent, isEmpty); + expect(testFixture.rootElement.querySelector('[foo]')!.textContent, + 'Matched!'); + expect(testFixture.rootElement.querySelector('[foo=""]')!.textContent, + 'Matched!'); + expect(testFixture.rootElement.querySelector('[foo="bar"]')!.textContent, + 'Matched!'); }); test('should support substring attribute selector', () async { final testBed = NgTestBed( ng.createSubstringAttributeSelectorTestComponentFactory()); final testFixture = await testBed.create(); - final select = testFixture.rootElement.querySelector; - expect(select('[foo=bar]')!.text, 'Matched!'); - expect(select('[foo=barbaz]')!.text, 'Matched!'); - expect(select('[foo=bazbar]')!.text, 'Matched!'); + expect(testFixture.rootElement.querySelector('[foo=bar]')!.textContent, + 'Matched!'); + expect(testFixture.rootElement.querySelector('[foo=barbaz]')!.textContent, + 'Matched!'); + expect(testFixture.rootElement.querySelector('[foo=bazbar]')!.textContent, + 'Matched!'); }); test('should support suffix attribute selector', () async { final testBed = NgTestBed( ng.createSuffixAttributeSelectorTestComponentFactory()); final testFixture = await testBed.create(); - final select = testFixture.rootElement.querySelector; - expect(select('[foo=bar]')!.text, 'Matched!'); - expect(select('[foo=barbaz]')!.text, isEmpty); - expect(select('[foo=bazbar]')!.text, 'Matched!'); + expect(testFixture.rootElement.querySelector('[foo=bar]')!.textContent, + 'Matched!'); + expect(testFixture.rootElement.querySelector('[foo=barbaz]')!.textContent, + isEmpty); + expect(testFixture.rootElement.querySelector('[foo=bazbar]')!.textContent, + 'Matched!'); }); }); } diff --git a/_tests/test/core/linker/implicit_static_test.dart b/_tests/test/core/linker/implicit_static_test.dart index 2c08723484..0f0f06a00a 100644 --- a/_tests/test/core/linker/implicit_static_test.dart +++ b/_tests/test/core/linker/implicit_static_test.dart @@ -1,8 +1,7 @@ -import 'dart:html'; - import 'package:ngdart/angular.dart'; import 'package:ngtest/angular_test.dart'; import 'package:test/test.dart'; +import 'package:web/web.dart'; import 'implicit_static_test.template.dart' as ng; @@ -114,7 +113,7 @@ class InvokeTearOff { @Input() set invoke(String Function() value) { - _host.text = value(); + _host.textContent = value(); } } diff --git a/_tests/test/core/linker/integration/binding_integration_test.dart b/_tests/test/core/linker/integration/binding_integration_test.dart index a882af18c4..469d7b0467 100644 --- a/_tests/test/core/linker/integration/binding_integration_test.dart +++ b/_tests/test/core/linker/integration/binding_integration_test.dart @@ -1,6 +1,9 @@ +import 'dart:js_interop'; + import 'package:ngdart/angular.dart'; import 'package:ngtest/angular_test.dart'; import 'package:test/test.dart'; +import 'package:web/web.dart'; import 'binding_integration_test.template.dart' as ng; @@ -40,9 +43,9 @@ void main() { ng.createBoundAriaAttributeComponentFactory()); final testFixture = await testBed.create(); final div = testFixture.rootElement.querySelector('div')!; - expect(div.attributes, containsPair('aria-label', 'Initial label')); + expect(div.getAttribute('aria-label'), equals('Initial label')); await testFixture.update((component) => component.label = 'New label'); - expect(div.attributes, containsPair('aria-label', 'New label')); + expect(div.getAttribute('aria-label'), equals('New label')); }); test('should remove attribute when bound expression is null', () async { @@ -50,16 +53,16 @@ void main() { ng.createBoundAttributeComponentFactory()); final testFixture = await testBed.create(); final div = testFixture.rootElement.querySelector('div')!; - expect(div.attributes, containsPair('foo', 'Initial value')); + expect(div.getAttribute('foo'), equals('Initial value')); await testFixture.update((component) => component.value = null); - expect(div.attributes, isNot(contains('foo'))); + expect(div.getAttribute('foo'), isNull); }); test('should remove style when bound expression is null', () async { final testBed = NgTestBed(ng.createBoundStyleComponentFactory()); final testFixture = await testBed.create(); - final div = testFixture.rootElement.querySelector('div')!; + final div = testFixture.rootElement.querySelector('div') as HTMLDivElement; expect(div.style.height, '10px'); await testFixture.update((component) => component.height = null); expect(div.style.height, ''); @@ -69,7 +72,7 @@ void main() { final testBed = NgTestBed( ng.createBoundMismatchedPropertyComponentFactory()); final testFixture = await testBed.create(); - final div = testFixture.rootElement.querySelector('div')!; + final div = testFixture.rootElement.querySelector('div') as HTMLDivElement; expect(div.tabIndex, 0); await testFixture.update((component) => component.index = 5); expect(div.tabIndex, 5); @@ -79,7 +82,7 @@ void main() { final testBed = NgTestBed( ng.createBoundCamelCasePropertyComponentFactory()); final testFixture = await testBed.create(); - final div = testFixture.rootElement.querySelector('div')!; + final div = testFixture.rootElement.querySelector('div') as HTMLDivElement; expect(div.tabIndex, 1); await testFixture.update((component) => component.index = 0); expect(div.tabIndex, 0); @@ -89,21 +92,21 @@ void main() { final testBed = NgTestBed( ng.createBoundInnerHtmlComponentFactory()); final testFixture = await testBed.create(); - final div = testFixture.rootElement.querySelector('div')!; - expect(div.innerHtml, 'Initial HTML'); + final div = testFixture.rootElement.querySelector('div') as HTMLDivElement; + expect((div.innerHTML as JSString).toDart, 'Initial HTML'); await testFixture .update((component) => component.html = 'New
HTML
'); - expect(div.innerHtml, 'New
HTML
'); + expect((div.innerHTML as JSString).toDart, 'New
HTML
'); }); test('should consume className binding using class alias', () async { final testBed = NgTestBed(ng.createBoundClassNameAliasFactory()); final testFixture = await testBed.create(); - final div = testFixture.rootElement.querySelector('div')!; - expect(div.classes, contains('foo')); - expect(div.classes, contains('bar')); - expect(div.classes, isNot(contains('initial'))); + final div = testFixture.rootElement.querySelector('div') as HTMLDivElement; + expect(div.classList.contains('foo'), isTrue); + expect(div.classList.contains('bar'), isTrue); + expect(div.classList.contains('initial'), isFalse); }); } diff --git a/_tests/test/core/linker/integration/directive_integration_test.dart b/_tests/test/core/linker/integration/directive_integration_test.dart index a34197f7f8..3b22f5264e 100644 --- a/_tests/test/core/linker/integration/directive_integration_test.dart +++ b/_tests/test/core/linker/integration/directive_integration_test.dart @@ -1,9 +1,9 @@ import 'dart:async'; -import 'dart:html'; import 'package:ngdart/angular.dart'; import 'package:ngtest/angular_test.dart'; import 'package:test/test.dart'; +import 'package:web/web.dart'; import 'directive_integration_test.template.dart' as ng; @@ -203,8 +203,8 @@ class UnboundDirectiveInputComponent {} selector: '[no-duplicate]', ) class DuplicateDir { - DuplicateDir(HtmlElement element) { - element.text = '${element.text}noduplicate'; + DuplicateDir(HTMLElement element) { + element.textContent = '${element.textContent}noduplicate'; } } diff --git a/_tests/test/core/linker/integration/misc_test.dart b/_tests/test/core/linker/integration/misc_test.dart index 14eb02b89b..299a552952 100644 --- a/_tests/test/core/linker/integration/misc_test.dart +++ b/_tests/test/core/linker/integration/misc_test.dart @@ -1,6 +1,7 @@ import 'package:ngdart/angular.dart'; import 'package:ngtest/angular_test.dart'; import 'package:test/test.dart'; +import 'package:web/web.dart'; import 'misc_test.template.dart' as ng; @@ -18,15 +19,15 @@ void main() { final testBed = NgTestBed( ng.createHostAttributeFromDirectiveComponentFactory()); final testFixture = await testBed.create(); - final div = testFixture.rootElement.children.first; - expect(div.attributes, containsPair('role', 'button')); + final div = testFixture.rootElement.children.item(0) as HTMLDivElement; + expect(div.getAttribute('role'), equals('button')); }); test('should support updating host element via host properties', () async { final testBed = NgTestBed( ng.createHostPropertyFromDirectiveComponentFactory()); final testFixture = await testBed.create(); - final div = testFixture.rootElement.children.first; + final div = testFixture.rootElement.children.item(0) as HTMLDivElement; expect(div.id, 'one'); await testFixture.update((component) => component.directive!.id = 'two'); expect(div.id, 'two'); @@ -149,9 +150,8 @@ class DynamicViewport { DynamicViewport(ViewContainerRef vc) { final myService = MyService()..greeting = 'dynamic greet'; final injector = Injector.map({MyService: myService}, vc.injector); - final factoryFuture = Future.value( - ng.createChildCompUsingServiceFactory(), - ); + final factoryFuture = + Future.value(ng.createChildCompUsingServiceFactory()); done = factoryFuture.then((componentFactory) => vc.createComponent(componentFactory, 0, injector)); } diff --git a/_tests/test/core/linker/integration/ng_container_test.dart b/_tests/test/core/linker/integration/ng_container_test.dart index 403a836a16..5b9193aa3b 100644 --- a/_tests/test/core/linker/integration/ng_container_test.dart +++ b/_tests/test/core/linker/integration/ng_container_test.dart @@ -1,3 +1,4 @@ +import 'package:_tests/matchers.dart'; import 'package:ngdart/angular.dart'; import 'package:ngtest/angular_test.dart'; import 'package:test/test.dart'; @@ -18,25 +19,25 @@ void main() { final testBed = NgTestBed(ng.createRendersChildrenFactory()); final testFixture = await testBed.create(); - expect(testFixture.rootElement.innerHtml, html); + expect(testFixture.rootElement, hasInnerHtml(html)); }); test('supports *ngFor', () async { final testBed = NgTestBed(ng.createSupportsNgForFactory()); final testFixture = await testBed.create(); - expect(testFixture.rootElement.innerHtml, anchorHtml); + expect(testFixture.rootElement, hasInnerHtml(anchorHtml)); final values = ['a', 'b', 'c']; final html = values.join(); await testFixture.update((component) => component.values.addAll(values)); - expect(testFixture.rootElement.innerHtml, '$anchorHtml$html'); + expect(testFixture.rootElement, hasInnerHtml('$anchorHtml$html')); }); test('supports *ngIf', () async { final testBed = NgTestBed(ng.createSupportsNgIfFactory()); final testFixture = await testBed.create(); - expect(testFixture.rootElement.innerHtml, anchorHtml); + expect(testFixture.rootElement, hasInnerHtml(anchorHtml)); await testFixture.update((component) => component.visible = true); - expect(testFixture.rootElement.innerHtml, '$anchorHtml$html'); + expect(testFixture.rootElement, hasInnerHtml('$anchorHtml$html')); }); test('supports *ngTemplateOutlet', () async { @@ -44,54 +45,59 @@ void main() { ng.createSupportsNgTemplateOutletFactory()); final testFixture = await testBed.create(); expect( - testFixture.rootElement.innerHtml, - '$anchorHtml ' //