@react-native-firebase/app 26.3.3 → 27.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +75 -0
- package/README.md +10 -27
- package/RNFBApp.podspec +13 -5
- package/android/build.gradle +3 -0
- package/android/src/main/java/io/invertase/firebase/common/RNFBHandleCollisionException.kt +29 -0
- package/android/src/main/java/io/invertase/firebase/common/RNFBHandleMap.kt +146 -0
- package/android/src/main/java/io/invertase/firebase/common/TaskExecutorService.kt +156 -0
- package/android/src/main/java/io/invertase/firebase/common/UniversalFirebaseModule.kt +44 -0
- package/android/src/main/java/io/invertase/firebase/common/UniversalFirebasePreferences.kt +100 -0
- package/android/src/reactnative/java/io/invertase/firebase/app/NativeRNFBTurboApp.kt +250 -0
- package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseApp.kt +64 -0
- package/android/src/reactnative/java/io/invertase/firebase/app/{ReactNativeFirebaseAppInitProvider.java → ReactNativeFirebaseAppInitProvider.kt} +3 -4
- package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseAppPackage.kt +47 -0
- package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseAppRegistrar.kt +33 -0
- package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseVersion.java +1 -1
- package/android/src/reactnative/java/io/invertase/firebase/common/RCTConvertFirebase.kt +185 -0
- package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseEvent.kt +35 -0
- package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseEventEmitter.kt +662 -0
- package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseJSON.kt +103 -0
- package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseMeta.kt +96 -0
- package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseModule.kt +140 -0
- package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebasePreferences.kt +109 -0
- package/android/src/reactnative/java/io/invertase/firebase/common/SharedUtils.kt +451 -0
- package/android/src/reactnative/java/io/invertase/firebase/interfaces/{ContextProvider.java → ContextProvider.kt} +8 -8
- package/android/src/reactnative/java/io/invertase/firebase/interfaces/{NativeError.java → NativeError.kt} +8 -8
- package/android/src/reactnative/java/io/invertase/firebase/interfaces/{NativeEvent.java → NativeEvent.kt} +6 -6
- package/android/src/reactnative/java/io/invertase/firebase/utils/NativeRNFBTurboUtils.kt +219 -0
- package/android/src/test/java/expo/core/ModuleRegistry.java +9 -0
- package/android/src/test/java/io/invertase/firebase/app/NativeRNFBTurboAppTest.java +208 -60
- package/android/src/test/java/io/invertase/firebase/app/ReactNativeFirebaseAppComponentsJavaCompatibilityTest.java +70 -0
- package/android/src/test/java/io/invertase/firebase/app/ReactNativeFirebaseAppJavaCompatibilityTest.java +60 -0
- package/android/src/test/java/io/invertase/firebase/app/ReactNativeFirebaseAppPackageTest.java +165 -0
- package/android/src/test/java/io/invertase/firebase/app/ReactNativeFirebaseAppTest.kt +167 -0
- package/android/src/test/java/io/invertase/firebase/common/RCTConvertFirebaseJavaCompatibilityTest.java +112 -0
- package/android/src/test/java/io/invertase/firebase/common/RCTConvertFirebaseTest.kt +317 -0
- package/android/src/test/java/io/invertase/firebase/common/RNFBHandleMapTest.kt +309 -0
- package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseEventEmitterJavaCompatibilityTest.java +176 -0
- package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseEventEmitterTest.java +144 -13
- package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseEventTest.kt +61 -0
- package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseJSONJavaCompatibilityTest.java +85 -0
- package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseJSONTest.kt +296 -0
- package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseMetaJavaCompatibilityTest.java +67 -0
- package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseMetaTest.kt +246 -0
- package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseModuleTest.kt +254 -0
- package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebasePreferencesJavaCompatibilityTest.java +87 -0
- package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebasePreferencesTest.kt +260 -0
- package/android/src/test/java/io/invertase/firebase/common/SharedUtilsJavaCompatibilityTest.java +255 -0
- package/android/src/test/java/io/invertase/firebase/common/SharedUtilsTest.kt +674 -0
- package/android/src/test/java/io/invertase/firebase/common/TaskExecutorServiceTest.kt +290 -0
- package/android/src/test/java/io/invertase/firebase/common/UniversalFirebaseModuleJavaCompatibilityTest.java +178 -0
- package/android/src/test/java/io/invertase/firebase/common/UniversalFirebasePreferencesJavaCompatibilityTest.java +99 -0
- package/android/src/test/java/io/invertase/firebase/common/UniversalFirebasePreferencesTest.kt +217 -0
- package/android/src/test/java/io/invertase/firebase/commoncompat/ReactNativeFirebaseModuleJavaCompatibilityTest.java +176 -0
- package/android/src/test/java/io/invertase/firebase/commoncompat/ReactNativeFirebaseModuleKotlinCompatibilityTest.kt +52 -0
- package/android/src/test/java/io/invertase/firebase/interfaces/InterfacesJavaCompatibilityTest.java +144 -0
- package/android/src/test/java/io/invertase/firebase/interfaces/NativeEventTest.kt +56 -0
- package/android/src/test/java/io/invertase/firebase/utils/NativeRNFBTurboUtilsTest.java +517 -23
- package/dist/module/FirebaseApp.js +10 -0
- package/dist/module/FirebaseApp.js.map +1 -1
- package/dist/module/common/Base64.js +13 -21
- package/dist/module/common/Base64.js.map +1 -1
- package/dist/module/common/deeps.js +3 -0
- package/dist/module/common/deeps.js.map +1 -1
- package/dist/module/common/index.js +17 -9
- package/dist/module/common/index.js.map +1 -1
- package/dist/module/internal/FirebaseModule.js.map +1 -1
- package/dist/module/internal/RNFBNativeEventEmitter.js +12 -1
- package/dist/module/internal/RNFBNativeEventEmitter.js.map +1 -1
- package/dist/module/internal/SharedEventEmitter.js +3 -1
- package/dist/module/internal/SharedEventEmitter.js.map +1 -1
- package/dist/module/internal/asyncStorage.js +7 -11
- package/dist/module/internal/asyncStorage.js.map +1 -1
- package/dist/module/internal/index.js +1 -0
- package/dist/module/internal/index.js.map +1 -1
- package/dist/module/internal/logger.js +44 -40
- package/dist/module/internal/logger.js.map +1 -1
- package/dist/module/internal/nativeModuleAndroidIos.js +2 -29
- package/dist/module/internal/nativeModuleAndroidIos.js.map +1 -1
- package/dist/module/internal/nativeModuleDebug.js +74 -0
- package/dist/module/internal/nativeModuleDebug.js.map +1 -0
- package/dist/module/internal/nativeModuleWeb.js +9 -29
- package/dist/module/internal/nativeModuleWeb.js.map +1 -1
- package/dist/module/internal/registry/app.js +8 -2
- package/dist/module/internal/registry/app.js.map +1 -1
- package/dist/module/internal/registry/modular.js +2 -2
- package/dist/module/internal/registry/modular.js.map +1 -1
- package/dist/module/internal/registry/nativeModule.js +3 -3
- package/dist/module/internal/registry/nativeModule.js.map +1 -1
- package/dist/module/internal/web/RNFBAppModule.js +16 -15
- package/dist/module/internal/web/RNFBAppModule.js.map +1 -1
- package/dist/module/internal/web/memidb/lib/FakeEventTarget.js +3 -1
- package/dist/module/internal/web/memidb/lib/FakeEventTarget.js.map +1 -1
- package/dist/module/types/app.js.map +1 -1
- package/dist/module/types/internal.js +2 -0
- package/dist/module/version.js +1 -1
- package/dist/typescript/lib/FirebaseApp.d.ts +7 -0
- package/dist/typescript/lib/FirebaseApp.d.ts.map +1 -1
- package/dist/typescript/lib/common/Base64.d.ts.map +1 -1
- package/dist/typescript/lib/common/deeps.d.ts.map +1 -1
- package/dist/typescript/lib/common/index.d.ts.map +1 -1
- package/dist/typescript/lib/internal/FirebaseModule.d.ts +2 -3
- package/dist/typescript/lib/internal/FirebaseModule.d.ts.map +1 -1
- package/dist/typescript/lib/internal/NativeModules.d.ts +4 -1
- package/dist/typescript/lib/internal/NativeModules.d.ts.map +1 -1
- package/dist/typescript/lib/internal/RNFBNativeEventEmitter.d.ts +2 -2
- package/dist/typescript/lib/internal/RNFBNativeEventEmitter.d.ts.map +1 -1
- package/dist/typescript/lib/internal/SharedEventEmitter.d.ts +3 -3
- package/dist/typescript/lib/internal/SharedEventEmitter.d.ts.map +1 -1
- package/dist/typescript/lib/internal/asyncStorage.d.ts.map +1 -1
- package/dist/typescript/lib/internal/index.d.ts +1 -0
- package/dist/typescript/lib/internal/index.d.ts.map +1 -1
- package/dist/typescript/lib/internal/logger.d.ts.map +1 -1
- package/dist/typescript/lib/internal/nativeModuleAndroidIos.d.ts.map +1 -1
- package/dist/typescript/lib/internal/nativeModuleDebug.d.ts +2 -0
- package/dist/typescript/lib/internal/nativeModuleDebug.d.ts.map +1 -0
- package/dist/typescript/lib/internal/nativeModuleWeb.d.ts.map +1 -1
- package/dist/typescript/lib/internal/registry/app.d.ts.map +1 -1
- package/dist/typescript/lib/internal/web/RNFBAppModule.d.ts +7 -7
- package/dist/typescript/lib/internal/web/RNFBAppModule.d.ts.map +1 -1
- package/dist/typescript/lib/types/app.d.ts +10 -3
- package/dist/typescript/lib/types/app.d.ts.map +1 -1
- package/dist/typescript/lib/types/internal.d.ts +12 -0
- package/dist/typescript/lib/types/internal.d.ts.map +1 -1
- package/dist/typescript/lib/version.d.ts +1 -1
- package/firebase-schema.json +5 -1
- package/firebase_spm.rb +552 -96
- package/ios/RNFBApp/RCTConvert+FIRApp.h +2 -5
- package/ios/RNFBApp/RCTConvert+FIRApp.m +11 -6
- package/ios/RNFBApp/RCTConvert+FIROptions.h +2 -5
- package/ios/RNFBApp/RCTConvert+FIROptions.m +11 -10
- package/ios/RNFBApp/RCTConvertFIRApp.swift +86 -0
- package/ios/RNFBApp/RCTConvertFIROptions.swift +259 -0
- package/ios/RNFBApp/RNFBAppCustomAuthDomains.swift +63 -0
- package/ios/RNFBApp/RNFBAppInitializeOptionsMapper.swift +113 -0
- package/ios/RNFBApp/RNFBAppLogLevelMapper.swift +53 -0
- package/ios/RNFBApp/RNFBAppModule+CustomAuthDomain.m +35 -0
- package/ios/RNFBApp/RNFBAppModule.h +6 -2
- package/ios/RNFBApp/RNFBAppModule.mm +67 -204
- package/ios/RNFBApp/RNFBAppModuleFirebase.swift +439 -0
- package/ios/RNFBApp/RNFBAppModuleImplementation.h +68 -0
- package/ios/RNFBApp/RNFBAppModuleImplementation.m +195 -0
- package/ios/RNFBApp/RNFBHandleMap.h +73 -0
- package/ios/RNFBApp/RNFBHandleMap.m +87 -0
- package/ios/RNFBApp/RNFBHandleMapStorage.swift +90 -0
- package/ios/RNFBApp/RNFBInitializeAppArguments.swift +82 -0
- package/ios/RNFBApp/RNFBJSON.m +22 -38
- package/ios/RNFBApp/RNFBJSONImplementation.swift +71 -0
- package/ios/RNFBApp/RNFBMeta.m +24 -26
- package/ios/RNFBApp/RNFBMetaStorage.swift +76 -0
- package/ios/RNFBApp/RNFBNullSentinelDecoding.swift +135 -0
- package/ios/RNFBApp/RNFBNullSentinelInterceptor.h +30 -3
- package/ios/RNFBApp/RNFBNullSentinelInterceptor.m +28 -5
- package/ios/RNFBApp/RNFBPreferences.m +22 -20
- package/ios/RNFBApp/RNFBPreferencesStorage.swift +101 -0
- package/ios/RNFBApp/RNFBRCTEventEmitter.m +36 -93
- package/ios/RNFBApp/RNFBRCTEventEmitterCore.swift +161 -0
- package/ios/RNFBApp/RNFBSharedUtils.h +2 -5
- package/ios/RNFBApp/RNFBSharedUtils.m +109 -197
- package/ios/RNFBApp/RNFBSharedUtilsConfig.swift +72 -0
- package/ios/RNFBApp/RNFBSharedUtilsFIRApp.swift +271 -0
- package/ios/RNFBApp/RNFBSharedUtilsFormatting.swift +59 -0
- package/ios/RNFBApp/RNFBSharedUtilsPromiseRejection.swift +88 -0
- package/ios/RNFBApp/RNFBUtilsHelpers.swift +116 -0
- package/ios/RNFBApp/RNFBUtilsModule+Foundation.m +44 -0
- package/ios/RNFBApp/RNFBUtilsModule+PhotoAssets.m +47 -0
- package/ios/RNFBApp/RNFBUtilsModule.h +11 -1
- package/ios/RNFBApp/RNFBUtilsModule.mm +10 -85
- package/ios/RNFBApp/RNFBUtilsModuleImplementation.h +32 -0
- package/ios/RNFBApp/RNFBUtilsModuleImplementation.m +56 -0
- package/ios/RNFBApp/RNFBVersion.m +1 -1
- package/ios/RNFBApp.xcodeproj/project.pbxproj +106 -0
- package/ios/RNFBAppUnitTests/HostStubs/FirebaseCore/FIRApp.m +171 -0
- package/ios/RNFBAppUnitTests/HostStubs/FirebaseCore/FirebaseCore.h +78 -0
- package/ios/RNFBAppUnitTests/HostStubs/FirebaseInstallations/FIRInstallations.m +7 -0
- package/ios/RNFBAppUnitTests/HostStubs/FirebaseInstallations/FirebaseInstallations.h +8 -0
- package/ios/RNFBAppUnitTests/HostStubs/RNFBAppModuleHostStub.m +55 -0
- package/ios/RNFBAppUnitTests/HostStubs/RNFBAppTurboModules.h +89 -0
- package/ios/RNFBAppUnitTests/HostStubs/RNFBAppTurboModules.mm +30 -0
- package/ios/RNFBAppUnitTests/HostStubs/React/RCTBridge.h +19 -0
- package/ios/RNFBAppUnitTests/HostStubs/React/RCTBridge.m +32 -0
- package/ios/RNFBAppUnitTests/HostStubs/React/RCTBridgeModule.h +19 -0
- package/ios/RNFBAppUnitTests/HostStubs/React/RCTConvert.h +28 -0
- package/ios/RNFBAppUnitTests/HostStubs/React/RCTConvert.m +23 -0
- package/ios/RNFBAppUnitTests/HostStubs/React/RCTEventEmitter.h +9 -0
- package/ios/RNFBAppUnitTests/HostStubs/React/RCTInvalidating.h +24 -0
- package/ios/RNFBAppUnitTests/HostStubs/React/RCTUtils.h +9 -0
- package/ios/RNFBAppUnitTests/HostStubs/module.modulemap +13 -0
- package/ios/RNFBAppUnitTests/RCTConvertFIRAppFacadeTests.m +61 -0
- package/ios/RNFBAppUnitTests/RCTConvertFIRAppTests.swift +73 -0
- package/ios/RNFBAppUnitTests/RCTConvertFIROptionsFacadeTests.m +57 -0
- package/ios/RNFBAppUnitTests/RCTConvertFIROptionsTests.swift +243 -0
- package/ios/RNFBAppUnitTests/RNFBAppCustomAuthDomainsFacadeTests.m +73 -0
- package/ios/RNFBAppUnitTests/RNFBAppCustomAuthDomainsTests.swift +70 -0
- package/ios/RNFBAppUnitTests/RNFBAppInitializeOptionsMapperTests.swift +190 -0
- package/ios/RNFBAppUnitTests/RNFBAppLogLevelFacadeTests.m +76 -0
- package/ios/RNFBAppUnitTests/RNFBAppLogLevelMapperTests.swift +59 -0
- package/ios/RNFBAppUnitTests/RNFBAppModuleFirebaseFacadeTests.m +215 -0
- package/ios/RNFBAppUnitTests/RNFBAppModuleFirebaseTests.swift +430 -0
- package/ios/RNFBAppUnitTests/RNFBAppModuleLifecycleTests.m +206 -0
- package/ios/RNFBAppUnitTests/RNFBAppModuleShellTests.mm +367 -0
- package/ios/RNFBAppUnitTests/RNFBAppUnitTests.xcodeproj/project.pbxproj +590 -0
- package/ios/RNFBAppUnitTests/RNFBAppUnitTests.xcodeproj/xcshareddata/xcschemes/RNFBAppUnitTests.xcscheme +69 -0
- package/ios/RNFBAppUnitTests/RNFBFirebaseAppClientTests.swift +165 -0
- package/ios/RNFBAppUnitTests/RNFBHandleMapStorageTests.swift +121 -0
- package/ios/RNFBAppUnitTests/RNFBHandleMapTests.m +238 -0
- package/ios/RNFBAppUnitTests/RNFBInitializeAppArgumentsTests.swift +256 -0
- package/ios/RNFBAppUnitTests/RNFBJSONImplementationTests.swift +126 -0
- package/ios/RNFBAppUnitTests/RNFBJSONTests.m +172 -0
- package/ios/RNFBAppUnitTests/RNFBMetaStorageTests.swift +106 -0
- package/ios/RNFBAppUnitTests/RNFBMetaTests.m +65 -0
- package/ios/RNFBAppUnitTests/RNFBNullSentinelDecodingTests.swift +286 -0
- package/ios/RNFBAppUnitTests/RNFBNullSentinelInterceptorTests.m +312 -0
- package/ios/RNFBAppUnitTests/RNFBPreferencesStorageTests.swift +105 -0
- package/ios/RNFBAppUnitTests/RNFBPreferencesTests.m +110 -0
- package/ios/RNFBAppUnitTests/RNFBRCTEventEmitterCoreTests.swift +163 -0
- package/ios/RNFBAppUnitTests/RNFBRCTEventEmitterFacadeTests.m +141 -0
- package/ios/RNFBAppUnitTests/RNFBSharedUtilsConfigFacadeTests.m +100 -0
- package/ios/RNFBAppUnitTests/RNFBSharedUtilsConfigTests.swift +234 -0
- package/ios/RNFBAppUnitTests/RNFBSharedUtilsFIRAppFacadeTests.m +145 -0
- package/ios/RNFBAppUnitTests/RNFBSharedUtilsFIRAppTests.swift +173 -0
- package/ios/RNFBAppUnitTests/RNFBSharedUtilsFormattingFacadeTests.m +38 -0
- package/ios/RNFBAppUnitTests/RNFBSharedUtilsFormattingTests.swift +82 -0
- package/ios/RNFBAppUnitTests/RNFBSharedUtilsNullSentinelTests.m +35 -0
- package/ios/RNFBAppUnitTests/RNFBSharedUtilsPromiseRejectionFacadeTests.m +107 -0
- package/ios/RNFBAppUnitTests/RNFBSharedUtilsPromiseRejectionTests.swift +133 -0
- package/ios/RNFBAppUnitTests/RNFBUtilsHelpersTests.swift +144 -0
- package/ios/RNFBAppUnitTests/RNFBUtilsModuleFacadeTests.m +72 -0
- package/ios/RNFBAppUnitTests/RNFBUtilsModuleShellTests.mm +282 -0
- package/ios/RNFBFirebase/Package.swift +53 -0
- package/ios/RNFBFirebase/Sources/RNFBFirebase/RNFBFirebase.swift +285 -0
- package/ios/RNFBFirebase/Sources/RNFBFirebaseBridge/Public/.gitkeep +0 -0
- package/ios/RNFBFirebase/Sources/RNFBFirebaseBridge/RNFBFirebaseBridge.m +169 -0
- package/ios/RNFBFirebase/Sources/RNFBFirebaseBridge/include/RNFBFirebaseBridge.h +52 -0
- package/ios/RNFBFirebaseUnitTests/RNFBAppDynamicFacadeTests.swift +240 -0
- package/{android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseAppRegistrar.java → ios/RNFBFirebaseUnitTests/RNFBFirebaseClientImport.swift} +22 -17
- package/ios/RNFBFirebaseUnitTests/RNFBFirebaseUnitTests.xcodeproj/project.pbxproj +588 -0
- package/ios/RNFBFirebaseUnitTests/RNFBFirebaseUnitTests.xcodeproj/xcshareddata/xcschemes/RNFBFirebaseUnitTests.xcscheme +83 -0
- package/ios_config.sh +50 -22
- package/lib/FirebaseApp.ts +10 -0
- package/lib/common/Base64.ts +10 -16
- package/lib/common/deeps.ts +3 -0
- package/lib/common/index.ts +20 -9
- package/lib/internal/FirebaseModule.ts +6 -3
- package/lib/internal/NativeModules.ts +4 -1
- package/lib/internal/RNFBNativeEventEmitter.ts +14 -5
- package/lib/internal/SharedEventEmitter.ts +5 -1
- package/lib/internal/asyncStorage.ts +7 -11
- package/lib/internal/index.ts +1 -0
- package/lib/internal/logger.ts +53 -43
- package/lib/internal/nativeModuleAndroidIos.ts +2 -40
- package/lib/internal/nativeModuleDebug.ts +97 -0
- package/lib/internal/nativeModuleWeb.ts +10 -40
- package/lib/internal/react-native-vendor-emitter.d.ts +11 -0
- package/lib/internal/registry/app.ts +8 -2
- package/lib/internal/registry/modular.ts +2 -2
- package/lib/internal/registry/nativeModule.ts +3 -3
- package/lib/internal/web/RNFBAppModule.ts +16 -15
- package/lib/internal/web/memidb/lib/FakeEventTarget.js +3 -1
- package/lib/types/app.ts +10 -3
- package/lib/types/internal.ts +19 -0
- package/lib/version.ts +1 -1
- package/package.json +9 -8
- package/plugin/build/ios/appDelegate.js +19 -9
- package/plugin/build/ios/podfile.js +16 -16
- package/plugin/build/pluginConfig.d.ts +4 -2
- package/plugin/src/ios/appDelegate.ts +45 -15
- package/plugin/src/ios/podfile.ts +20 -23
- package/plugin/src/pluginConfig.ts +4 -2
- package/android/src/main/java/io/invertase/firebase/common/TaskExecutorService.java +0 -124
- package/android/src/main/java/io/invertase/firebase/common/UniversalFirebaseModule.java +0 -62
- package/android/src/main/java/io/invertase/firebase/common/UniversalFirebasePreferences.java +0 -91
- package/android/src/reactnative/java/io/invertase/firebase/app/NativeRNFBTurboApp.java +0 -222
- package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseApp.java +0 -46
- package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseAppPackage.java +0 -49
- package/android/src/reactnative/java/io/invertase/firebase/common/RCTConvertFirebase.java +0 -191
- package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseEvent.java +0 -53
- package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseEventEmitter.java +0 -606
- package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseJSON.java +0 -107
- package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseMeta.java +0 -101
- package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseModule.java +0 -146
- package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebasePreferences.java +0 -96
- package/android/src/reactnative/java/io/invertase/firebase/common/SharedUtils.java +0 -441
- package/android/src/reactnative/java/io/invertase/firebase/utils/NativeRNFBTurboUtils.java +0 -223
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2016-present Invertase Limited & Contributors
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this library except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#import <XCTest/XCTest.h>
|
|
18
|
+
|
|
19
|
+
#import "RNFBHandleMapStorage-Swift.inc"
|
|
20
|
+
#import "RNFBSharedUtils.h"
|
|
21
|
+
|
|
22
|
+
@interface RNFBSharedUtilsNullSentinelTests : XCTestCase
|
|
23
|
+
@end
|
|
24
|
+
|
|
25
|
+
@implementation RNFBSharedUtilsNullSentinelTests
|
|
26
|
+
|
|
27
|
+
- (void)testFacadeForwardsSentinelAndNonContainer {
|
|
28
|
+
NSDictionary *sentinel = @{@"__rnfbNull" : @YES};
|
|
29
|
+
XCTAssertTrue([[RNFBSharedUtils decodeNullSentinels:sentinel] isKindOfClass:[NSNull class]]);
|
|
30
|
+
|
|
31
|
+
NSNumber *number = @42;
|
|
32
|
+
XCTAssertTrue([RNFBSharedUtils decodeNullSentinels:number] == number);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@end
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2016-present Invertase Limited & Contributors
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this library except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#import <XCTest/XCTest.h>
|
|
18
|
+
|
|
19
|
+
#import "RNFBHandleMapStorage-Swift.inc"
|
|
20
|
+
#import "RNFBSharedUtils.h"
|
|
21
|
+
|
|
22
|
+
@interface RNFBSharedUtilsPromiseRejectionFacadeTests : XCTestCase
|
|
23
|
+
@end
|
|
24
|
+
|
|
25
|
+
@implementation RNFBSharedUtilsPromiseRejectionFacadeTests
|
|
26
|
+
|
|
27
|
+
- (void)testFacadeExceptionPath {
|
|
28
|
+
NSException *exception = [NSException exceptionWithName:@"FacadeException"
|
|
29
|
+
reason:@"facade boom"
|
|
30
|
+
userInfo:nil];
|
|
31
|
+
|
|
32
|
+
__block NSString *capturedCode = nil;
|
|
33
|
+
__block NSString *capturedMessage = nil;
|
|
34
|
+
__block NSError *capturedError = nil;
|
|
35
|
+
|
|
36
|
+
[RNFBSharedUtils
|
|
37
|
+
rejectPromiseWithExceptionDict:^(NSString *code, NSString *message, NSError *error) {
|
|
38
|
+
capturedCode = code;
|
|
39
|
+
capturedMessage = message;
|
|
40
|
+
capturedError = error;
|
|
41
|
+
}
|
|
42
|
+
exception:exception];
|
|
43
|
+
|
|
44
|
+
XCTAssertEqualObjects(capturedCode, @"FacadeException");
|
|
45
|
+
XCTAssertEqualObjects(capturedMessage, @"facade boom");
|
|
46
|
+
XCTAssertEqualObjects(capturedError.domain, @"RNFBErrorDomain");
|
|
47
|
+
XCTAssertEqual(capturedError.code, 666);
|
|
48
|
+
XCTAssertEqualObjects(capturedError.userInfo[@"fatal"], @YES);
|
|
49
|
+
XCTAssertEqualObjects(capturedError.userInfo[@"code"], @"unknown");
|
|
50
|
+
XCTAssertEqualObjects(capturedError.userInfo[@"message"], @"facade boom");
|
|
51
|
+
XCTAssertEqualObjects(capturedError.userInfo[@"nativeErrorCode"], @"FacadeException");
|
|
52
|
+
XCTAssertEqualObjects(capturedError.userInfo[@"nativeErrorMessage"], @"facade boom");
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
- (void)testFacadeNSErrorPath {
|
|
56
|
+
NSError *source = [NSError errorWithDomain:@"SourceDomain"
|
|
57
|
+
code:7
|
|
58
|
+
userInfo:@{NSLocalizedDescriptionKey : @"ns fail"}];
|
|
59
|
+
|
|
60
|
+
__block NSString *capturedCode = nil;
|
|
61
|
+
__block NSString *capturedMessage = nil;
|
|
62
|
+
__block NSError *capturedError = nil;
|
|
63
|
+
|
|
64
|
+
[RNFBSharedUtils
|
|
65
|
+
rejectPromiseWithNSError:^(NSString *code, NSString *message, NSError *error) {
|
|
66
|
+
capturedCode = code;
|
|
67
|
+
capturedMessage = message;
|
|
68
|
+
capturedError = error;
|
|
69
|
+
}
|
|
70
|
+
error:source];
|
|
71
|
+
|
|
72
|
+
XCTAssertEqualObjects(capturedCode, @"unknown");
|
|
73
|
+
XCTAssertEqualObjects(capturedMessage, @"ns fail");
|
|
74
|
+
XCTAssertEqualObjects(capturedError.domain, @"RNFBErrorDomain");
|
|
75
|
+
XCTAssertEqual(capturedError.code, 666);
|
|
76
|
+
XCTAssertEqualObjects(capturedError.userInfo[@"fatal"], @NO);
|
|
77
|
+
XCTAssertEqualObjects(capturedError.userInfo[@"nativeErrorCode"], @7);
|
|
78
|
+
XCTAssertEqualObjects(capturedError.userInfo[@"nativeErrorMessage"], @"ns fail");
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
- (void)testFacadeUserInfoPath {
|
|
82
|
+
NSMutableDictionary *userInfo = [@{
|
|
83
|
+
@"code" : @"storage/unknown",
|
|
84
|
+
@"message" : @"user info reject",
|
|
85
|
+
} mutableCopy];
|
|
86
|
+
|
|
87
|
+
__block NSString *capturedCode = nil;
|
|
88
|
+
__block NSString *capturedMessage = nil;
|
|
89
|
+
__block NSError *capturedError = nil;
|
|
90
|
+
|
|
91
|
+
[RNFBSharedUtils
|
|
92
|
+
rejectPromiseWithUserInfo:^(NSString *code, NSString *message, NSError *error) {
|
|
93
|
+
capturedCode = code;
|
|
94
|
+
capturedMessage = message;
|
|
95
|
+
capturedError = error;
|
|
96
|
+
}
|
|
97
|
+
userInfo:userInfo];
|
|
98
|
+
|
|
99
|
+
XCTAssertEqualObjects(capturedCode, @"storage/unknown");
|
|
100
|
+
XCTAssertEqualObjects(capturedMessage, @"user info reject");
|
|
101
|
+
XCTAssertEqualObjects(capturedError.domain, @"RNFBErrorDomain");
|
|
102
|
+
XCTAssertEqual(capturedError.code, 666);
|
|
103
|
+
XCTAssertEqualObjects(capturedError.userInfo[@"code"], @"storage/unknown");
|
|
104
|
+
XCTAssertEqualObjects(capturedError.userInfo[@"message"], @"user info reject");
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
@end
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2016-present Invertase Limited & Contributors
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this library except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import Foundation
|
|
18
|
+
import XCTest
|
|
19
|
+
|
|
20
|
+
final class RNFBSharedUtilsPromiseRejectionTests: XCTestCase {
|
|
21
|
+
private let expectedDomain = "RNFBErrorDomain"
|
|
22
|
+
private let expectedCode = 666
|
|
23
|
+
|
|
24
|
+
func testExceptionPathRejectArgsAndUserInfo() {
|
|
25
|
+
let exception = NSException(
|
|
26
|
+
name: NSExceptionName("SomeException"),
|
|
27
|
+
reason: "boom reason",
|
|
28
|
+
userInfo: nil
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
var capturedCode: String?
|
|
32
|
+
var capturedMessage: String?
|
|
33
|
+
var capturedError: NSError?
|
|
34
|
+
|
|
35
|
+
RNFBSharedUtilsPromiseRejection.rejectPromise(withException: { code, message, error in
|
|
36
|
+
capturedCode = code
|
|
37
|
+
capturedMessage = message
|
|
38
|
+
capturedError = error as NSError?
|
|
39
|
+
}, exception: exception)
|
|
40
|
+
|
|
41
|
+
XCTAssertEqual(capturedCode, "SomeException")
|
|
42
|
+
XCTAssertEqual(capturedMessage, "boom reason")
|
|
43
|
+
XCTAssertEqual(capturedError?.domain, expectedDomain)
|
|
44
|
+
XCTAssertEqual(capturedError?.code, expectedCode)
|
|
45
|
+
|
|
46
|
+
let userInfo = capturedError?.userInfo ?? [:]
|
|
47
|
+
XCTAssertEqual(userInfo["fatal"] as? Bool, true)
|
|
48
|
+
XCTAssertEqual(userInfo["code"] as? String, "unknown")
|
|
49
|
+
XCTAssertEqual(userInfo["message"] as? String, "boom reason")
|
|
50
|
+
XCTAssertEqual(userInfo["nativeErrorCode"] as? String, "SomeException")
|
|
51
|
+
XCTAssertEqual(userInfo["nativeErrorMessage"] as? String, "boom reason")
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
func testExceptionPathNilReasonOmitsMessageKeys() {
|
|
55
|
+
let exception = NSException(
|
|
56
|
+
name: NSExceptionName("NilReason"),
|
|
57
|
+
reason: nil,
|
|
58
|
+
userInfo: nil
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
var capturedMessage: String?
|
|
62
|
+
var capturedError: NSError?
|
|
63
|
+
|
|
64
|
+
RNFBSharedUtilsPromiseRejection.rejectPromise(withException: { _, message, error in
|
|
65
|
+
capturedMessage = message
|
|
66
|
+
capturedError = error as NSError?
|
|
67
|
+
}, exception: exception)
|
|
68
|
+
|
|
69
|
+
XCTAssertNil(capturedMessage)
|
|
70
|
+
let userInfo = capturedError?.userInfo ?? [:]
|
|
71
|
+
XCTAssertNil(userInfo["message"])
|
|
72
|
+
XCTAssertNil(userInfo["nativeErrorMessage"])
|
|
73
|
+
XCTAssertEqual(userInfo["fatal"] as? Bool, true)
|
|
74
|
+
XCTAssertEqual(userInfo["code"] as? String, "unknown")
|
|
75
|
+
XCTAssertEqual(userInfo["nativeErrorCode"] as? String, "NilReason")
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
func testNSErrorPathRejectArgsAndUserInfo() {
|
|
79
|
+
let source = NSError(
|
|
80
|
+
domain: "SourceDomain",
|
|
81
|
+
code: 42,
|
|
82
|
+
userInfo: [NSLocalizedDescriptionKey: "localized fail"]
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
var capturedCode: String?
|
|
86
|
+
var capturedMessage: String?
|
|
87
|
+
var capturedError: NSError?
|
|
88
|
+
|
|
89
|
+
RNFBSharedUtilsPromiseRejection.rejectPromise(withNSError: { code, message, error in
|
|
90
|
+
capturedCode = code
|
|
91
|
+
capturedMessage = message
|
|
92
|
+
capturedError = error as NSError?
|
|
93
|
+
}, error: source)
|
|
94
|
+
|
|
95
|
+
XCTAssertEqual(capturedCode, "unknown")
|
|
96
|
+
XCTAssertEqual(capturedMessage, "localized fail")
|
|
97
|
+
XCTAssertEqual(capturedError?.domain, expectedDomain)
|
|
98
|
+
XCTAssertEqual(capturedError?.code, expectedCode)
|
|
99
|
+
|
|
100
|
+
let userInfo = capturedError?.userInfo ?? [:]
|
|
101
|
+
XCTAssertEqual(userInfo["fatal"] as? Bool, false)
|
|
102
|
+
XCTAssertEqual(userInfo["code"] as? String, "unknown")
|
|
103
|
+
XCTAssertEqual(userInfo["message"] as? String, "localized fail")
|
|
104
|
+
XCTAssertEqual(userInfo["nativeErrorCode"] as? NSNumber, NSNumber(value: 42))
|
|
105
|
+
XCTAssertEqual(userInfo["nativeErrorMessage"] as? String, "localized fail")
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
func testUserInfoPathRejectArgsAndError() {
|
|
109
|
+
let userInfo: NSMutableDictionary = [
|
|
110
|
+
"code": "auth/invalid",
|
|
111
|
+
"message": "bad creds",
|
|
112
|
+
"extra": "kept",
|
|
113
|
+
]
|
|
114
|
+
|
|
115
|
+
var capturedCode: String?
|
|
116
|
+
var capturedMessage: String?
|
|
117
|
+
var capturedError: NSError?
|
|
118
|
+
|
|
119
|
+
RNFBSharedUtilsPromiseRejection.rejectPromise(withUserInfo: { code, message, error in
|
|
120
|
+
capturedCode = code
|
|
121
|
+
capturedMessage = message
|
|
122
|
+
capturedError = error as NSError?
|
|
123
|
+
}, userInfo: userInfo)
|
|
124
|
+
|
|
125
|
+
XCTAssertEqual(capturedCode, "auth/invalid")
|
|
126
|
+
XCTAssertEqual(capturedMessage, "bad creds")
|
|
127
|
+
XCTAssertEqual(capturedError?.domain, expectedDomain)
|
|
128
|
+
XCTAssertEqual(capturedError?.code, expectedCode)
|
|
129
|
+
XCTAssertEqual(capturedError?.userInfo["code"] as? String, "auth/invalid")
|
|
130
|
+
XCTAssertEqual(capturedError?.userInfo["message"] as? String, "bad creds")
|
|
131
|
+
XCTAssertEqual(capturedError?.userInfo["extra"] as? String, "kept")
|
|
132
|
+
}
|
|
133
|
+
}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2016-present Invertase Limited & Contributors
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this library except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import Foundation
|
|
18
|
+
import XCTest
|
|
19
|
+
|
|
20
|
+
final class RNFBUtilsHelpersTests: XCTestCase {
|
|
21
|
+
func testPathForDirectoryReturnsSearchPathFirstObject() {
|
|
22
|
+
let caches = RNFBUtilsHelpers.path(
|
|
23
|
+
forDirectory: Int32(FileManager.SearchPathDirectory.cachesDirectory.rawValue)
|
|
24
|
+
)
|
|
25
|
+
let expected = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true)
|
|
26
|
+
.first
|
|
27
|
+
XCTAssertEqual(caches, expected)
|
|
28
|
+
XCTAssertNotNil(caches)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
func testUtilsConstantsDictionaryIncludesRequiredKeys() {
|
|
32
|
+
let constants = RNFBUtilsHelpers.utilsConstantsDictionary(
|
|
33
|
+
bundlePath: "/App.app",
|
|
34
|
+
appVersion: "1.2.3",
|
|
35
|
+
pathProvider: { directory in "path-\(directory)" },
|
|
36
|
+
temporaryDirectory: "/tmp/rnfb"
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
XCTAssertEqual(constants["isRunningInTestLab"] as? Bool, false)
|
|
40
|
+
XCTAssertEqual(constants["MAIN_BUNDLE"] as? String, "/App.app")
|
|
41
|
+
XCTAssertEqual(
|
|
42
|
+
constants["CACHES_DIRECTORY"] as? String,
|
|
43
|
+
"path-\(FileManager.SearchPathDirectory.cachesDirectory.rawValue)"
|
|
44
|
+
)
|
|
45
|
+
XCTAssertEqual(
|
|
46
|
+
constants["DOCUMENT_DIRECTORY"] as? String,
|
|
47
|
+
"path-\(FileManager.SearchPathDirectory.documentDirectory.rawValue)"
|
|
48
|
+
)
|
|
49
|
+
XCTAssertEqual(
|
|
50
|
+
constants["PICTURES_DIRECTORY"] as? String,
|
|
51
|
+
"path-\(FileManager.SearchPathDirectory.picturesDirectory.rawValue)"
|
|
52
|
+
)
|
|
53
|
+
XCTAssertEqual(
|
|
54
|
+
constants["MOVIES_DIRECTORY"] as? String,
|
|
55
|
+
"path-\(FileManager.SearchPathDirectory.moviesDirectory.rawValue)"
|
|
56
|
+
)
|
|
57
|
+
XCTAssertEqual(constants["TEMP_DIRECTORY"] as? String, "/tmp/rnfb")
|
|
58
|
+
XCTAssertEqual(
|
|
59
|
+
constants["LIBRARY_DIRECTORY"] as? String,
|
|
60
|
+
"path-\(FileManager.SearchPathDirectory.libraryDirectory.rawValue)"
|
|
61
|
+
)
|
|
62
|
+
XCTAssertEqual(constants["appVersion"] as? String, "1.2.3")
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
func testUtilsConstantsDictionaryOmitsAppVersionWhenMissingEmptyOrNonString() {
|
|
66
|
+
let pathProvider: RNFBUtilsPathProvider = { _ in "/p" }
|
|
67
|
+
|
|
68
|
+
let missing = RNFBUtilsHelpers.utilsConstantsDictionary(
|
|
69
|
+
bundlePath: "/b",
|
|
70
|
+
appVersion: nil,
|
|
71
|
+
pathProvider: pathProvider,
|
|
72
|
+
temporaryDirectory: "/t"
|
|
73
|
+
)
|
|
74
|
+
XCTAssertNil(missing["appVersion"])
|
|
75
|
+
|
|
76
|
+
let empty = RNFBUtilsHelpers.utilsConstantsDictionary(
|
|
77
|
+
bundlePath: "/b",
|
|
78
|
+
appVersion: "",
|
|
79
|
+
pathProvider: pathProvider,
|
|
80
|
+
temporaryDirectory: "/t"
|
|
81
|
+
)
|
|
82
|
+
XCTAssertNil(empty["appVersion"])
|
|
83
|
+
|
|
84
|
+
let nonString = RNFBUtilsHelpers.utilsConstantsDictionary(
|
|
85
|
+
bundlePath: "/b",
|
|
86
|
+
appVersion: NSNumber(value: 42),
|
|
87
|
+
pathProvider: pathProvider,
|
|
88
|
+
temporaryDirectory: "/t"
|
|
89
|
+
)
|
|
90
|
+
XCTAssertNil(nonString["appVersion"])
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
func testUtilsConstantsDictionaryDefaultUsesMainBundle() {
|
|
94
|
+
let constants = RNFBUtilsHelpers.utilsConstantsDictionary()
|
|
95
|
+
XCTAssertEqual(constants["MAIN_BUNDLE"] as? String, Bundle.main.bundlePath)
|
|
96
|
+
XCTAssertEqual(constants["isRunningInTestLab"] as? Bool, false)
|
|
97
|
+
XCTAssertNotNil(constants["CACHES_DIRECTORY"])
|
|
98
|
+
XCTAssertNotNil(constants["TEMP_DIRECTORY"])
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
func testIsRemoteAssetPrefixChecks() {
|
|
102
|
+
XCTAssertTrue(RNFBUtilsHelpers.isRemoteAsset("assets-library://asset/foo"))
|
|
103
|
+
XCTAssertTrue(RNFBUtilsHelpers.isRemoteAsset("ph://LOCAL-ID"))
|
|
104
|
+
XCTAssertFalse(RNFBUtilsHelpers.isRemoteAsset("file:///tmp/x.jpg"))
|
|
105
|
+
XCTAssertFalse(RNFBUtilsHelpers.isRemoteAsset(""))
|
|
106
|
+
XCTAssertFalse(RNFBUtilsHelpers.isRemoteAsset(nil))
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
func testUnusedIsHeicCaseInsensitiveAndNilMessaging() {
|
|
110
|
+
XCTAssertTrue(RNFBUtilsHelpers.unusedIsHeic("photo.heic"))
|
|
111
|
+
XCTAssertTrue(RNFBUtilsHelpers.unusedIsHeic("photo.HEIC"))
|
|
112
|
+
XCTAssertTrue(RNFBUtilsHelpers.unusedIsHeic("photo.Heic"))
|
|
113
|
+
XCTAssertFalse(RNFBUtilsHelpers.unusedIsHeic("photo.jpg"))
|
|
114
|
+
XCTAssertFalse(RNFBUtilsHelpers.unusedIsHeic("heic"))
|
|
115
|
+
// Pre-port ObjC nil messaging → YES
|
|
116
|
+
XCTAssertTrue(RNFBUtilsHelpers.unusedIsHeic(nil))
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
func testValueForKeyFromQueryItemsUsesNamePredicateAndFirstObject() {
|
|
120
|
+
let items = [
|
|
121
|
+
URLQueryItem(name: "other", value: "a"),
|
|
122
|
+
URLQueryItem(name: "id", value: "first-id"),
|
|
123
|
+
URLQueryItem(name: "id", value: "second-id"),
|
|
124
|
+
]
|
|
125
|
+
|
|
126
|
+
XCTAssertEqual(
|
|
127
|
+
RNFBUtilsHelpers.value(forKey: "id", fromQueryItems: items),
|
|
128
|
+
"first-id"
|
|
129
|
+
)
|
|
130
|
+
XCTAssertEqual(
|
|
131
|
+
RNFBUtilsHelpers.value(forKey: "other", fromQueryItems: items),
|
|
132
|
+
"a"
|
|
133
|
+
)
|
|
134
|
+
XCTAssertNil(RNFBUtilsHelpers.value(forKey: "missing", fromQueryItems: items))
|
|
135
|
+
XCTAssertNil(RNFBUtilsHelpers.value(forKey: "id", fromQueryItems: nil))
|
|
136
|
+
XCTAssertNil(RNFBUtilsHelpers.value(forKey: "id", fromQueryItems: []))
|
|
137
|
+
XCTAssertNil(
|
|
138
|
+
RNFBUtilsHelpers.value(
|
|
139
|
+
forKey: "id",
|
|
140
|
+
fromQueryItems: [URLQueryItem(name: "id", value: nil)]
|
|
141
|
+
)
|
|
142
|
+
)
|
|
143
|
+
}
|
|
144
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2016-present Invertase Limited & Contributors
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this library except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#import <XCTest/XCTest.h>
|
|
18
|
+
|
|
19
|
+
#import "RNFBHandleMapStorage-Swift.inc"
|
|
20
|
+
#import "RNFBUtilsModule.h"
|
|
21
|
+
|
|
22
|
+
@interface RNFBUtilsModuleFacadeTests : XCTestCase
|
|
23
|
+
@end
|
|
24
|
+
|
|
25
|
+
@implementation RNFBUtilsModuleFacadeTests
|
|
26
|
+
|
|
27
|
+
- (void)testFacadePathForDirectoryMatchesSearchPath {
|
|
28
|
+
NSString *path = [RNFBUtilsHelpers pathForDirectory:(int)NSCachesDirectory];
|
|
29
|
+
NSString *expected =
|
|
30
|
+
[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
|
|
31
|
+
XCTAssertEqualObjects(path, expected);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
- (void)testFacadeUtilsConstantsDictionaryKeys {
|
|
35
|
+
NSDictionary *constants = [RNFBUtilsHelpers
|
|
36
|
+
utilsConstantsDictionaryWithBundlePath:@"/Bundle.app"
|
|
37
|
+
appVersion:@"9.9.9"
|
|
38
|
+
pathProvider:^NSString *(int directory) {
|
|
39
|
+
return [NSString stringWithFormat:@"dir-%d", directory];
|
|
40
|
+
}
|
|
41
|
+
temporaryDirectory:@"/tmp/facade"];
|
|
42
|
+
|
|
43
|
+
XCTAssertEqualObjects(constants[@"isRunningInTestLab"], @NO);
|
|
44
|
+
XCTAssertEqualObjects(constants[@"MAIN_BUNDLE"], @"/Bundle.app");
|
|
45
|
+
XCTAssertEqualObjects(constants[@"TEMP_DIRECTORY"], @"/tmp/facade");
|
|
46
|
+
XCTAssertEqualObjects(constants[@"appVersion"], @"9.9.9");
|
|
47
|
+
XCTAssertEqualObjects(constants[@"CACHES_DIRECTORY"],
|
|
48
|
+
([NSString stringWithFormat:@"dir-%d", (int)NSCachesDirectory]));
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
- (void)testFacadeIsRemoteAsset {
|
|
52
|
+
XCTAssertTrue([RNFBUtilsModule isRemoteAsset:@"assets-library://x"]);
|
|
53
|
+
XCTAssertTrue([RNFBUtilsModule isRemoteAsset:@"ph://y"]);
|
|
54
|
+
XCTAssertFalse([RNFBUtilsModule isRemoteAsset:@"/local/file.jpg"]);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
- (void)testFacadeUnusedIsHeic {
|
|
58
|
+
XCTAssertTrue([RNFBUtilsModule unused_isHeic:@"a.HEIC"]);
|
|
59
|
+
XCTAssertFalse([RNFBUtilsModule unused_isHeic:@"a.png"]);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
- (void)testFacadeValueForKeyFromQueryItems {
|
|
63
|
+
NSArray *items = @[
|
|
64
|
+
[NSURLQueryItem queryItemWithName:@"id" value:@"asset-1"],
|
|
65
|
+
[NSURLQueryItem queryItemWithName:@"w" value:@"100"],
|
|
66
|
+
];
|
|
67
|
+
XCTAssertEqualObjects([RNFBUtilsModule valueForKey:@"id" fromQueryItems:items], @"asset-1");
|
|
68
|
+
XCTAssertEqualObjects([RNFBUtilsModule valueForKey:@"w" fromQueryItems:items], @"100");
|
|
69
|
+
XCTAssertNil([RNFBUtilsModule valueForKey:@"missing" fromQueryItems:items]);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
@end
|