ComponentKitTests/CKComponentControllerLifecycleMethodTests.mm (96 lines of code) (raw):
/*
* Copyright (c) 2014-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
*/
#import <XCTest/XCTest.h>
#import <ComponentKitTestHelpers/CKComponentLifecycleTestHelper.h>
#import <ComponentKitTestHelpers/CKLifecycleTestComponent.h>
#import <ComponentKit/CKComponent.h>
#import <ComponentKit/CKComponentController.h>
#import <ComponentKit/CKComponentProvider.h>
#import <ComponentKit/CKComponentScope.h>
#import <ComponentKit/CKComponentSubclass.h>
@interface CKComponentControllerLifecycleMethodTests : XCTestCase
@end
@implementation CKComponentControllerLifecycleMethodTests
static CKComponent *componentProvider(id<NSObject> model, id<NSObject>context)
{
return [CKLifecycleTestComponent new];
}
- (void)testThatMountingComponentCallsWillAndDidMount
{
CKComponentLifecycleTestHelper *componentLifecycleTestController = [[CKComponentLifecycleTestHelper alloc] initWithComponentProvider:componentProvider
sizeRangeProvider:nil];
const CKComponentLifecycleTestHelperState state = [componentLifecycleTestController prepareForUpdateWithModel:nil
constrainedSize:{{0,0}, {100, 100}}
context:nil];
[componentLifecycleTestController updateWithState:state];
UIView *view = [UIView new];
[componentLifecycleTestController attachToView:view];
CKLifecycleTestComponentController *controller = ((CKLifecycleTestComponent *)state.componentLayout.component).controller;
const CKLifecycleMethodCounts actual = controller.counts;
const CKLifecycleMethodCounts expected = {.willMount = 1, .didMount = 1, .didAcquireView = 1};
XCTAssertTrue(actual == expected, @"Expected %@ but got %@", expected.description(), actual.description());
}
- (void)testThatUnmountingComponentCallsWillAndDidUnmount
{
CKComponentLifecycleTestHelper *componentLifecycleTestController = [[CKComponentLifecycleTestHelper alloc] initWithComponentProvider:componentProvider
sizeRangeProvider:nil];
const CKComponentLifecycleTestHelperState state = [componentLifecycleTestController prepareForUpdateWithModel:nil
constrainedSize:{{0,0}, {100, 100}}
context:nil];
[componentLifecycleTestController updateWithState:state];
UIView *view = [UIView new];
[componentLifecycleTestController attachToView:view];
[componentLifecycleTestController detachFromView];
CKLifecycleTestComponentController *controller = ((CKLifecycleTestComponent *)state.componentLayout.component).controller;
const CKLifecycleMethodCounts actual = controller.counts;
const CKLifecycleMethodCounts expected = {.willMount = 1, .didMount = 1, .willUnmount = 1, .didUnmount = 1, .willRelinquishView = 1, .didAcquireView = 1};
XCTAssertTrue(actual == expected, @"Expected %@ but got %@", expected.description(), actual.description());
}
- (void)testThatUpdatingComponentWhileMountedCallsWillAndDidRemount
{
CKComponentLifecycleTestHelper *componentLifecycleTestController = [[CKComponentLifecycleTestHelper alloc] initWithComponentProvider:componentProvider
sizeRangeProvider:nil];
const CKComponentLifecycleTestHelperState state = [componentLifecycleTestController prepareForUpdateWithModel:nil
constrainedSize:{{0,0}, {100, 100}}
context:nil];
[componentLifecycleTestController updateWithState:state];
UIView *view = [UIView new];
[componentLifecycleTestController attachToView:view];
CKLifecycleTestComponent *component = (CKLifecycleTestComponent *)state.componentLayout.component;
[component updateStateToIncludeNewAttribute];
CKLifecycleTestComponentController *controller = (CKLifecycleTestComponentController *)component.controller;
const CKLifecycleMethodCounts actual = controller.counts;
const CKLifecycleMethodCounts expected = {.willMount = 1, .didMount = 1, .willRemount = 1, .didRemount = 1, .willRelinquishView = 1, .didAcquireView = 2};
XCTAssertTrue(actual == expected, @"Expected %@ but got %@", expected.description(), actual.description());
}
- (void)testThatUpdatingComponentWhileNotMountedCallsNothing
{
CKComponentLifecycleTestHelper *componentLifecycleTestController = [[CKComponentLifecycleTestHelper alloc] initWithComponentProvider:componentProvider
sizeRangeProvider:nil];
const CKComponentLifecycleTestHelperState state = [componentLifecycleTestController prepareForUpdateWithModel:nil
constrainedSize:{{0,0}, {100, 100}}
context:nil];
[componentLifecycleTestController updateWithState:state];
UIView *view = [UIView new];
[componentLifecycleTestController attachToView:view];
[componentLifecycleTestController detachFromView];
CKLifecycleTestComponent *component = (CKLifecycleTestComponent *)state.componentLayout.component;
CKLifecycleTestComponentController *controller = (CKLifecycleTestComponentController *)component.controller;
{
const CKLifecycleMethodCounts actual = controller.counts;
const CKLifecycleMethodCounts expected = {.willMount = 1, .didMount = 1, .willUnmount = 1, .didUnmount = 1, .willRelinquishView = 1, .didAcquireView = 1};
XCTAssertTrue(actual == expected, @"Expected %@ but got %@", expected.description(), actual.description());
}
controller.counts = {};
[component updateStateToIncludeNewAttribute];
{
const CKLifecycleMethodCounts actual = controller.counts;
const CKLifecycleMethodCounts expected = {};
XCTAssertTrue(actual == expected, @"Expected %@ but got %@", expected.description(), actual.description());
}
[componentLifecycleTestController attachToView:view];
{
const CKLifecycleMethodCounts actual = controller.counts;
const CKLifecycleMethodCounts expected = {.willMount = 1, .didMount = 1, .didAcquireView = 1};
XCTAssertTrue(actual == expected, @"Expected %@ but got %@", expected.description(), actual.description());
}
}
@end