FBSessionIntegrationTests.m 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. /**
  2. * Copyright (c) 2015-present, Facebook, Inc.
  3. * All rights reserved.
  4. *
  5. * This source code is licensed under the BSD-style license found in the
  6. * LICENSE file in the root directory of this source tree. An additional grant
  7. * of patent rights can be found in the PATENTS file in the same directory.
  8. */
  9. #import <XCTest/XCTest.h>
  10. #import "FBIntegrationTestCase.h"
  11. #import "FBExceptions.h"
  12. #import "FBMacros.h"
  13. #import "FBSession.h"
  14. #import "FBXCodeCompatibility.h"
  15. #import "FBTestMacros.h"
  16. #import "FBUnattachedAppLauncher.h"
  17. #import "XCUIApplication+FBHelpers.h"
  18. #import "XCUIApplication.h"
  19. @interface FBSession (Tests)
  20. @end
  21. @interface FBSessionIntegrationTests : FBIntegrationTestCase
  22. @property (nonatomic) FBSession *session;
  23. @end
  24. static NSString *const SETTINGS_BUNDLE_ID = @"com.apple.Preferences";
  25. @implementation FBSessionIntegrationTests
  26. - (void)setUp
  27. {
  28. [super setUp];
  29. [self launchApplication];
  30. XCUIApplication *app = [[XCUIApplication alloc] initWithBundleIdentifier:self.testedApplication.bundleID];
  31. self.session = [FBSession initWithApplication:app];
  32. }
  33. - (void)tearDown
  34. {
  35. [self.session kill];
  36. [super tearDown];
  37. }
  38. - (void)testSettingsAppCanBeOpenedInScopeOfTheCurrentSession
  39. {
  40. XCUIApplication *testedApp = XCUIApplication.fb_activeApplication;
  41. [self.session launchApplicationWithBundleId:SETTINGS_BUNDLE_ID
  42. shouldWaitForQuiescence:nil
  43. arguments:nil
  44. environment:nil];
  45. FBAssertWaitTillBecomesTrue([self.session.activeApplication.bundleID isEqualToString:SETTINGS_BUNDLE_ID]);
  46. XCTAssertEqual([self.session applicationStateWithBundleId:SETTINGS_BUNDLE_ID], 4);
  47. [self.session activateApplicationWithBundleId:testedApp.bundleID];
  48. FBAssertWaitTillBecomesTrue([self.session.activeApplication.bundleID isEqualToString: testedApp.bundleID]);
  49. XCTAssertEqual([self.session applicationStateWithBundleId:testedApp.bundleID], 4);
  50. }
  51. - (void)testSettingsAppCanBeReopenedInScopeOfTheCurrentSession
  52. {
  53. XCUIApplication *systemApp = self.springboard;
  54. [self.session launchApplicationWithBundleId:SETTINGS_BUNDLE_ID
  55. shouldWaitForQuiescence:nil
  56. arguments:nil
  57. environment:nil];
  58. FBAssertWaitTillBecomesTrue([self.session.activeApplication.bundleID isEqualToString:SETTINGS_BUNDLE_ID]);
  59. XCTAssertTrue([self.session terminateApplicationWithBundleId:SETTINGS_BUNDLE_ID]);
  60. FBAssertWaitTillBecomesTrue([systemApp.bundleID isEqualToString:self.session.activeApplication.bundleID]);
  61. [self.session launchApplicationWithBundleId:SETTINGS_BUNDLE_ID
  62. shouldWaitForQuiescence:nil
  63. arguments:nil
  64. environment:nil];
  65. FBAssertWaitTillBecomesTrue([self.session.activeApplication.bundleID isEqualToString:SETTINGS_BUNDLE_ID]);
  66. }
  67. - (void)testMainAppCanBeReactivatedInScopeOfTheCurrentSession
  68. {
  69. XCUIApplication *testedApp = XCUIApplication.fb_activeApplication;
  70. [self.session launchApplicationWithBundleId:SETTINGS_BUNDLE_ID
  71. shouldWaitForQuiescence:nil
  72. arguments:nil
  73. environment:nil];
  74. FBAssertWaitTillBecomesTrue([self.session.activeApplication.bundleID isEqualToString:SETTINGS_BUNDLE_ID]);
  75. [self.session activateApplicationWithBundleId:testedApp.bundleID];
  76. FBAssertWaitTillBecomesTrue([self.session.activeApplication.bundleID isEqualToString:testedApp.bundleID]);
  77. }
  78. - (void)testMainAppCanBeRestartedInScopeOfTheCurrentSession
  79. {
  80. XCUIApplication *systemApp = self.springboard;
  81. XCUIApplication *testedApp = [[XCUIApplication alloc] initWithBundleIdentifier:self.testedApplication.bundleID];
  82. [self.session terminateApplicationWithBundleId:testedApp.bundleID];
  83. FBAssertWaitTillBecomesTrue([self.session.activeApplication.bundleID isEqualToString:systemApp.bundleID]);
  84. [self.session launchApplicationWithBundleId:testedApp.bundleID
  85. shouldWaitForQuiescence:nil
  86. arguments:nil
  87. environment:nil];
  88. FBAssertWaitTillBecomesTrue([self.session.activeApplication.bundleID isEqualToString:testedApp.bundleID]);
  89. }
  90. - (void)testLaunchUnattachedApp
  91. {
  92. [FBUnattachedAppLauncher launchAppWithBundleId:SETTINGS_BUNDLE_ID];
  93. [self.session kill];
  94. XCTAssertEqualObjects(SETTINGS_BUNDLE_ID, XCUIApplication.fb_activeApplication.bundleID);
  95. }
  96. - (void)testAppWithInvalidBundleIDCannotBeStarted
  97. {
  98. XCUIApplication *testedApp = [[XCUIApplication alloc] initWithBundleIdentifier:@"yolo"];
  99. @try {
  100. [testedApp launch];
  101. XCTFail(@"An exception is expected to be thrown");
  102. } @catch (NSException *exception) {
  103. XCTAssertEqualObjects(FBApplicationMissingException, exception.name);
  104. }
  105. }
  106. - (void)testAppWithInvalidBundleIDCannotBeActivated
  107. {
  108. XCUIApplication *testedApp = [[XCUIApplication alloc] initWithBundleIdentifier:@"yolo"];
  109. @try {
  110. [testedApp activate];
  111. XCTFail(@"An exception is expected to be thrown");
  112. } @catch (NSException *exception) {
  113. XCTAssertEqualObjects(FBApplicationMissingException, exception.name);
  114. }
  115. }
  116. @end