GIDSignInButtonTest.m 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. // Copyright 2021 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 <UIKit/UIKit.h>
  15. #import <XCTest/XCTest.h>
  16. #import "GoogleSignIn/Sources/GIDSignInButton_Private.h"
  17. #import "GoogleSignIn/Sources/GIDSignIn_Private.h"
  18. #ifdef SWIFT_PACKAGE
  19. @import OCMock;
  20. #else
  21. #import <OCMock/OCMock.h>
  22. #endif
  23. static NSString *const kWidthConstraintIdentifier =
  24. @"buttonWidth - auto generated by GIDSignInButton";
  25. static NSString *const kHeightConstraintIdentifier =
  26. @"buttonHeight - auto generated by GIDSignInButton";
  27. static NSString * const kAppBundleId = @"FakeBundleID";
  28. @interface GIDSignInButton (Test)
  29. - (void)updateUI;
  30. @end
  31. @interface GIDSignInButtonTest : XCTestCase
  32. @end
  33. @implementation GIDSignInButtonTest
  34. #pragma mark - Tests
  35. // Verify the default style and color scheme for the button.
  36. - (void)testDefaultButtonSettings {
  37. GIDSignInButton *button = [[GIDSignInButton alloc] init];
  38. XCTAssertTrue(button.style == kGIDSignInButtonStyleStandard,
  39. @"Default button style is incorrect");
  40. XCTAssertTrue(button.colorScheme == kGIDSignInButtonColorSchemeLight,
  41. @"Default button color scheme is incorrect");
  42. }
  43. // Verify that setting the button's style/color scheme will refresh the image.
  44. - (void)testRefreshImage {
  45. GIDSignInButton *button = [[GIDSignInButton alloc] init];
  46. id buttonMock = OCMPartialMock(button);
  47. [[buttonMock expect] updateUI];
  48. [(GIDSignInButton *)buttonMock setStyle:kGIDSignInButtonStyleWide];
  49. [buttonMock verify];
  50. [[buttonMock expect] updateUI];
  51. [buttonMock setColorScheme:kGIDSignInButtonColorSchemeDark];
  52. [buttonMock verify];
  53. }
  54. - (void)testNSCoding {
  55. GIDSignInButton *button = [[GIDSignInButton alloc] init];
  56. button.style = kGIDSignInButtonStyleIconOnly;
  57. button.colorScheme = kGIDSignInButtonColorSchemeLight;
  58. NSData *data = [NSKeyedArchiver archivedDataWithRootObject:button];
  59. GIDSignInButton *newButton = [NSKeyedUnarchiver unarchiveObjectWithData:data];
  60. XCTAssertEqual(button.style, newButton.style);
  61. XCTAssertEqual(button.colorScheme, newButton.colorScheme);
  62. }
  63. - (void)testSetStyle {
  64. GIDSignInButton *button = [[GIDSignInButton alloc] init];
  65. id buttonMock = OCMPartialMock(button);
  66. [[buttonMock expect] setNeedsDisplay];
  67. button.style = kGIDSignInButtonStyleWide;
  68. [buttonMock verify];
  69. XCTAssertEqual(button.style, kGIDSignInButtonStyleWide);
  70. [[buttonMock expect] setNeedsDisplay];
  71. button.style = kGIDSignInButtonStyleIconOnly;
  72. [buttonMock verify];
  73. XCTAssertEqual(button.style, kGIDSignInButtonStyleIconOnly);
  74. [[buttonMock expect] setNeedsDisplay];
  75. button.style = kGIDSignInButtonStyleStandard;
  76. [buttonMock verify];
  77. XCTAssertEqual(button.style, kGIDSignInButtonStyleStandard);
  78. }
  79. - (void)testPressed {
  80. id signInMock = OCMPartialMock([GIDSignIn sharedInstance]);
  81. GIDSignInButton *button = [[GIDSignInButton alloc] init];
  82. [[signInMock expect] signInWithOptions:[OCMArg any]];
  83. [button pressed];
  84. [signInMock verify];
  85. }
  86. - (void)testSetEnabled {
  87. GIDSignInButton *button = [[GIDSignInButton alloc] init];
  88. id buttonMock = OCMPartialMock(button);
  89. // Checks default value for |button.enabled|
  90. XCTAssertTrue(button.enabled, @"Button should be default enabled");
  91. // Checks that button redraw when enabled set YES.
  92. [[buttonMock expect] setNeedsDisplay];
  93. button.enabled = NO;
  94. [buttonMock verify];
  95. // Checks nothing happen if setting same value.
  96. button.enabled = NO;
  97. // Checks that button redraw when enabled set YES.
  98. [[buttonMock expect] setNeedsDisplay];
  99. button.enabled = YES;
  100. [buttonMock verify];
  101. // Checks nothing happen if setting same value.
  102. button.enabled = YES;
  103. }
  104. - (void)testWidthAndHeightConstraintAddition {
  105. GIDSignInButton *button = [[GIDSignInButton alloc] init];
  106. XCTAssertEqual([button.constraints count], 0u);
  107. [button updateConstraints];
  108. XCTAssertEqual([button.constraints count], 2u);
  109. // Ensure we don't duplicate constraints
  110. [button updateConstraints];
  111. XCTAssertEqual([button.constraints count], 2u);
  112. }
  113. - (void)testHeightConstraintReplacement {
  114. GIDSignInButton *button = [[GIDSignInButton alloc] init];
  115. [button addConstraint:[NSLayoutConstraint constraintWithItem:button
  116. attribute:NSLayoutAttributeHeight
  117. relatedBy:NSLayoutRelationEqual
  118. toItem:nil
  119. attribute:NSLayoutAttributeNotAnAttribute
  120. multiplier:1.0
  121. constant:30]];
  122. XCTAssertEqual([button.constraints count], 1u);
  123. [button updateConstraints];
  124. XCTAssertEqual([button.constraints count], 2u);
  125. for (NSLayoutConstraint *constraint in button.constraints) {
  126. if ([constraint.identifier isEqualToString:kHeightConstraintIdentifier]) {
  127. XCTAssertEqual(constraint.firstAttribute, NSLayoutAttributeHeight);
  128. XCTAssertEqual(constraint.constant, 48);
  129. return;
  130. }
  131. }
  132. XCTFail(@"New constraint not found.");
  133. }
  134. - (void)testWidthConstraintBelowMinimumRemoval {
  135. GIDSignInButton *button = [[GIDSignInButton alloc] init];
  136. [button addConstraint:[NSLayoutConstraint constraintWithItem:button
  137. attribute:NSLayoutAttributeWidth
  138. relatedBy:NSLayoutRelationEqual
  139. toItem:nil
  140. attribute:NSLayoutAttributeNotAnAttribute
  141. multiplier:1.0
  142. constant:50]];
  143. XCTAssertEqual([button.constraints count], 1u);
  144. [button updateConstraints];
  145. XCTAssertEqual([button.constraints count], 2u);
  146. for (NSLayoutConstraint *constraint in button.constraints) {
  147. XCTAssertTrue([constraint.identifier isEqualToString:kWidthConstraintIdentifier] ||
  148. [constraint.identifier isEqualToString:kHeightConstraintIdentifier]);
  149. }
  150. }
  151. - (void)testDontRemoveValidWidthConstraint {
  152. GIDSignInButton *button = [[GIDSignInButton alloc] init];
  153. NSLayoutConstraint *widthConstraint =
  154. [NSLayoutConstraint constraintWithItem:button
  155. attribute:NSLayoutAttributeWidth
  156. relatedBy:NSLayoutRelationEqual
  157. toItem:nil
  158. attribute:NSLayoutAttributeNotAnAttribute
  159. multiplier:1.0
  160. constant:250];
  161. [button addConstraint:widthConstraint];
  162. XCTAssertEqual([button.constraints count], 1u);
  163. [button updateConstraints];
  164. XCTAssertEqual([button.constraints count], 3u);
  165. XCTAssertTrue([button.constraints containsObject:widthConstraint]);
  166. }
  167. - (void)testDontRemoveValidHeightConstraint {
  168. GIDSignInButton *button = [[GIDSignInButton alloc] init];
  169. NSLayoutConstraint *heightConstraint =
  170. [NSLayoutConstraint constraintWithItem:button
  171. attribute:NSLayoutAttributeHeight
  172. relatedBy:NSLayoutRelationEqual
  173. toItem:nil
  174. attribute:NSLayoutAttributeNotAnAttribute
  175. multiplier:1.0
  176. constant:48];
  177. [button addConstraint:heightConstraint];
  178. XCTAssertEqual([button.constraints count], 1u);
  179. [button updateConstraints];
  180. XCTAssertEqual([button.constraints count], 2u);
  181. XCTAssertTrue([button.constraints containsObject:heightConstraint]);
  182. }
  183. @end