Skip to content

Commit

Permalink
Add testTextNodeSwitchWorksInMultiThreadEnvironment tests
Browse files Browse the repository at this point in the history
  • Loading branch information
maicki committed Nov 1, 2018
1 parent 250537e commit 19d91e3
Showing 1 changed file with 57 additions and 0 deletions.
57 changes: 57 additions & 0 deletions Tests/ASTextNodeTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ @interface ASTextNodeTests : XCTestCase

@property (nonatomic) ASTextNode *textNode;
@property (nonatomic, copy) NSAttributedString *attributedText;
@property (nonatomic) NSMutableArray *textNodeBucket;

@end

Expand All @@ -59,6 +60,7 @@ - (void)setUp
{
[super setUp];
_textNode = [[ASTextNode alloc] init];
_textNodeBucket = [[NSMutableArray alloc] init];

UIFontDescriptor *desc =
[UIFontDescriptor fontDescriptorWithName:@"Didot" size:18];
Expand Down Expand Up @@ -247,6 +249,61 @@ - (void)testThatTheExperimentWorksCorrectly
XCTAssertEqualObjects(sc2.superclass, [ASTextNodeSubclass class]);
}

- (void)testTextNodeSwitchWorksInMultiThreadEnvironment
{
ASConfiguration *config = [ASConfiguration new];
config.experimentalFeatures = ASExperimentalTextNode;
[ASConfigurationManager test_resetWithConfiguration:config];
XCTestExpectation *exp = [self expectationWithDescription:@"wait for full bucket"];

dispatch_queue_t queue = dispatch_queue_create("com.texture.AsyncDisplayKit.ASTextNodeTestsQueue", DISPATCH_QUEUE_CONCURRENT);
dispatch_group_t g = dispatch_group_create();
for (int i = 0; i < 20; i++) {
dispatch_group_async(g, queue, ^{
ASTextNode *textNode = [[ASTextNodeSecondSubclass alloc] init];
XCTAssert([textNode isKindOfClass:[ASTextNode2 class]]);
@synchronized(self.textNodeBucket) {
[self.textNodeBucket addObject:textNode];
if (self.textNodeBucket.count == 20) {
[exp fulfill];
}
}
});
}
[self waitForExpectations:@[exp] timeout:3];
exp = nil;
[self.textNodeBucket removeAllObjects];
}

- (void)testTextNodeSwitchWorksInMultiThreadEnvironment2
{
ASConfiguration *config = [ASConfiguration new];
config.experimentalFeatures = ASExperimentalTextNode;
[ASConfigurationManager test_resetWithConfiguration:config];
XCTestExpectation *exp = [self expectationWithDescription:@"wait for full bucket"];

NSLock *lock = [[NSLock alloc] init];
NSMutableArray *textNodeBucket = [[NSMutableArray alloc] init];

dispatch_queue_t queue = dispatch_queue_create("com.texture.AsyncDisplayKit.ASTextNodeTestsQueue", DISPATCH_QUEUE_CONCURRENT);
dispatch_group_t g = dispatch_group_create();
for (int i = 0; i < 20; i++) {
dispatch_group_async(g, queue, ^{
ASTextNode *textNode = [[ASTextNodeSecondSubclass alloc] init];
XCTAssert([textNode isKindOfClass:[ASTextNode2 class]]);
[lock lock];
[textNodeBucket addObject:textNode];
if (textNodeBucket.count == 20) {
[exp fulfill];
}
[lock unlock];
});
}
[self waitForExpectations:@[exp] timeout:3];
exp = nil;
[textNodeBucket removeAllObjects];
}

@end

@implementation ASTextNodeSubclass
Expand Down

0 comments on commit 19d91e3

Please sign in to comment.