From 1f021ea65273fdaf55393347d8241fa6b369fb37 Mon Sep 17 00:00:00 2001 From: Gary Qian Date: Tue, 8 Jun 2021 09:17:21 -0700 Subject: [PATCH] [Pigeon] Fix Obj-C generation cast bug (#375) --- packages/pigeon/lib/objc_generator.dart | 2 +- packages/pigeon/test/objc_generator_test.dart | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/packages/pigeon/lib/objc_generator.dart b/packages/pigeon/lib/objc_generator.dart index f736c9fd53..1148ecc041 100644 --- a/packages/pigeon/lib/objc_generator.dart +++ b/packages/pigeon/lib/objc_generator.dart @@ -446,7 +446,7 @@ static NSDictionary* wrapResult(NSDictionary *result, FlutterErro for (final Field field in klass.fields) { if (enumNames.contains(field.dataType)) { indent.writeln( - '$resultName.${field.name} = (int)${_dictGetter(classNames, 'dict', field, options.prefix)};'); + '$resultName.${field.name} = [${_dictGetter(classNames, 'dict', field, options.prefix)} integerValue];'); } else { indent.writeln( '$resultName.${field.name} = ${_dictGetter(classNames, 'dict', field, options.prefix)};'); diff --git a/packages/pigeon/test/objc_generator_test.dart b/packages/pigeon/test/objc_generator_test.dart index 6c762f95ba..7008c2f79d 100644 --- a/packages/pigeon/test/objc_generator_test.dart +++ b/packages/pigeon/test/objc_generator_test.dart @@ -69,6 +69,36 @@ void main() { expect(code, contains(' PREFIXEnum1Two = 1,')); }); + test('gen one class source with enum', () { + final Root root = Root( + apis: [], + classes: [ + Class( + name: 'Foobar', + fields: [ + Field(name: 'field1', dataType: 'String'), + Field(name: 'enum1', dataType: 'Enum1'), + ], + ), + ], + enums: [ + Enum( + name: 'Enum1', + members: [ + 'one', + 'two', + ], + ) + ], + ); + final StringBuffer sink = StringBuffer(); + generateObjcSource(ObjcOptions(header: 'foo.h'), root, sink); + final String code = sink.toString(); + expect(code, contains('#import "foo.h"')); + expect(code, contains('@implementation Foobar')); + expect(code, contains('result.enum1 = [dict[@"enum1"] integerValue];')); + }); + test('gen one api header', () { final Root root = Root(apis: [ Api(name: 'Api', location: ApiLocation.host, methods: [