FIRFirebaseUserAgentTests.m 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  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. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/visionos"]);
  32. #elif defined(TARGET_OS_VISION) && TARGET_OS_VISION
  33. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/ios"]);
  34. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/tvos"]);
  35. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/macos"]);
  36. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/watchos"]);
  37. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/maccatalyst"]);
  38. XCTAssertTrue([[FIRApp firebaseUserAgent] containsString:@"apple-platform/visionos"]);
  39. #elif TARGET_OS_IOS
  40. XCTAssertTrue([[FIRApp firebaseUserAgent] containsString:@"apple-platform/ios"]);
  41. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/tvos"]);
  42. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/macos"]);
  43. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/watchos"]);
  44. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/maccatalyst"]);
  45. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/visionos"]);
  46. #endif // TARGET_OS_MACCATALYST
  47. #if TARGET_OS_TV
  48. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/ios"]);
  49. XCTAssertTrue([[FIRApp firebaseUserAgent] containsString:@"apple-platform/tvos"]);
  50. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/macos"]);
  51. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/watchos"]);
  52. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/maccatalyst"]);
  53. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/visionos"]);
  54. #endif // TARGET_OS_TV
  55. #if TARGET_OS_OSX
  56. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/ios"]);
  57. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/tvos"]);
  58. XCTAssertTrue([[FIRApp firebaseUserAgent] containsString:@"apple-platform/macos"]);
  59. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/watchos"]);
  60. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/maccatalyst"]);
  61. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/visionos"]);
  62. #endif // TARGET_OS_OSX
  63. #if TARGET_OS_WATCH
  64. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/ios"]);
  65. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/tvos"]);
  66. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/macos"]);
  67. XCTAssertTrue([[FIRApp firebaseUserAgent] containsString:@"apple-platform/watchos"]);
  68. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/maccatalyst"]);
  69. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"apple-platform/visionos"]);
  70. #endif // TARGET_OS_WATCH
  71. }
  72. - (void)testFirebaseUserAgent_DeploymentType {
  73. #if SWIFT_PACKAGE
  74. NSString *deploymentType = @"swiftpm";
  75. #elif FIREBASE_BUILD_CARTHAGE
  76. NSString *deploymentType = @"carthage";
  77. #elif FIREBASE_BUILD_ZIP_FILE
  78. NSString *deploymentType = @"zip";
  79. #else
  80. NSString *deploymentType = @"cocoapods";
  81. #endif
  82. NSString *expectedComponent = [NSString stringWithFormat:@"deploy/%@", deploymentType];
  83. XCTAssertTrue([[FIRApp firebaseUserAgent] containsString:expectedComponent]);
  84. }
  85. - (void)testFirebaseUserAgent_DeviceModel {
  86. NSString *expectedComponent =
  87. [NSString stringWithFormat:@"device/%@", [GULAppEnvironmentUtil deviceModel]];
  88. XCTAssertTrue([[FIRApp firebaseUserAgent] containsString:expectedComponent]);
  89. }
  90. - (void)testFirebaseUserAgent_OSVersion {
  91. NSString *expectedComponent =
  92. [NSString stringWithFormat:@"os-version/%@", [GULAppEnvironmentUtil systemVersion]];
  93. XCTAssertTrue([[FIRApp firebaseUserAgent] containsString:expectedComponent]);
  94. }
  95. - (void)testFirebaseUserAgent_IsFromAppStore {
  96. NSString *appStoreValue = [GULAppEnvironmentUtil isFromAppStore] ? @"true" : @"false";
  97. NSString *expectedComponent = [NSString stringWithFormat:@"appstore/%@", appStoreValue];
  98. XCTAssertTrue([[FIRApp firebaseUserAgent] containsString:expectedComponent]);
  99. }
  100. - (void)testRegisterLibrary_InvalidLibraryName {
  101. NSString *originalFirebaseUserAgent = [FIRApp firebaseUserAgent];
  102. [FIRApp registerLibrary:@"Oops>" withVersion:@"1.0.0"];
  103. XCTAssertTrue([[FIRApp firebaseUserAgent] isEqualToString:originalFirebaseUserAgent]);
  104. }
  105. - (void)testRegisterLibrary_InvalidLibraryVersion {
  106. NSString *originalFirebaseUserAgent = [FIRApp firebaseUserAgent];
  107. [FIRApp registerLibrary:@"ValidName" withVersion:@"1.0.0+"];
  108. XCTAssertTrue([[FIRApp firebaseUserAgent] isEqualToString:originalFirebaseUserAgent]);
  109. }
  110. - (void)testRegisterLibrary_SingleLibrary {
  111. [FIRApp registerLibrary:@"ValidName" withVersion:@"1.0.0"];
  112. XCTAssertTrue([[FIRApp firebaseUserAgent] containsString:@"ValidName/1.0.0"]);
  113. }
  114. - (void)testRegisterLibrary_MultipleLibraries {
  115. [FIRApp registerLibrary:@"ValidName" withVersion:@"1.0.0"];
  116. [FIRApp registerLibrary:@"ValidName2" withVersion:@"2.0.0"];
  117. XCTAssertTrue([[FIRApp firebaseUserAgent] containsString:@"ValidName/1.0.0 ValidName2/2.0.0"]);
  118. }
  119. - (void)testRegisterLibrary_RegisteringConformingLibrary {
  120. Class testClass = [FIRTestClass class];
  121. [FIRApp registerInternalLibrary:testClass withName:@"ValidName" withVersion:@"1.0.0"];
  122. XCTAssertTrue([[FIRApp firebaseUserAgent] containsString:@"ValidName/1.0.0"]);
  123. }
  124. - (void)testRegisterLibrary_RegisteringNonConformingLibrary {
  125. XCTAssertThrows([FIRApp registerInternalLibrary:[NSString class]
  126. withName:@"InvalidLibrary"
  127. withVersion:@"1.0.0"]);
  128. XCTAssertFalse([[FIRApp firebaseUserAgent] containsString:@"InvalidLibrary`/1.0.0"]);
  129. }
  130. @end