GIDSignInButtonTest.m 8.2 KB

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