From 97ab0241e765ddc0c229e479bf796c93cbfee320 Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Mon, 22 Feb 2021 11:06:31 -0800 Subject: [PATCH] [pigeon] Fixed decoding code for null-safe classes. --- packages/pigeon/lib/dart_generator.dart | 8 ++-- .../flutter_null_safe_unit_tests/.gitignore | 46 +++++++++++++++++++ .../flutter_null_safe_unit_tests/.metadata | 10 ++++ .../flutter_null_safe_unit_tests/README.md | 3 ++ .../lib/.gitignore | 1 + .../flutter_null_safe_unit_tests/pubspec.yaml | 17 +++++++ .../test/null_safe_test.dart | 28 +++++++++++ packages/pigeon/run_tests.sh | 13 ++++++ 8 files changed, 122 insertions(+), 4 deletions(-) create mode 100644 packages/pigeon/platform_tests/flutter_null_safe_unit_tests/.gitignore create mode 100644 packages/pigeon/platform_tests/flutter_null_safe_unit_tests/.metadata create mode 100644 packages/pigeon/platform_tests/flutter_null_safe_unit_tests/README.md create mode 100644 packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/.gitignore create mode 100644 packages/pigeon/platform_tests/flutter_null_safe_unit_tests/pubspec.yaml create mode 100644 packages/pigeon/platform_tests/flutter_null_safe_unit_tests/test/null_safe_test.dart diff --git a/packages/pigeon/lib/dart_generator.dart b/packages/pigeon/lib/dart_generator.dart index 6cf834db39dc..ecfe5ef58b72 100644 --- a/packages/pigeon/lib/dart_generator.dart +++ b/packages/pigeon/lib/dart_generator.dart @@ -178,11 +178,11 @@ void _writeFlutterApi( String _addGenericTypes(String dataType, String nullTag) { switch (dataType) { case 'List': - return 'List'; + return 'List$nullTag'; case 'Map': - return 'Map'; + return 'Map$nullTag'; default: - return dataType; + return '$dataType$nullTag'; } } @@ -212,7 +212,7 @@ void generateDart(DartOptions opt, Root root, StringSink sink) { indent.scoped('{', '}', () { for (Field field in klass.fields) { final String datatype = - '${_addGenericTypes(field.dataType, nullTag)}$nullTag'; + '${_addGenericTypes(field.dataType, nullTag)}'; indent.writeln('$datatype ${field.name};'); } if (klass.fields.isNotEmpty) { diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/.gitignore b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/.gitignore new file mode 100644 index 000000000000..0fa6b675c0a5 --- /dev/null +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/.gitignore @@ -0,0 +1,46 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Web related +lib/generated_plugin_registrant.dart + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/.metadata b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/.metadata new file mode 100644 index 000000000000..5db57c1fab41 --- /dev/null +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/.metadata @@ -0,0 +1,10 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: 6db3d61ed4a58ba89140d7fe1fd294b598cc29c5 + channel: master + +project_type: app diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/README.md b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/README.md new file mode 100644 index 000000000000..3c52fc95e5c6 --- /dev/null +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/README.md @@ -0,0 +1,3 @@ +# flutter_unit_tests + +Unit test scaffold for null safe Flutter projects. diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/.gitignore b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/.gitignore new file mode 100644 index 000000000000..ee0dd32f11f4 --- /dev/null +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/.gitignore @@ -0,0 +1 @@ +null_safe_pigeon.dart diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/pubspec.yaml b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/pubspec.yaml new file mode 100644 index 000000000000..32058dea3d61 --- /dev/null +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/pubspec.yaml @@ -0,0 +1,17 @@ +name: flutter_unit_tests +description: Unit test scaffold for null safe Flutter projects. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev +version: 1.0.0+1 +environment: + sdk: ">=2.12.0 <3.0.0" + +dependencies: + flutter: + sdk: flutter + +dev_dependencies: + flutter_test: + sdk: flutter + +flutter: + uses-material-design: true diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/test/null_safe_test.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/test/null_safe_test.dart new file mode 100644 index 000000000000..523127a3cfbf --- /dev/null +++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/test/null_safe_test.dart @@ -0,0 +1,28 @@ +// Copyright 2020 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter_unit_tests/null_safe_pigeon.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + test('with values filled', () { + final SearchReply reply = SearchReply() + ..result = 'foo' + ..error = 'bar'; + final Object encoded = reply.encode(); + final SearchReply decoded = SearchReply.decode(encoded); + expect(reply.result, decoded.result); + expect(reply.error, decoded.error); + }); + + test('with null value', () { + final SearchReply reply = SearchReply() + ..result = 'foo' + ..error = null; + final Object encoded = reply.encode(); + final SearchReply decoded = SearchReply.decode(encoded); + expect(reply.result, decoded.result); + expect(reply.error, decoded.error); + }); +} diff --git a/packages/pigeon/run_tests.sh b/packages/pigeon/run_tests.sh index c6b5b20c5285..ae5aa1e8f7df 100755 --- a/packages/pigeon/run_tests.sh +++ b/packages/pigeon/run_tests.sh @@ -110,6 +110,19 @@ pub run test test/ ############################################################################### pub run pigeon 1> /dev/null +############################################################################### +# Run unit tests on generated Dart code. +############################################################################### +pushd $PWD +pub run pigeon \ + --input pigeons/message.dart \ + --dart_null_safety \ + --dart_out platform_tests/flutter_null_safe_unit_tests/lib/null_safe_pigeon.dart +cd platform_tests/flutter_null_safe_unit_tests +flutter pub get +flutter test test/null_safe_test.dart +popd + ############################################################################### # Mock handler flutter tests. ###############################################################################