Files
Texture/Tests/ASConfigurationTests.mm
Greg Bolsinga 442317b8ab Wrap transaction operation retain cycle fix in an experiment (#1438)
* Wrap transaction operation retain cycle fix in an experiment

This is a follow on to #1429.

* fix typo in experiment name. fix copyright in tests file.
2019-04-01 16:11:52 -07:00

146 lines
4.2 KiB
Plaintext

//
// ASConfigurationTests.m
// Texture
//
// Copyright (c) Pinterest, Inc. All rights reserved.
// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0
//
#import <XCTest/XCTest.h>
#import <AsyncDisplayKit/ASAvailability.h>
#import <AsyncDisplayKit/ASConfiguration.h>
#import <AsyncDisplayKit/ASConfigurationDelegate.h>
#import <AsyncDisplayKit/ASConfigurationInternal.h>
#import "ASTestCase.h"
static ASExperimentalFeatures features[] = {
ASExperimentalGraphicsContexts,
#if AS_ENABLE_TEXTNODE
ASExperimentalTextNode,
#endif
ASExperimentalInterfaceStateCoalescing,
ASExperimentalUnfairLock,
ASExperimentalLayerDefaults,
ASExperimentalCollectionTeardown,
ASExperimentalFramesetterCache,
ASExperimentalSkipClearData,
ASExperimentalDidEnterPreloadSkipASMLayout,
ASExperimentalDisableAccessibilityCache,
ASExperimentalDispatchApply,
ASExperimentalImageDownloaderPriority,
ASExperimentalTextDrawing,
ASExperimentalFixRangeController,
ASExperimentalOOMBackgroundDeallocDisable,
ASExperimentalTransactionOperationRetainCycle,
};
@interface ASConfigurationTests : ASTestCase <ASConfigurationDelegate>
@end
@implementation ASConfigurationTests {
void (^onActivate)(ASConfigurationTests *self, ASExperimentalFeatures feature);
}
+ (NSArray *)names {
return @[
@"exp_graphics_contexts",
@"exp_text_node",
@"exp_interface_state_coalesce",
@"exp_unfair_lock",
@"exp_infer_layer_defaults",
@"exp_collection_teardown",
@"exp_framesetter_cache",
@"exp_skip_clear_data",
@"exp_did_enter_preload_skip_asm_layout",
@"exp_disable_a11y_cache",
@"exp_dispatch_apply",
@"exp_image_downloader_priority",
@"exp_text_drawing",
@"exp_fix_range_controller",
@"exp_oom_bg_dealloc_disable",
@"exp_transaction_operation_retain_cycle"
];
}
- (ASExperimentalFeatures)allFeatures {
ASExperimentalFeatures allFeatures = 0;
for (int i = 0; i < sizeof(features)/sizeof(ASExperimentalFeatures); i++) {
allFeatures |= features[i];
}
return allFeatures;
}
#if AS_ENABLE_TEXTNODE
- (void)testExperimentalFeatureConfig
{
// Set the config
ASConfiguration *config = [[ASConfiguration alloc] initWithDictionary:nil];
config.experimentalFeatures = ASExperimentalGraphicsContexts;
config.delegate = self;
[ASConfigurationManager test_resetWithConfiguration:config];
// Set an expectation for a callback, and assert we only get one.
XCTestExpectation *e = [self expectationWithDescription:@"Callbacks done."];
e.expectedFulfillmentCount = 2;
e.assertForOverFulfill = YES;
onActivate = ^(ASConfigurationTests *self, ASExperimentalFeatures feature) {
[e fulfill];
};
// Now activate the graphics experiment and expect it works.
XCTAssertTrue(ASActivateExperimentalFeature(ASExperimentalGraphicsContexts));
// We should get a callback here
// Now activate text node and expect it fails.
XCTAssertFalse(ASActivateExperimentalFeature(ASExperimentalTextNode));
// But we should get another callback.
[self waitForExpectationsWithTimeout:3 handler:nil];
}
#endif
- (void)textureDidActivateExperimentalFeatures:(ASExperimentalFeatures)feature
{
if (onActivate) {
onActivate(self, feature);
}
}
- (void)testMappingNamesToFlags
{
// Throw in a bad bit.
ASExperimentalFeatures allFeatures = [self allFeatures];
ASExperimentalFeatures featuresWithBadBit = allFeatures | (1 << 22);
NSArray *expectedNames = [ASConfigurationTests names];
XCTAssertEqualObjects(expectedNames, ASExperimentalFeaturesGetNames(featuresWithBadBit));
}
- (void)testMappingFlagsFromNames
{
// Throw in a bad name.
NSMutableArray *allNames = [[NSMutableArray alloc] initWithArray:[ASConfigurationTests names]];
[allNames addObject:@"__invalid_name"];
ASExperimentalFeatures expected = [self allFeatures];
XCTAssertEqual(expected, ASExperimentalFeaturesFromArray(allNames));
}
- (void)testFlagMatchName
{
NSArray *names = [ASConfigurationTests names];
for (NSInteger i = 0; i < names.count; i++) {
XCTAssertEqual(features[i], ASExperimentalFeaturesFromArray(@[names[i]]));
}
}
- (void)testNameMatchFlag {
NSArray *names = [ASConfigurationTests names];
for (NSInteger i = 0; i < names.count; i++) {
XCTAssertEqualObjects(@[names[i]], ASExperimentalFeaturesGetNames(features[i]));
}
}
@end