ComponentKitTests/CKBuildTriggerTests.mm (76 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 <ComponentKit/CKBuildComponent.h> #import <ComponentKit/CKComponent.h> #import <ComponentKit/CKComponentScopeRootFactory.h> #import <ComponentKit/CKComponentScopeRoot.h> @interface CKBuildTriggerTests : XCTestCase @end @implementation CKBuildTriggerTests struct ScopeRootAndStateUpdates { CK::NonNull<CKComponentScopeRoot *> scopeRoot; CKComponentStateUpdateMap stateUpdates; }; static auto makeScopeRoot(BOOL empty) -> CK::NonNull<CKComponentScopeRoot *> { const auto scopeRoot = CKComponentScopeRootWithDefaultPredicates(nil, nil); if (empty) { return scopeRoot; } else { return CK::makeNonNull([scopeRoot newRoot]); } } static auto makeScopeRootAndStateUpdates(BOOL empty, BOOL withStateUpdate) -> ScopeRootAndStateUpdates { const auto scopeRoot = makeScopeRoot(empty); CKComponentStateUpdateMap stateUpdates; if (withStateUpdate) { const auto scopeHandle = [[CKComponentScopeHandle alloc] initWithListener:nil rootIdentifier:4242 componentTypeName:"test" initialState:nil]; [scopeHandle resolveInScopeRoot:*scopeRoot]; stateUpdates[scopeHandle] = {}; } return {scopeRoot, stateUpdates}; } - (void)testBuildTriggerNoneWhenEmptyScopeRoot { const auto scopeRootAndStateUpdate = makeScopeRootAndStateUpdates(YES, NO); const auto trigger = CKBuildComponentTrigger(scopeRootAndStateUpdate.scopeRoot, scopeRootAndStateUpdate.stateUpdates, YES, YES); XCTAssertEqual(trigger, CKBuildTriggerNone); } - (void)testBuildTriggerStateUpdate { const auto scopeRootAndStateUpdate = makeScopeRootAndStateUpdates(NO, YES); const auto trigger = CKBuildComponentTrigger(scopeRootAndStateUpdate.scopeRoot, scopeRootAndStateUpdate.stateUpdates, NO, NO); XCTAssertEqual(trigger, CKBuildTriggerStateUpdate); } - (void)testBuildTriggerForcePropsUpdate { const auto scopeRootAndStateUpdate = makeScopeRootAndStateUpdates(NO, NO); const auto trigger = CKBuildComponentTrigger(scopeRootAndStateUpdate.scopeRoot, scopeRootAndStateUpdate.stateUpdates, NO, YES); XCTAssertEqual(trigger, CKBuildTriggerPropsUpdate); } - (void)testBuildTriggerMustBePropsUpdate { const auto scopeRootAndStateUpdate = makeScopeRootAndStateUpdates(NO, NO); const auto trigger = CKBuildComponentTrigger(scopeRootAndStateUpdate.scopeRoot, scopeRootAndStateUpdate.stateUpdates, NO, NO); XCTAssertEqual(trigger, CKBuildTriggerPropsUpdate); } - (void)testBuildTriggerStatePropsUpdate { const auto scopeRootAndStateUpdate = makeScopeRootAndStateUpdates(NO, YES); const auto trigger = CKBuildComponentTrigger(scopeRootAndStateUpdate.scopeRoot, scopeRootAndStateUpdate.stateUpdates, NO, YES); XCTAssertEqual(trigger, CKBuildTriggerStateUpdate | CKBuildTriggerPropsUpdate); } - (void)testBuildTriggerEnvironmentUpdate { const auto scopeRootAndStateUpdate = makeScopeRootAndStateUpdates(NO, NO); const auto trigger = CKBuildComponentTrigger(scopeRootAndStateUpdate.scopeRoot, scopeRootAndStateUpdate.stateUpdates, YES, NO); XCTAssertEqual(trigger, CKBuildTriggerEnvironmentUpdate); } - (void)testBuildTriggerAll { const auto scopeRootAndStateUpdate = makeScopeRootAndStateUpdates(NO, YES); const auto trigger = CKBuildComponentTrigger(scopeRootAndStateUpdate.scopeRoot, scopeRootAndStateUpdate.stateUpdates, YES, YES); XCTAssertEqual(trigger, CKBuildTriggerPropsUpdate | CKBuildTriggerStateUpdate | CKBuildTriggerEnvironmentUpdate); } @end