FIRFirebaseUserAgentTests.m 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. // Copyright 2022 Google LLC
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. #import <GoogleUtilities/GULAppEnvironmentUtil.h>
  15. #import <XCTest/XCTest.h>
  16. #import "FirebaseCore/Tests/Unit/FIRTestCase.h"
  17. #import "FirebaseCore/Tests/Unit/FIRTestComponents.h"
  18. #import "FirebaseCore/Extension/FIRAppInternal.h"
  19. @interface FIRFirebaseUserAgentTests : FIRTestCase
  20. @end
  21. @implementation FIRFirebaseUserAgentTests
  22. - (void)testFirebaseUserAgent_ApplePlatformFlag {
  23. // When a Catalyst app is run on macOS then both `TARGET_OS_MACCATALYST` and `TARGET_OS_IOS` are
  24. // `true`.
  25. #if TARGET_OS_MACCATALYST
  26. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/ios"]);
  27. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/tvos"]);
  28. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/macos"]);
  29. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/watchos"]);
  30. XCTAssertTrue([[FIRApp firebaseUserAgent] containsString:@"apple-platform/maccatalyst"]);
  31. #elif TARGET_OS_IOS
  32. XCTAssertTrue([[FIRApp firebaseUserAgent] containsString:@"apple-platform/ios"]);
  33. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/tvos"]);
  34. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/macos"]);
  35. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/watchos"]);
  36. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/maccatalyst"]);
  37. #endif // TARGET_OS_MACCATALYST
  38. #if TARGET_OS_TV
  39. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/ios"]);
  40. XCTAssertTrue([[FIRApp firebaseUserAgent] containsString:@"apple-platform/tvos"]);
  41. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/macos"]);
  42. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/watchos"]);
  43. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/maccatalyst"]);
  44. #endif // TARGET_OS_TV
  45. #if TARGET_OS_OSX
  46. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/ios"]);
  47. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/tvos"]);
  48. XCTAssertTrue([[FIRApp firebaseUserAgent] containsString:@"apple-platform/macos"]);
  49. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/watchos"]);
  50. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/maccatalyst"]);
  51. #endif // TARGET_OS_OSX
  52. #if TARGET_OS_WATCH
  53. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/ios"]);
  54. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/tvos"]);
  55. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/macos"]);
  56. XCTAssertTrue([[FIRApp firebaseUserAgent] containsString:@"apple-platform/watchos"]);
  57. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/maccatalyst"]);
  58. #endif // TARGET_OS_WATCH
  59. }
  60. - (void)testFirebaseUserAgent_DeploymentType {
  61. #if SWIFT_PACKAGE
  62. NSString *deploymentType = @"swiftpm";
  63. #elif FIREBASE_BUILD_CARTHAGE
  64. NSString *deploymentType = @"carthage";
  65. #elif FIREBASE_BUILD_ZIP_FILE
  66. NSString *deploymentType = @"zip";
  67. #else
  68. NSString *deploymentType = @"cocoapods";
  69. #endif
  70. NSString *expectedComponent = [NSString stringWithFormat:@"deploy/%@", deploymentType];
  71. XCTAssertTrue([[FIRApp firebaseUserAgent] containsString:expectedComponent]);
  72. }
  73. - (void)testFirebaseUserAgent_DeviceModel {
  74. NSString *expectedComponent =
  75. [NSString stringWithFormat:@"device/%@", [GULAppEnvironmentUtil deviceModel]];
  76. XCTAssertTrue([[FIRApp firebaseUserAgent] containsString:expectedComponent]);
  77. }
  78. - (void)testFirebaseUserAgent_OSVersion {
  79. NSString *expectedComponent =
  80. [NSString stringWithFormat:@"os-version/%@", [GULAppEnvironmentUtil systemVersion]];
  81. XCTAssertTrue([[FIRApp firebaseUserAgent] containsString:expectedComponent]);
  82. }
  83. - (void)testFirebaseUserAgent_IsFromAppStore {
  84. NSString *appStoreValue = [GULAppEnvironmentUtil isFromAppStore] ? @"true" : @"false";
  85. NSString *expectedComponent = [NSString stringWithFormat:@"appstore/%@", appStoreValue];
  86. XCTAssertTrue([[FIRApp firebaseUserAgent] containsString:expectedComponent]);
  87. }
  88. - (void)testRegisterLibrary_InvalidLibraryName {
  89. NSString *originalFirebaseUserAgent = [FIRApp firebaseUserAgent];
  90. [FIRApp registerLibrary:@"Oops>" withVersion:@"1.0.0"];
  91. XCTAssertTrue([[FIRApp firebaseUserAgent] isEqualToString:originalFirebaseUserAgent]);
  92. }
  93. - (void)testRegisterLibrary_InvalidLibraryVersion {
  94. NSString *originalFirebaseUserAgent = [FIRApp firebaseUserAgent];
  95. [FIRApp registerLibrary:@"ValidName" withVersion:@"1.0.0+"];
  96. XCTAssertTrue([[FIRApp firebaseUserAgent] isEqualToString:originalFirebaseUserAgent]);
  97. }
  98. - (void)testRegisterLibrary_SingleLibrary {
  99. [FIRApp registerLibrary:@"ValidName" withVersion:@"1.0.0"];
  100. XCTAssertTrue([[FIRApp firebaseUserAgent] containsString:@"ValidName/1.0.0"]);
  101. }
  102. - (void)testRegisterLibrary_MultipleLibraries {
  103. [FIRApp registerLibrary:@"ValidName" withVersion:@"1.0.0"];
  104. [FIRApp registerLibrary:@"ValidName2" withVersion:@"2.0.0"];
  105. XCTAssertTrue([[FIRApp firebaseUserAgent] containsString:@"ValidName/1.0.0 ValidName2/2.0.0"]);
  106. }
  107. - (void)testRegisterLibrary_RegisteringConformingLibrary {
  108. Class testClass = [FIRTestClass class];
  109. [FIRApp registerInternalLibrary:testClass withName:@"ValidName" withVersion:@"1.0.0"];
  110. XCTAssertTrue([[FIRApp firebaseUserAgent] containsString:@"ValidName/1.0.0"]);
  111. }
  112. - (void)testRegisterLibrary_RegisteringNonConformingLibrary {
  113. XCTAssertThrows([FIRApp registerInternalLibrary:[NSString class]
  114. withName:@"InvalidLibrary"
  115. withVersion:@"1.0.0"]);
  116. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"InvalidLibrary`/1.0.0"]);
  117. }
  118. @end