From 353a8fc5b1ef37317d1d12c53a14d3eda6afd80e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20A=C4=9Facan?= Date: Thu, 24 Jul 2025 15:53:31 +0100 Subject: [PATCH 01/11] CI: Also run tests on Chrome, with dart2js and dart2wasm --- .github/workflows/dart.yml | 92 +++++++++++++++++++++++++++++++------ protobuf/mono_pkg.yaml | 5 +- protoc_plugin/mono_pkg.yaml | 2 + tool/ci.sh | 10 +++- 4 files changed, 93 insertions(+), 16 deletions(-) diff --git a/.github/workflows/dart.yml b/.github/workflows/dart.yml index b6fe5a8ab..3183973a9 100644 --- a/.github/workflows/dart.yml +++ b/.github/workflows/dart.yml @@ -190,14 +190,14 @@ jobs: if: "always() && steps.protoc_plugin_pub_upgrade.conclusion == 'success'" working-directory: protoc_plugin job_006: - name: "run_tests; linux; Dart 3.7.0; PKG: protobuf; `dart test`" + name: "run_tests; linux; Dart 3.7.0; PKG: protobuf; `dart test`, `dart test -p chrome`, `dart test -p chrome -c dart2wasm`" runs-on: ubuntu-latest steps: - name: Cache Pub hosted dependencies uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 with: path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:3.7.0;packages:protobuf;commands:test" + key: "os:ubuntu-latest;pub-cache-hosted;sdk:3.7.0;packages:protobuf;commands:test_0-test_1-test_2" restore-keys: | os:ubuntu-latest;pub-cache-hosted;sdk:3.7.0;packages:protobuf os:ubuntu-latest;pub-cache-hosted;sdk:3.7.0 @@ -219,6 +219,14 @@ jobs: run: dart test if: "always() && steps.protobuf_pub_upgrade.conclusion == 'success'" working-directory: protobuf + - name: "protobuf; dart test -p chrome" + run: dart test -p chrome + if: "always() && steps.protobuf_pub_upgrade.conclusion == 'success'" + working-directory: protobuf + - name: "protobuf; dart test -p chrome -c dart2wasm" + run: dart test -p chrome -c dart2wasm + if: "always() && steps.protobuf_pub_upgrade.conclusion == 'success'" + working-directory: protobuf needs: - job_001 - job_002 @@ -226,14 +234,14 @@ jobs: - job_004 - job_005 job_007: - name: "run_tests; linux; Dart 3.7.0; PKG: protoc_plugin; `./../tool/setup.sh`, `make protos`, `dart test`" + name: "run_tests; linux; Dart 3.7.0; PKG: protoc_plugin; `./../tool/setup.sh`, `make protos`, `dart test`, `dart test -p chrome`, `dart test -p chrome -c dart2wasm`" runs-on: ubuntu-latest steps: - name: Cache Pub hosted dependencies uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 with: path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:3.7.0;packages:protoc_plugin;commands:command_0-command_2-test" + key: "os:ubuntu-latest;pub-cache-hosted;sdk:3.7.0;packages:protoc_plugin;commands:command_0-command_2-test_0-test_1-test_2" restore-keys: | os:ubuntu-latest;pub-cache-hosted;sdk:3.7.0;packages:protoc_plugin os:ubuntu-latest;pub-cache-hosted;sdk:3.7.0 @@ -263,6 +271,14 @@ jobs: run: dart test if: "always() && steps.protoc_plugin_pub_upgrade.conclusion == 'success'" working-directory: protoc_plugin + - name: "protoc_plugin; dart test -p chrome" + run: dart test -p chrome + if: "always() && steps.protoc_plugin_pub_upgrade.conclusion == 'success'" + working-directory: protoc_plugin + - name: "protoc_plugin; dart test -p chrome -c dart2wasm" + run: dart test -p chrome -c dart2wasm + if: "always() && steps.protoc_plugin_pub_upgrade.conclusion == 'success'" + working-directory: protoc_plugin needs: - job_001 - job_002 @@ -270,14 +286,14 @@ jobs: - job_004 - job_005 job_008: - name: "run_tests; linux; Dart dev; PKG: protobuf; `dart test`" + name: "run_tests; linux; Dart dev; PKG: protobuf; `dart test`, `dart test -p chrome`, `dart test -p chrome -c dart2wasm`" runs-on: ubuntu-latest steps: - name: Cache Pub hosted dependencies uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 with: path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:protobuf;commands:test" + key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:protobuf;commands:test_0-test_1-test_2" restore-keys: | os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:protobuf os:ubuntu-latest;pub-cache-hosted;sdk:dev @@ -299,6 +315,14 @@ jobs: run: dart test if: "always() && steps.protobuf_pub_upgrade.conclusion == 'success'" working-directory: protobuf + - name: "protobuf; dart test -p chrome" + run: dart test -p chrome + if: "always() && steps.protobuf_pub_upgrade.conclusion == 'success'" + working-directory: protobuf + - name: "protobuf; dart test -p chrome -c dart2wasm" + run: dart test -p chrome -c dart2wasm + if: "always() && steps.protobuf_pub_upgrade.conclusion == 'success'" + working-directory: protobuf needs: - job_001 - job_002 @@ -306,14 +330,14 @@ jobs: - job_004 - job_005 job_009: - name: "run_tests; linux; Dart dev; PKG: protoc_plugin; `./../tool/setup.sh`, `make protos`, `dart test`" + name: "run_tests; linux; Dart dev; PKG: protoc_plugin; `./../tool/setup.sh`, `make protos`, `dart test`, `dart test -p chrome`, `dart test -p chrome -c dart2wasm`" runs-on: ubuntu-latest steps: - name: Cache Pub hosted dependencies uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 with: path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:protoc_plugin;commands:command_0-command_2-test" + key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:protoc_plugin;commands:command_0-command_2-test_0-test_1-test_2" restore-keys: | os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:protoc_plugin os:ubuntu-latest;pub-cache-hosted;sdk:dev @@ -343,6 +367,14 @@ jobs: run: dart test if: "always() && steps.protoc_plugin_pub_upgrade.conclusion == 'success'" working-directory: protoc_plugin + - name: "protoc_plugin; dart test -p chrome" + run: dart test -p chrome + if: "always() && steps.protoc_plugin_pub_upgrade.conclusion == 'success'" + working-directory: protoc_plugin + - name: "protoc_plugin; dart test -p chrome -c dart2wasm" + run: dart test -p chrome -c dart2wasm + if: "always() && steps.protoc_plugin_pub_upgrade.conclusion == 'success'" + working-directory: protoc_plugin needs: - job_001 - job_002 @@ -350,14 +382,14 @@ jobs: - job_004 - job_005 job_010: - name: "run_tests; osx; Dart 3.7.0; PKG: protobuf; `dart test`" + name: "run_tests; osx; Dart 3.7.0; PKG: protobuf; `dart test`, `dart test -p chrome`, `dart test -p chrome -c dart2wasm`" runs-on: macos-latest steps: - name: Cache Pub hosted dependencies uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 with: path: "~/.pub-cache/hosted" - key: "os:macos-latest;pub-cache-hosted;sdk:3.7.0;packages:protobuf;commands:test" + key: "os:macos-latest;pub-cache-hosted;sdk:3.7.0;packages:protobuf;commands:test_0-test_1-test_2" restore-keys: | os:macos-latest;pub-cache-hosted;sdk:3.7.0;packages:protobuf os:macos-latest;pub-cache-hosted;sdk:3.7.0 @@ -379,6 +411,14 @@ jobs: run: dart test if: "always() && steps.protobuf_pub_upgrade.conclusion == 'success'" working-directory: protobuf + - name: "protobuf; dart test -p chrome" + run: dart test -p chrome + if: "always() && steps.protobuf_pub_upgrade.conclusion == 'success'" + working-directory: protobuf + - name: "protobuf; dart test -p chrome -c dart2wasm" + run: dart test -p chrome -c dart2wasm + if: "always() && steps.protobuf_pub_upgrade.conclusion == 'success'" + working-directory: protobuf needs: - job_001 - job_002 @@ -386,14 +426,14 @@ jobs: - job_004 - job_005 job_011: - name: "run_tests; osx; Dart dev; PKG: protobuf; `dart test`" + name: "run_tests; osx; Dart dev; PKG: protobuf; `dart test`, `dart test -p chrome`, `dart test -p chrome -c dart2wasm`" runs-on: macos-latest steps: - name: Cache Pub hosted dependencies uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 with: path: "~/.pub-cache/hosted" - key: "os:macos-latest;pub-cache-hosted;sdk:dev;packages:protobuf;commands:test" + key: "os:macos-latest;pub-cache-hosted;sdk:dev;packages:protobuf;commands:test_0-test_1-test_2" restore-keys: | os:macos-latest;pub-cache-hosted;sdk:dev;packages:protobuf os:macos-latest;pub-cache-hosted;sdk:dev @@ -415,6 +455,14 @@ jobs: run: dart test if: "always() && steps.protobuf_pub_upgrade.conclusion == 'success'" working-directory: protobuf + - name: "protobuf; dart test -p chrome" + run: dart test -p chrome + if: "always() && steps.protobuf_pub_upgrade.conclusion == 'success'" + working-directory: protobuf + - name: "protobuf; dart test -p chrome -c dart2wasm" + run: dart test -p chrome -c dart2wasm + if: "always() && steps.protobuf_pub_upgrade.conclusion == 'success'" + working-directory: protobuf needs: - job_001 - job_002 @@ -422,7 +470,7 @@ jobs: - job_004 - job_005 job_012: - name: "run_tests; windows; Dart 3.7.0; PKG: protobuf; `dart test`" + name: "run_tests; windows; Dart 3.7.0; PKG: protobuf; `dart test`, `dart test -p chrome`, `dart test -p chrome -c dart2wasm`" runs-on: windows-latest steps: - name: Setup Dart SDK @@ -441,6 +489,14 @@ jobs: run: dart test if: "always() && steps.protobuf_pub_upgrade.conclusion == 'success'" working-directory: protobuf + - name: "protobuf; dart test -p chrome" + run: dart test -p chrome + if: "always() && steps.protobuf_pub_upgrade.conclusion == 'success'" + working-directory: protobuf + - name: "protobuf; dart test -p chrome -c dart2wasm" + run: dart test -p chrome -c dart2wasm + if: "always() && steps.protobuf_pub_upgrade.conclusion == 'success'" + working-directory: protobuf needs: - job_001 - job_002 @@ -448,7 +504,7 @@ jobs: - job_004 - job_005 job_013: - name: "run_tests; windows; Dart dev; PKG: protobuf; `dart test`" + name: "run_tests; windows; Dart dev; PKG: protobuf; `dart test`, `dart test -p chrome`, `dart test -p chrome -c dart2wasm`" runs-on: windows-latest steps: - name: Setup Dart SDK @@ -467,6 +523,14 @@ jobs: run: dart test if: "always() && steps.protobuf_pub_upgrade.conclusion == 'success'" working-directory: protobuf + - name: "protobuf; dart test -p chrome" + run: dart test -p chrome + if: "always() && steps.protobuf_pub_upgrade.conclusion == 'success'" + working-directory: protobuf + - name: "protobuf; dart test -p chrome -c dart2wasm" + run: dart test -p chrome -c dart2wasm + if: "always() && steps.protobuf_pub_upgrade.conclusion == 'success'" + working-directory: protobuf needs: - job_001 - job_002 diff --git a/protobuf/mono_pkg.yaml b/protobuf/mono_pkg.yaml index 4d9ca7b6c..9633ef341 100644 --- a/protobuf/mono_pkg.yaml +++ b/protobuf/mono_pkg.yaml @@ -11,6 +11,9 @@ stages: - analyze: test sdk: [pubspec] - run_tests: - - group: [test] + - group: + - test + - test: -p chrome + - test: -p chrome -c dart2wasm sdk: [pubspec, dev] os: [linux, osx, windows] diff --git a/protoc_plugin/mono_pkg.yaml b/protoc_plugin/mono_pkg.yaml index 01f1e8980..b4872f79e 100644 --- a/protoc_plugin/mono_pkg.yaml +++ b/protoc_plugin/mono_pkg.yaml @@ -12,4 +12,6 @@ stages: - command: ./../tool/setup.sh - command: make protos - test + - test: -p chrome + - test: -p chrome -c dart2wasm sdk: [pubspec, dev] diff --git a/tool/ci.sh b/tool/ci.sh index 1b123cce0..735bde163 100755 --- a/tool/ci.sh +++ b/tool/ci.sh @@ -95,10 +95,18 @@ for PKG in ${PKGS}; do echo 'dart format --output=none --set-exit-if-changed lib' dart format --output=none --set-exit-if-changed lib || EXIT_CODE=$? ;; - test) + test_0) echo 'dart test' dart test || EXIT_CODE=$? ;; + test_1) + echo 'dart test -p chrome' + dart test -p chrome || EXIT_CODE=$? + ;; + test_2) + echo 'dart test -p chrome -c dart2wasm' + dart test -p chrome -c dart2wasm || EXIT_CODE=$? + ;; *) echo -e "\033[31mUnknown TASK '${TASK}' - TERMINATING JOB\033[0m" exit 64 From 2baa98d23ee1cf255d9daa2fc472946edbd83e71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20A=C4=9Facan?= Date: Fri, 25 Jul 2025 11:58:48 +0100 Subject: [PATCH 02/11] Only test protobuf in the browser --- .github/workflows/dart.yml | 24 ++++-------------------- protoc_plugin/mono_pkg.yaml | 2 -- 2 files changed, 4 insertions(+), 22 deletions(-) diff --git a/.github/workflows/dart.yml b/.github/workflows/dart.yml index 3183973a9..f07241538 100644 --- a/.github/workflows/dart.yml +++ b/.github/workflows/dart.yml @@ -234,14 +234,14 @@ jobs: - job_004 - job_005 job_007: - name: "run_tests; linux; Dart 3.7.0; PKG: protoc_plugin; `./../tool/setup.sh`, `make protos`, `dart test`, `dart test -p chrome`, `dart test -p chrome -c dart2wasm`" + name: "run_tests; linux; Dart 3.7.0; PKG: protoc_plugin; `./../tool/setup.sh`, `make protos`, `dart test`" runs-on: ubuntu-latest steps: - name: Cache Pub hosted dependencies uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 with: path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:3.7.0;packages:protoc_plugin;commands:command_0-command_2-test_0-test_1-test_2" + key: "os:ubuntu-latest;pub-cache-hosted;sdk:3.7.0;packages:protoc_plugin;commands:command_0-command_2-test_0" restore-keys: | os:ubuntu-latest;pub-cache-hosted;sdk:3.7.0;packages:protoc_plugin os:ubuntu-latest;pub-cache-hosted;sdk:3.7.0 @@ -271,14 +271,6 @@ jobs: run: dart test if: "always() && steps.protoc_plugin_pub_upgrade.conclusion == 'success'" working-directory: protoc_plugin - - name: "protoc_plugin; dart test -p chrome" - run: dart test -p chrome - if: "always() && steps.protoc_plugin_pub_upgrade.conclusion == 'success'" - working-directory: protoc_plugin - - name: "protoc_plugin; dart test -p chrome -c dart2wasm" - run: dart test -p chrome -c dart2wasm - if: "always() && steps.protoc_plugin_pub_upgrade.conclusion == 'success'" - working-directory: protoc_plugin needs: - job_001 - job_002 @@ -330,14 +322,14 @@ jobs: - job_004 - job_005 job_009: - name: "run_tests; linux; Dart dev; PKG: protoc_plugin; `./../tool/setup.sh`, `make protos`, `dart test`, `dart test -p chrome`, `dart test -p chrome -c dart2wasm`" + name: "run_tests; linux; Dart dev; PKG: protoc_plugin; `./../tool/setup.sh`, `make protos`, `dart test`" runs-on: ubuntu-latest steps: - name: Cache Pub hosted dependencies uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 with: path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:protoc_plugin;commands:command_0-command_2-test_0-test_1-test_2" + key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:protoc_plugin;commands:command_0-command_2-test_0" restore-keys: | os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:protoc_plugin os:ubuntu-latest;pub-cache-hosted;sdk:dev @@ -367,14 +359,6 @@ jobs: run: dart test if: "always() && steps.protoc_plugin_pub_upgrade.conclusion == 'success'" working-directory: protoc_plugin - - name: "protoc_plugin; dart test -p chrome" - run: dart test -p chrome - if: "always() && steps.protoc_plugin_pub_upgrade.conclusion == 'success'" - working-directory: protoc_plugin - - name: "protoc_plugin; dart test -p chrome -c dart2wasm" - run: dart test -p chrome -c dart2wasm - if: "always() && steps.protoc_plugin_pub_upgrade.conclusion == 'success'" - working-directory: protoc_plugin needs: - job_001 - job_002 diff --git a/protoc_plugin/mono_pkg.yaml b/protoc_plugin/mono_pkg.yaml index b4872f79e..01f1e8980 100644 --- a/protoc_plugin/mono_pkg.yaml +++ b/protoc_plugin/mono_pkg.yaml @@ -12,6 +12,4 @@ stages: - command: ./../tool/setup.sh - command: make protos - test - - test: -p chrome - - test: -p chrome -c dart2wasm sdk: [pubspec, dev] From 6a71828724f408cbbf1b3ddce7f1c15f5296f86a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20A=C4=9Facan?= Date: Fri, 25 Jul 2025 12:12:12 +0100 Subject: [PATCH 03/11] Revert "Only test protobuf in the browser" This reverts commit 2baa98d23ee1cf255d9daa2fc472946edbd83e71. --- .github/workflows/dart.yml | 24 ++++++++++++++++++++---- protoc_plugin/mono_pkg.yaml | 2 ++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/.github/workflows/dart.yml b/.github/workflows/dart.yml index f07241538..3183973a9 100644 --- a/.github/workflows/dart.yml +++ b/.github/workflows/dart.yml @@ -234,14 +234,14 @@ jobs: - job_004 - job_005 job_007: - name: "run_tests; linux; Dart 3.7.0; PKG: protoc_plugin; `./../tool/setup.sh`, `make protos`, `dart test`" + name: "run_tests; linux; Dart 3.7.0; PKG: protoc_plugin; `./../tool/setup.sh`, `make protos`, `dart test`, `dart test -p chrome`, `dart test -p chrome -c dart2wasm`" runs-on: ubuntu-latest steps: - name: Cache Pub hosted dependencies uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 with: path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:3.7.0;packages:protoc_plugin;commands:command_0-command_2-test_0" + key: "os:ubuntu-latest;pub-cache-hosted;sdk:3.7.0;packages:protoc_plugin;commands:command_0-command_2-test_0-test_1-test_2" restore-keys: | os:ubuntu-latest;pub-cache-hosted;sdk:3.7.0;packages:protoc_plugin os:ubuntu-latest;pub-cache-hosted;sdk:3.7.0 @@ -271,6 +271,14 @@ jobs: run: dart test if: "always() && steps.protoc_plugin_pub_upgrade.conclusion == 'success'" working-directory: protoc_plugin + - name: "protoc_plugin; dart test -p chrome" + run: dart test -p chrome + if: "always() && steps.protoc_plugin_pub_upgrade.conclusion == 'success'" + working-directory: protoc_plugin + - name: "protoc_plugin; dart test -p chrome -c dart2wasm" + run: dart test -p chrome -c dart2wasm + if: "always() && steps.protoc_plugin_pub_upgrade.conclusion == 'success'" + working-directory: protoc_plugin needs: - job_001 - job_002 @@ -322,14 +330,14 @@ jobs: - job_004 - job_005 job_009: - name: "run_tests; linux; Dart dev; PKG: protoc_plugin; `./../tool/setup.sh`, `make protos`, `dart test`" + name: "run_tests; linux; Dart dev; PKG: protoc_plugin; `./../tool/setup.sh`, `make protos`, `dart test`, `dart test -p chrome`, `dart test -p chrome -c dart2wasm`" runs-on: ubuntu-latest steps: - name: Cache Pub hosted dependencies uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 with: path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:protoc_plugin;commands:command_0-command_2-test_0" + key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:protoc_plugin;commands:command_0-command_2-test_0-test_1-test_2" restore-keys: | os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:protoc_plugin os:ubuntu-latest;pub-cache-hosted;sdk:dev @@ -359,6 +367,14 @@ jobs: run: dart test if: "always() && steps.protoc_plugin_pub_upgrade.conclusion == 'success'" working-directory: protoc_plugin + - name: "protoc_plugin; dart test -p chrome" + run: dart test -p chrome + if: "always() && steps.protoc_plugin_pub_upgrade.conclusion == 'success'" + working-directory: protoc_plugin + - name: "protoc_plugin; dart test -p chrome -c dart2wasm" + run: dart test -p chrome -c dart2wasm + if: "always() && steps.protoc_plugin_pub_upgrade.conclusion == 'success'" + working-directory: protoc_plugin needs: - job_001 - job_002 diff --git a/protoc_plugin/mono_pkg.yaml b/protoc_plugin/mono_pkg.yaml index 01f1e8980..b4872f79e 100644 --- a/protoc_plugin/mono_pkg.yaml +++ b/protoc_plugin/mono_pkg.yaml @@ -12,4 +12,6 @@ stages: - command: ./../tool/setup.sh - command: make protos - test + - test: -p chrome + - test: -p chrome -c dart2wasm sdk: [pubspec, dev] From 9dfa6556103e051dc4e805b67d231152c53356e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20A=C4=9Facan?= Date: Fri, 25 Jul 2025 13:01:34 +0100 Subject: [PATCH 04/11] Skip some tests in browsers --- protoc_plugin/test/client_generator_test.dart | 5 +++++ protoc_plugin/test/deprecations_test.dart | 5 +++++ protoc_plugin/test/doc_comments_test.dart | 5 +++++ protoc_plugin/test/enum_generator_test.dart | 5 +++++ protoc_plugin/test/extension_generator_test.dart | 5 +++++ protoc_plugin/test/file_generator_test.dart | 5 +++++ protoc_plugin/test/message_generator_test.dart | 5 +++++ protoc_plugin/test/reserved_names_test.dart | 3 +++ protoc_plugin/test/service_generator_test.dart | 5 +++++ protoc_plugin/test/src/test_util.dart | 2 ++ 10 files changed, 45 insertions(+) diff --git a/protoc_plugin/test/client_generator_test.dart b/protoc_plugin/test/client_generator_test.dart index f1fb0b874..59fab0861 100644 --- a/protoc_plugin/test/client_generator_test.dart +++ b/protoc_plugin/test/client_generator_test.dart @@ -10,8 +10,13 @@ import 'package:test/test.dart'; import 'src/golden_file.dart'; import 'src/service_util.dart'; +import 'src/test_util.dart'; void main() { + if (kIsWeb) { + return; + } + test('testClientGenerator', () { final options = GenerationOptions(); final fd = buildFileDescriptor('testpkg', 'testpkg.proto', [ diff --git a/protoc_plugin/test/deprecations_test.dart b/protoc_plugin/test/deprecations_test.dart index 42a0b2ce5..47ceb6068 100644 --- a/protoc_plugin/test/deprecations_test.dart +++ b/protoc_plugin/test/deprecations_test.dart @@ -7,8 +7,13 @@ import 'dart:io'; import 'package:test/test.dart'; import 'src/golden_file.dart'; +import 'src/test_util.dart'; void main() { + if (kIsWeb) { + return; + } + test('Deprecated annotation generation for messages', () { final actual = File('test/gen/deprecations.pb.dart').readAsStringSync(); expectGolden(actual, 'deprecations.pb.dart'); diff --git a/protoc_plugin/test/doc_comments_test.dart b/protoc_plugin/test/doc_comments_test.dart index ccd2edf74..d9f13d1df 100644 --- a/protoc_plugin/test/doc_comments_test.dart +++ b/protoc_plugin/test/doc_comments_test.dart @@ -7,8 +7,13 @@ import 'dart:io'; import 'package:test/test.dart'; import 'src/golden_file.dart'; +import 'src/test_util.dart'; void main() { + if (kIsWeb) { + return; + } + test('Doc comment generation for messages', () { final actual = File('test/gen/doc_comments.pb.dart').readAsStringSync(); expectGolden(actual, 'doc_comments.pb.dart'); diff --git a/protoc_plugin/test/enum_generator_test.dart b/protoc_plugin/test/enum_generator_test.dart index a60ad71fa..383d8ef1a 100644 --- a/protoc_plugin/test/enum_generator_test.dart +++ b/protoc_plugin/test/enum_generator_test.dart @@ -9,8 +9,13 @@ import 'package:protoc_plugin/src/options.dart'; import 'package:test/test.dart'; import 'src/golden_file.dart'; +import 'src/test_util.dart'; void main() { + if (kIsWeb) { + return; + } + test('testEnumGenerator', () { final ed = EnumDescriptorProto() diff --git a/protoc_plugin/test/extension_generator_test.dart b/protoc_plugin/test/extension_generator_test.dart index e09e9f7d3..e071b7ae0 100644 --- a/protoc_plugin/test/extension_generator_test.dart +++ b/protoc_plugin/test/extension_generator_test.dart @@ -12,8 +12,13 @@ import 'package:protoc_plugin/src/options.dart'; import 'package:test/test.dart'; import 'src/golden_file.dart'; +import 'src/test_util.dart'; void main() { + if (kIsWeb) { + return; + } + test('testExtensionGenerator', () { final extensionFieldDescriptor = pb.FieldDescriptorProto() diff --git a/protoc_plugin/test/file_generator_test.dart b/protoc_plugin/test/file_generator_test.dart index d561053d8..e7e415c9e 100644 --- a/protoc_plugin/test/file_generator_test.dart +++ b/protoc_plugin/test/file_generator_test.dart @@ -12,6 +12,7 @@ import 'package:protoc_plugin/src/options.dart'; import 'package:test/test.dart'; import 'src/golden_file.dart'; +import 'src/test_util.dart'; FileDescriptorProto buildFileDescriptor({ bool phoneNumber = true, @@ -99,6 +100,10 @@ FileDescriptorProto createInt64Proto() { } void main() { + if (kIsWeb) { + return; + } + test( 'FileGenerator outputs a .pb.dart file for a proto with one message', () { diff --git a/protoc_plugin/test/message_generator_test.dart b/protoc_plugin/test/message_generator_test.dart index 6d6e0700d..4762df6c2 100644 --- a/protoc_plugin/test/message_generator_test.dart +++ b/protoc_plugin/test/message_generator_test.dart @@ -14,6 +14,7 @@ import 'package:protoc_plugin/src/options.dart'; import 'package:test/test.dart'; import 'src/golden_file.dart'; +import 'src/test_util.dart'; void main() { late FileDescriptorProto fd; @@ -77,6 +78,10 @@ void main() { }); test('testMessageGenerator', () { + if (kIsWeb) { + return; + } + final options = parseGenerationOptions( CodeGeneratorRequest()..parameter = 'disable_constructor_args', diff --git a/protoc_plugin/test/reserved_names_test.dart b/protoc_plugin/test/reserved_names_test.dart index 56376c3f7..26f002c98 100644 --- a/protoc_plugin/test/reserved_names_test.dart +++ b/protoc_plugin/test/reserved_names_test.dart @@ -2,6 +2,9 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. +@TestOn('vm') +library; + import 'dart:collection' show MapMixin; import 'dart:mirrors'; diff --git a/protoc_plugin/test/service_generator_test.dart b/protoc_plugin/test/service_generator_test.dart index 98dfcb451..8169fdf59 100644 --- a/protoc_plugin/test/service_generator_test.dart +++ b/protoc_plugin/test/service_generator_test.dart @@ -10,8 +10,13 @@ import 'package:test/test.dart'; import 'src/golden_file.dart'; import 'src/service_util.dart'; +import 'src/test_util.dart'; void main() { + if (kIsWeb) { + return; + } + test('testServiceGenerator', () { final options = GenerationOptions(); final fd = buildFileDescriptor('testpkg', 'testpkg.proto', [ diff --git a/protoc_plugin/test/src/test_util.dart b/protoc_plugin/test/src/test_util.dart index a48c2df77..b832cac5a 100644 --- a/protoc_plugin/test/src/test_util.dart +++ b/protoc_plugin/test/src/test_util.dart @@ -9,6 +9,8 @@ import 'package:test/test.dart'; import '../gen/google/protobuf/unittest.pb.dart'; import '../gen/google/protobuf/unittest_import.pb.dart'; +const bool kIsWeb = bool.fromEnvironment('dart.library.js_interop'); + final Matcher throwsATypeError = throwsA(TypeMatcher()); Int64 make64(int lo, [int? hi]) { From f6094239ddfcbe7c12662482d218a21d90bf2d52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20A=C4=9Facan?= Date: Fri, 25 Jul 2025 13:07:41 +0100 Subject: [PATCH 05/11] Fix a test --- protoc_plugin/test/generated_message_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protoc_plugin/test/generated_message_test.dart b/protoc_plugin/test/generated_message_test.dart index 6d35ac86a..4bcee64d0 100644 --- a/protoc_plugin/test/generated_message_test.dart +++ b/protoc_plugin/test/generated_message_test.dart @@ -115,7 +115,7 @@ void main() { expect(message.utf8String, '\u1234'); expect(message.infDouble, same(double.infinity)); expect(message.negInfDouble, same(double.negativeInfinity)); - expect(message.nanDouble, same(double.nan)); + expect(message.nanDouble.isNaN, isTrue); expect(message.infFloat, same(double.infinity)); expect(message.negInfFloat, same(double.negativeInfinity)); expect(message.nanFloat, same(double.nan)); From 61561d6e30f637df29bd60afd38cc5717c8e390b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20A=C4=9Facan?= Date: Fri, 25 Jul 2025 13:08:02 +0100 Subject: [PATCH 06/11] Fix a test --- protoc_plugin/test/generated_message_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protoc_plugin/test/generated_message_test.dart b/protoc_plugin/test/generated_message_test.dart index 4bcee64d0..5f7cf9af9 100644 --- a/protoc_plugin/test/generated_message_test.dart +++ b/protoc_plugin/test/generated_message_test.dart @@ -118,7 +118,7 @@ void main() { expect(message.nanDouble.isNaN, isTrue); expect(message.infFloat, same(double.infinity)); expect(message.negInfFloat, same(double.negativeInfinity)); - expect(message.nanFloat, same(double.nan)); + expect(message.nanFloat.isNaN, isTrue); expect(message.cppTrigraph, '? ? ?? ?? ??? ??/ ??-'); expect( message.smallInt64.toRadixString(16).toUpperCase(), From 28ec562148713e3d0fc9f2658388fd6c176e4eed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20A=C4=9Facan?= Date: Fri, 25 Jul 2025 14:33:10 +0100 Subject: [PATCH 07/11] Skip port tests on browsers --- protoc_plugin/test/send_protos_via_sendports_test.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/protoc_plugin/test/send_protos_via_sendports_test.dart b/protoc_plugin/test/send_protos_via_sendports_test.dart index 39b8b8a20..8e60b33f2 100644 --- a/protoc_plugin/test/send_protos_via_sendports_test.dart +++ b/protoc_plugin/test/send_protos_via_sendports_test.dart @@ -2,6 +2,9 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. +@TestOn('vm') +library; + import 'dart:isolate'; import 'package:test/test.dart'; From 1bb26ea7563163b9c2ab1f25531144ab01baa517 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20A=C4=9Facan?= Date: Mon, 28 Jul 2025 09:18:52 +0100 Subject: [PATCH 08/11] Update problematic test --- protoc_plugin/test/oneof_test.dart | 34 +++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/protoc_plugin/test/oneof_test.dart b/protoc_plugin/test/oneof_test.dart index 9b17832f1..c9676c318 100644 --- a/protoc_plugin/test/oneof_test.dart +++ b/protoc_plugin/test/oneof_test.dart @@ -113,29 +113,43 @@ void main() { }); test('serialize and parse concat oneof', () { - var foo = Foo()..first = 'oneof'; - expectFirstSet(foo); + final foo1 = Foo()..first = 'oneof'; + expectFirstSet(foo1); final foo2 = Foo()..second = 1; expectSecondSet(foo2); - final concat = [...foo.writeToBuffer(), ...foo2.writeToBuffer()]; - foo = Foo.fromBuffer(concat); - expectSecondSet(foo); + final concat = [...foo1.writeToBuffer(), ...foo2.writeToBuffer()]; + expectSecondSet(Foo.fromBuffer(concat)); }); test('JSON serialize and parse concat oneof', () { - var foo = Foo()..first = 'oneof'; - expectFirstSet(foo); + final foo1 = Foo()..first = 'oneof'; + expectFirstSet(foo1); final foo2 = Foo()..second = 1; expectSecondSet(foo2); final jsonConcat = '${foo2.writeToJson().substring(0, foo2.writeToJson().length - 1)}, ' - '${foo.writeToJson().substring(1)}'; - foo = Foo.fromJson(jsonConcat); - expectFirstSet(foo); + '${foo1.writeToJson().substring(1)}'; + + final decoded = Foo.fromJson(jsonConcat); + + // It's unclear how to handle the input `{5:..., 1:...}` in this format. In + // the browsers we want to use the browser's JSON decoder, for performance. + // However numeric properties in JS objects are always iterated in ascending + // order, so that makes `5` override the previous oneof value, regardless of + // the orders of keys in the JSON string. In the backends that have their + // own map types (VM and Wasm) the key that comes later override the + // previous one. + if (1 == 1.0) { + // In JS: '5' comes last during object key iteration. + expectSecondSet(decoded); + } else { + // In VM and Wasm: '1' comes last during object iteration. + expectFirstSet(decoded); + } }); test('set and clear second oneof field', () { From e7851db577ae8250d23b1a508c49d98fc20f1c27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20A=C4=9Facan?= Date: Mon, 28 Jul 2025 09:34:29 +0100 Subject: [PATCH 09/11] Fix isJs check --- protoc_plugin/test/oneof_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protoc_plugin/test/oneof_test.dart b/protoc_plugin/test/oneof_test.dart index c9676c318..a99cc31fd 100644 --- a/protoc_plugin/test/oneof_test.dart +++ b/protoc_plugin/test/oneof_test.dart @@ -143,7 +143,7 @@ void main() { // the orders of keys in the JSON string. In the backends that have their // own map types (VM and Wasm) the key that comes later override the // previous one. - if (1 == 1.0) { + if (identical(1.0, 1)) { // In JS: '5' comes last during object key iteration. expectSecondSet(decoded); } else { From 356cd8adf51d22c5e23d895ffa3f2447c3da74cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20A=C4=9Facan?= Date: Mon, 28 Jul 2025 09:38:59 +0100 Subject: [PATCH 10/11] Remove kIsWeb, use TestOn --- protoc_plugin/test/client_generator_test.dart | 8 +++----- protoc_plugin/test/deprecations_test.dart | 8 +++----- protoc_plugin/test/doc_comments_test.dart | 8 +++----- protoc_plugin/test/enum_generator_test.dart | 8 +++----- protoc_plugin/test/extension_generator_test.dart | 8 +++----- protoc_plugin/test/file_generator_test.dart | 8 +++----- protoc_plugin/test/message_generator_test.dart | 8 +++----- protoc_plugin/test/service_generator_test.dart | 8 +++----- protoc_plugin/test/src/test_util.dart | 2 -- 9 files changed, 24 insertions(+), 42 deletions(-) diff --git a/protoc_plugin/test/client_generator_test.dart b/protoc_plugin/test/client_generator_test.dart index 59fab0861..439566435 100644 --- a/protoc_plugin/test/client_generator_test.dart +++ b/protoc_plugin/test/client_generator_test.dart @@ -2,6 +2,9 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. +@TestOn('vm') +library; + import 'package:protoc_plugin/indenting_writer.dart'; import 'package:protoc_plugin/protoc.dart'; import 'package:protoc_plugin/src/linker.dart'; @@ -10,13 +13,8 @@ import 'package:test/test.dart'; import 'src/golden_file.dart'; import 'src/service_util.dart'; -import 'src/test_util.dart'; void main() { - if (kIsWeb) { - return; - } - test('testClientGenerator', () { final options = GenerationOptions(); final fd = buildFileDescriptor('testpkg', 'testpkg.proto', [ diff --git a/protoc_plugin/test/deprecations_test.dart b/protoc_plugin/test/deprecations_test.dart index 47ceb6068..1c07e487a 100644 --- a/protoc_plugin/test/deprecations_test.dart +++ b/protoc_plugin/test/deprecations_test.dart @@ -2,18 +2,16 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. +@TestOn('vm') +library; + import 'dart:io'; import 'package:test/test.dart'; import 'src/golden_file.dart'; -import 'src/test_util.dart'; void main() { - if (kIsWeb) { - return; - } - test('Deprecated annotation generation for messages', () { final actual = File('test/gen/deprecations.pb.dart').readAsStringSync(); expectGolden(actual, 'deprecations.pb.dart'); diff --git a/protoc_plugin/test/doc_comments_test.dart b/protoc_plugin/test/doc_comments_test.dart index d9f13d1df..db65f174c 100644 --- a/protoc_plugin/test/doc_comments_test.dart +++ b/protoc_plugin/test/doc_comments_test.dart @@ -2,18 +2,16 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. +@TestOn('vm') +library; + import 'dart:io'; import 'package:test/test.dart'; import 'src/golden_file.dart'; -import 'src/test_util.dart'; void main() { - if (kIsWeb) { - return; - } - test('Doc comment generation for messages', () { final actual = File('test/gen/doc_comments.pb.dart').readAsStringSync(); expectGolden(actual, 'doc_comments.pb.dart'); diff --git a/protoc_plugin/test/enum_generator_test.dart b/protoc_plugin/test/enum_generator_test.dart index 383d8ef1a..f41bd0a26 100644 --- a/protoc_plugin/test/enum_generator_test.dart +++ b/protoc_plugin/test/enum_generator_test.dart @@ -2,6 +2,9 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. +@TestOn('vm') +library; + import 'package:protoc_plugin/indenting_writer.dart'; import 'package:protoc_plugin/protoc.dart'; import 'package:protoc_plugin/src/gen/google/protobuf/descriptor.pb.dart'; @@ -9,13 +12,8 @@ import 'package:protoc_plugin/src/options.dart'; import 'package:test/test.dart'; import 'src/golden_file.dart'; -import 'src/test_util.dart'; void main() { - if (kIsWeb) { - return; - } - test('testEnumGenerator', () { final ed = EnumDescriptorProto() diff --git a/protoc_plugin/test/extension_generator_test.dart b/protoc_plugin/test/extension_generator_test.dart index e071b7ae0..bd3775aa7 100644 --- a/protoc_plugin/test/extension_generator_test.dart +++ b/protoc_plugin/test/extension_generator_test.dart @@ -2,6 +2,9 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. +@TestOn('vm') +library; + import 'package:protoc_plugin/indenting_writer.dart'; import 'package:protoc_plugin/protoc.dart'; import 'package:protoc_plugin/src/gen/google/protobuf/compiler/plugin.pb.dart' @@ -12,13 +15,8 @@ import 'package:protoc_plugin/src/options.dart'; import 'package:test/test.dart'; import 'src/golden_file.dart'; -import 'src/test_util.dart'; void main() { - if (kIsWeb) { - return; - } - test('testExtensionGenerator', () { final extensionFieldDescriptor = pb.FieldDescriptorProto() diff --git a/protoc_plugin/test/file_generator_test.dart b/protoc_plugin/test/file_generator_test.dart index e7e415c9e..13b931d72 100644 --- a/protoc_plugin/test/file_generator_test.dart +++ b/protoc_plugin/test/file_generator_test.dart @@ -2,6 +2,9 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. +@TestOn('vm') +library; + import 'package:protoc_plugin/indenting_writer.dart'; import 'package:protoc_plugin/protoc.dart'; import 'package:protoc_plugin/src/gen/google/api/client.pb.dart'; @@ -12,7 +15,6 @@ import 'package:protoc_plugin/src/options.dart'; import 'package:test/test.dart'; import 'src/golden_file.dart'; -import 'src/test_util.dart'; FileDescriptorProto buildFileDescriptor({ bool phoneNumber = true, @@ -100,10 +102,6 @@ FileDescriptorProto createInt64Proto() { } void main() { - if (kIsWeb) { - return; - } - test( 'FileGenerator outputs a .pb.dart file for a proto with one message', () { diff --git a/protoc_plugin/test/message_generator_test.dart b/protoc_plugin/test/message_generator_test.dart index 4762df6c2..5585e5c30 100644 --- a/protoc_plugin/test/message_generator_test.dart +++ b/protoc_plugin/test/message_generator_test.dart @@ -2,6 +2,9 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. +@TestOn('vm') +library; + import 'dart:collection'; import 'package:collection/collection.dart'; @@ -14,7 +17,6 @@ import 'package:protoc_plugin/src/options.dart'; import 'package:test/test.dart'; import 'src/golden_file.dart'; -import 'src/test_util.dart'; void main() { late FileDescriptorProto fd; @@ -78,10 +80,6 @@ void main() { }); test('testMessageGenerator', () { - if (kIsWeb) { - return; - } - final options = parseGenerationOptions( CodeGeneratorRequest()..parameter = 'disable_constructor_args', diff --git a/protoc_plugin/test/service_generator_test.dart b/protoc_plugin/test/service_generator_test.dart index 8169fdf59..52c2401c6 100644 --- a/protoc_plugin/test/service_generator_test.dart +++ b/protoc_plugin/test/service_generator_test.dart @@ -2,6 +2,9 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. +@TestOn('vm') +library; + import 'package:protoc_plugin/indenting_writer.dart'; import 'package:protoc_plugin/protoc.dart'; import 'package:protoc_plugin/src/linker.dart'; @@ -10,13 +13,8 @@ import 'package:test/test.dart'; import 'src/golden_file.dart'; import 'src/service_util.dart'; -import 'src/test_util.dart'; void main() { - if (kIsWeb) { - return; - } - test('testServiceGenerator', () { final options = GenerationOptions(); final fd = buildFileDescriptor('testpkg', 'testpkg.proto', [ diff --git a/protoc_plugin/test/src/test_util.dart b/protoc_plugin/test/src/test_util.dart index b832cac5a..a48c2df77 100644 --- a/protoc_plugin/test/src/test_util.dart +++ b/protoc_plugin/test/src/test_util.dart @@ -9,8 +9,6 @@ import 'package:test/test.dart'; import '../gen/google/protobuf/unittest.pb.dart'; import '../gen/google/protobuf/unittest_import.pb.dart'; -const bool kIsWeb = bool.fromEnvironment('dart.library.js_interop'); - final Matcher throwsATypeError = throwsA(TypeMatcher()); Int64 make64(int lo, [int? hi]) { From 590cb385146ef1503a3fbaf10ce027b2a688c55c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20A=C4=9Facan?= Date: Mon, 28 Jul 2025 09:59:45 +0100 Subject: [PATCH 11/11] Update workflow --- .github/workflows/protoc_plugin.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/protoc_plugin.yaml b/.github/workflows/protoc_plugin.yaml index 4d561c906..0d7c799c9 100644 --- a/.github/workflows/protoc_plugin.yaml +++ b/.github/workflows/protoc_plugin.yaml @@ -43,3 +43,7 @@ jobs: - run: dart format --output=none --set-exit-if-changed lib - run: dart test + + - run: dart test -p chrome -c dart2js + + - run: dart test -p chrome -c dart2wasm