From 90473d924d9026f07dadb1e1744361dbaaa714ae Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Fri, 22 Sep 2023 14:10:54 -0700 Subject: [PATCH 1/2] use correct asset path --- .../framework/Source/FlutterNSBundleUtils.mm | 2 +- .../Source/FlutterDartProjectTest.mm | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/shell/platform/darwin/common/framework/Source/FlutterNSBundleUtils.mm b/shell/platform/darwin/common/framework/Source/FlutterNSBundleUtils.mm index 4198fd33e0209..9582f94e266e1 100644 --- a/shell/platform/darwin/common/framework/Source/FlutterNSBundleUtils.mm +++ b/shell/platform/darwin/common/framework/Source/FlutterNSBundleUtils.mm @@ -54,7 +54,7 @@ } NSString* FLTAssetPath(NSBundle* bundle) { - return [bundle objectForInfoDictionaryKey:@"FLTAssetsPath"] ?: @"flutter_assets"; + return [bundle objectForInfoDictionaryKey:@"FLTAssetsPath"] ?: kDefaultAssetPath; } NSString* FLTAssetsPathFromBundle(NSBundle* bundle) { diff --git a/shell/platform/darwin/ios/framework/Source/FlutterDartProjectTest.mm b/shell/platform/darwin/ios/framework/Source/FlutterDartProjectTest.mm index 19774d21bc52c..da9924f34a9ca 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterDartProjectTest.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterDartProjectTest.mm @@ -102,14 +102,29 @@ - (void)testFLTAssetsURLFromBundle { id mockBundle = OCMClassMock([NSBundle class]); id mockMainBundle = OCMPartialMock([NSBundle mainBundle]); NSString* resultAssetsPath = @"path/to/foo/assets"; - OCMStub([mockBundle pathForResource:@"flutter_assets" ofType:@""]).andReturn(nil); - OCMStub([mockMainBundle pathForResource:@"flutter_assets" ofType:@""]) + OCMStub([mockBundle pathForResource:@"Frameworks/App.framework/flutter_assets" ofType:@""]).andReturn(nil); + OCMStub([mockMainBundle pathForResource:@"Frameworks/App.framework/flutter_assets" ofType:@""]) .andReturn(resultAssetsPath); NSString* path = FLTAssetsPathFromBundle(mockBundle); XCTAssertEqualObjects(path, @"path/to/foo/assets"); } } +- (void)testFLTAssetPathReturnsTheCorrectValue { + { + // Found asset path in info.plist + id mockBundle = OCMClassMock([NSBundle class]); + OCMStub([mockBundle objectForInfoDictionaryKey:@"FLTAssetsPath"]).andReturn(@"foo/assets"); + XCTAssertEqualObjects(FLTAssetPath(mockBundle), @"foo/assets"); + } + { + // No asset path in info.plist, use default value + id mockBundle = OCMClassMock([NSBundle class]); + OCMStub([mockBundle objectForInfoDictionaryKey:@"FLTAssetsPath"]).andReturn(nil); + XCTAssertEqualObjects(FLTAssetPath(mockBundle), kDefaultAssetPath); + } +} + - (void)testDisableImpellerSettingIsCorrectlyParsed { id mockMainBundle = OCMPartialMock([NSBundle mainBundle]); OCMStub([mockMainBundle objectForInfoDictionaryKey:@"FLTEnableImpeller"]).andReturn(@"NO"); From 9459ef41895d6f783cad973ab374d653f7912d6b Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Fri, 22 Sep 2023 14:11:35 -0700 Subject: [PATCH 2/2] format test public API format --- .../Source/FlutterDartProjectTest.mm | 93 ++++++++++++++++++- 1 file changed, 90 insertions(+), 3 deletions(-) diff --git a/shell/platform/darwin/ios/framework/Source/FlutterDartProjectTest.mm b/shell/platform/darwin/ios/framework/Source/FlutterDartProjectTest.mm index da9924f34a9ca..aecab91f0051c 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterDartProjectTest.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterDartProjectTest.mm @@ -102,7 +102,8 @@ - (void)testFLTAssetsURLFromBundle { id mockBundle = OCMClassMock([NSBundle class]); id mockMainBundle = OCMPartialMock([NSBundle mainBundle]); NSString* resultAssetsPath = @"path/to/foo/assets"; - OCMStub([mockBundle pathForResource:@"Frameworks/App.framework/flutter_assets" ofType:@""]).andReturn(nil); + OCMStub([mockBundle pathForResource:@"Frameworks/App.framework/flutter_assets" ofType:@""]) + .andReturn(nil); OCMStub([mockMainBundle pathForResource:@"Frameworks/App.framework/flutter_assets" ofType:@""]) .andReturn(resultAssetsPath); NSString* path = FLTAssetsPathFromBundle(mockBundle); @@ -112,19 +113,105 @@ - (void)testFLTAssetsURLFromBundle { - (void)testFLTAssetPathReturnsTheCorrectValue { { - // Found asset path in info.plist + // Found assets path in info.plist id mockBundle = OCMClassMock([NSBundle class]); OCMStub([mockBundle objectForInfoDictionaryKey:@"FLTAssetsPath"]).andReturn(@"foo/assets"); XCTAssertEqualObjects(FLTAssetPath(mockBundle), @"foo/assets"); } { - // No asset path in info.plist, use default value + // No assets path in info.plist, use default value id mockBundle = OCMClassMock([NSBundle class]); OCMStub([mockBundle objectForInfoDictionaryKey:@"FLTAssetsPath"]).andReturn(nil); XCTAssertEqualObjects(FLTAssetPath(mockBundle), kDefaultAssetPath); } } +- (void)testLookUpForAssets { + { + id mockBundle = OCMPartialMock([NSBundle mainBundle]); + // Found assets path in info.plist + OCMStub([mockBundle objectForInfoDictionaryKey:@"FLTAssetsPath"]).andReturn(@"foo/assets"); + NSString* assetsPath = [FlutterDartProject lookupKeyForAsset:@"bar"]; + // This is testing public API, changing this assert is likely to break plugins. + XCTAssertEqualObjects(assetsPath, @"foo/assets/bar"); + [mockBundle stopMocking]; + } + { + id mockBundle = OCMPartialMock([NSBundle mainBundle]); + // No assets path in info.plist, use default value + OCMStub([mockBundle objectForInfoDictionaryKey:@"FLTAssetsPath"]).andReturn(nil); + NSString* assetsPath = [FlutterDartProject lookupKeyForAsset:@"bar"]; + // This is testing public API, changing this assert is likely to break plugins. + XCTAssertEqualObjects(assetsPath, @"Frameworks/App.framework/flutter_assets/bar"); + [mockBundle stopMocking]; + } +} + +- (void)testLookUpForAssetsFromBundle { + { + id mockBundle = OCMClassMock([NSBundle class]); + // Found assets path in info.plist + OCMStub([mockBundle objectForInfoDictionaryKey:@"FLTAssetsPath"]).andReturn(@"foo/assets"); + NSString* assetsPath = [FlutterDartProject lookupKeyForAsset:@"bar" fromBundle:mockBundle]; + // This is testing public API, changing this assert is likely to break plugins. + XCTAssertEqualObjects(assetsPath, @"foo/assets/bar"); + } + { + // No assets path in info.plist, use default value + id mockBundle = OCMClassMock([NSBundle class]); + OCMStub([mockBundle objectForInfoDictionaryKey:@"FLTAssetsPath"]).andReturn(nil); + NSString* assetsPath = [FlutterDartProject lookupKeyForAsset:@"bar" fromBundle:mockBundle]; + // This is testing public API, changing this assert is likely to break plugins. + XCTAssertEqualObjects(assetsPath, @"Frameworks/App.framework/flutter_assets/bar"); + } +} + +- (void)testLookUpForAssetsFromPackage { + { + id mockBundle = OCMPartialMock([NSBundle mainBundle]); + // Found assets path in info.plist + OCMStub([mockBundle objectForInfoDictionaryKey:@"FLTAssetsPath"]).andReturn(@"foo/assets"); + NSString* assetsPath = [FlutterDartProject lookupKeyForAsset:@"bar" fromPackage:@"bar_package"]; + // This is testing public API, changing this assert is likely to break plugins. + XCTAssertEqualObjects(assetsPath, @"foo/assets/packages/bar_package/bar"); + [mockBundle stopMocking]; + } + { + id mockBundle = OCMPartialMock([NSBundle mainBundle]); + // No assets path in info.plist, use default value + OCMStub([mockBundle objectForInfoDictionaryKey:@"FLTAssetsPath"]).andReturn(nil); + NSString* assetsPath = [FlutterDartProject lookupKeyForAsset:@"bar" fromPackage:@"bar_package"]; + // This is testing public API, changing this assert is likely to break plugins. + XCTAssertEqualObjects(assetsPath, + @"Frameworks/App.framework/flutter_assets/packages/bar_package/bar"); + [mockBundle stopMocking]; + } +} + +- (void)testLookUpForAssetsFromPackageFromBundle { + { + id mockBundle = OCMClassMock([NSBundle class]); + // Found assets path in info.plist + OCMStub([mockBundle objectForInfoDictionaryKey:@"FLTAssetsPath"]).andReturn(@"foo/assets"); + NSString* assetsPath = [FlutterDartProject lookupKeyForAsset:@"bar" + fromPackage:@"bar_package" + fromBundle:mockBundle]; + // This is testing public API, changing this assert is likely to break plugins. + XCTAssertEqualObjects(assetsPath, @"foo/assets/packages/bar_package/bar"); + } + { + id mockBundle = OCMClassMock([NSBundle class]); + // No assets path in info.plist, use default value + OCMStub([mockBundle objectForInfoDictionaryKey:@"FLTAssetsPath"]).andReturn(nil); + NSString* assetsPath = [FlutterDartProject lookupKeyForAsset:@"bar" + fromPackage:@"bar_package" + fromBundle:mockBundle]; + // This is testing public API, changing this assert is likely to break plugins. + XCTAssertEqualObjects(assetsPath, + @"Frameworks/App.framework/flutter_assets/packages/bar_package/bar"); + } +} + - (void)testDisableImpellerSettingIsCorrectlyParsed { id mockMainBundle = OCMPartialMock([NSBundle mainBundle]); OCMStub([mockMainBundle objectForInfoDictionaryKey:@"FLTEnableImpeller"]).andReturn(@"NO");