[ASControlNode] Squash duplicated target-action-event tuples, fix assertion failure removing nil target

This commit is contained in:
Adlai Holler
2016-04-05 15:51:53 -07:00
parent 40e12b9830
commit 9e56cb553f
2 changed files with 76 additions and 5 deletions

View File

@@ -106,6 +106,76 @@
XCTAssert(controller.hits == 1, @"Controller did not receive the action event");
}
- (void)testRemoveWithoutTargetRemovesTargetlessAction {
ASActionSenderEventController *controller = [[ASActionSenderEventController alloc] init];
ASControlNode *node = [[ASControlNode alloc] init];
[node addTarget:nil action:ACTION_SENDER_EVENT forControlEvents:EVENT];
[node removeTarget:nil action:ACTION_SENDER_EVENT forControlEvents:EVENT];
[controller.view addSubview:node.view];
[node sendActionsForControlEvents:EVENT withEvent:nil];
XCTAssertEqual(controller.hits, 0, @"Controller did not receive exactly zero action events");
}
- (void)testRemoveWithTarget {
ASActionSenderEventController *controller = [[ASActionSenderEventController alloc] init];
ASControlNode *node = [[ASControlNode alloc] init];
[node addTarget:controller action:ACTION_SENDER_EVENT forControlEvents:EVENT];
[node removeTarget:controller action:ACTION_SENDER_EVENT forControlEvents:EVENT];
[controller.view addSubview:node.view];
[node sendActionsForControlEvents:EVENT withEvent:nil];
XCTAssertEqual(controller.hits, 0, @"Controller did not receive exactly zero action events");
}
- (void)testRemoveWithTargetRemovesAction {
ASActionSenderEventController *controller = [[ASActionSenderEventController alloc] init];
ASControlNode *node = [[ASControlNode alloc] init];
[node addTarget:controller action:ACTION_SENDER_EVENT forControlEvents:EVENT];
[node removeTarget:controller action:ACTION_SENDER_EVENT forControlEvents:EVENT];
[controller.view addSubview:node.view];
[node sendActionsForControlEvents:EVENT withEvent:nil];
XCTAssertEqual(controller.hits, 0, @"Controller did not receive exactly zero action events");
}
- (void)testRemoveWithoutTargetRemovesTargetedAction {
ASActionSenderEventController *controller = [[ASActionSenderEventController alloc] init];
ASControlNode *node = [[ASControlNode alloc] init];
[node addTarget:controller action:ACTION_SENDER_EVENT forControlEvents:EVENT];
[node removeTarget:nil action:ACTION_SENDER_EVENT forControlEvents:EVENT];
[controller.view addSubview:node.view];
[node sendActionsForControlEvents:EVENT withEvent:nil];
XCTAssertEqual(controller.hits, 0, @"Controller did not receive exactly zero action events");
}
- (void)testDuplicateEntriesWithoutTarget {
ASActionSenderEventController *controller = [[ASActionSenderEventController alloc] init];
ASControlNode *node = [[ASControlNode alloc] init];
[node addTarget:nil action:ACTION_SENDER_EVENT forControlEvents:EVENT];
[node addTarget:nil action:ACTION_SENDER_EVENT forControlEvents:EVENT];
[controller.view addSubview:node.view];
[node sendActionsForControlEvents:EVENT withEvent:nil];
XCTAssertEqual(controller.hits, 1, @"Controller did not receive exactly one action event");
}
- (void)testDuplicateEntriesWithTarget {
ASActionSenderEventController *controller = [[ASActionSenderEventController alloc] init];
ASControlNode *node = [[ASControlNode alloc] init];
[node addTarget:controller action:ACTION_SENDER_EVENT forControlEvents:EVENT];
[node addTarget:controller action:ACTION_SENDER_EVENT forControlEvents:EVENT];
[controller.view addSubview:node.view];
[node sendActionsForControlEvents:EVENT withEvent:nil];
XCTAssertEqual(controller.hits, 1, @"Controller did not receive exactly one action event");
}
- (void)testDuplicateEntriesWithAndWithoutTarget {
ASActionSenderEventController *controller = [[ASActionSenderEventController alloc] init];
ASControlNode *node = [[ASControlNode alloc] init];
[node addTarget:controller action:ACTION_SENDER_EVENT forControlEvents:EVENT];
[node addTarget:nil action:ACTION_SENDER_EVENT forControlEvents:EVENT];
[controller.view addSubview:node.view];
[node sendActionsForControlEvents:EVENT withEvent:nil];
XCTAssertEqual(controller.hits, 2, @"Controller did not receive exactly two action events");
}
- (void)testDeeperHierarchyWithoutTarget {
ASActionController *controller = [[ASActionController alloc] init];
UIView *view = [[UIView alloc] init];