Index: ios/shared/chrome/browser/ui/commands/command_dispatcher_unittest.mm |
diff --git a/ios/shared/chrome/browser/ui/commands/command_dispatcher_unittest.mm b/ios/shared/chrome/browser/ui/commands/command_dispatcher_unittest.mm |
index c9ffdd6517879756cc4e5b6a80e93ab7bf3d6927..adbda24eed8676ee3eb857ee99402803db62bd03 100644 |
--- a/ios/shared/chrome/browser/ui/commands/command_dispatcher_unittest.mm |
+++ b/ios/shared/chrome/browser/ui/commands/command_dispatcher_unittest.mm |
@@ -15,12 +15,20 @@ |
#pragma mark - Test handlers |
+@protocol ShowProtocol<NSObject> |
+- (void)show; |
+- (void)showMore; |
+@end |
+ |
// A handler with methods that take no arguments. |
-@interface CommandDispatcherTestSimpleTarget : NSObject |
+@interface CommandDispatcherTestSimpleTarget : NSObject<ShowProtocol> |
// Will be set to YES when the |-show| method is called. |
@property(nonatomic, assign) BOOL showCalled; |
+// Will be set to YES when the |-showMore| method is called. |
+@property(nonatomic, assign) BOOL showMoreCalled; |
+ |
// Will be set to YES when the |-hide| method is called. |
@property(nonatomic, assign) BOOL hideCalled; |
@@ -28,7 +36,6 @@ |
- (void)resetProperties; |
// Handler methods. |
-- (void)show; |
- (void)hide; |
@end |
@@ -36,10 +43,12 @@ |
@implementation CommandDispatcherTestSimpleTarget |
@synthesize showCalled = _showCalled; |
+@synthesize showMoreCalled = _showMoreCalled; |
@synthesize hideCalled = _hideCalled; |
- (void)resetProperties { |
self.showCalled = NO; |
+ self.showMoreCalled = NO; |
self.hideCalled = NO; |
} |
@@ -47,6 +56,10 @@ |
self.showCalled = YES; |
} |
+- (void)showMore { |
+ self.showMoreCalled = YES; |
+} |
+ |
- (void)hide { |
self.hideCalled = YES; |
} |
@@ -184,6 +197,21 @@ TEST(CommandDispatcherTest, MultipleTargets) { |
EXPECT_TRUE(hideTarget.hideCalled); |
} |
+// Tests handlers registered via protocols. |
+TEST(CommandDispatcherTest, ProtocolRegistration) { |
+ id dispatcher = [[CommandDispatcher alloc] init]; |
+ CommandDispatcherTestSimpleTarget* target = |
+ [[CommandDispatcherTestSimpleTarget alloc] init]; |
+ |
+ [dispatcher startDispatchingToTarget:target |
+ forProtocol:@protocol(ShowProtocol)]; |
+ |
+ [dispatcher show]; |
+ EXPECT_TRUE(target.showCalled); |
+ [dispatcher showMore]; |
+ EXPECT_TRUE(target.showCalled); |
+} |
+ |
// Tests that handlers are no longer forwarded messages after selector |
// deregistration. |
TEST(CommandDispatcherTest, SelectorDeregistration) { |
@@ -214,6 +242,52 @@ TEST(CommandDispatcherTest, SelectorDeregistration) { |
EXPECT_TRUE(target.hideCalled); |
} |
+// Tests that handlers are no longer forwarded messages after protocol |
+// deregistration. |
+TEST(CommandDispatcherTest, ProtocolDeregistration) { |
+ id dispatcher = [[CommandDispatcher alloc] init]; |
+ CommandDispatcherTestSimpleTarget* target = |
+ [[CommandDispatcherTestSimpleTarget alloc] init]; |
+ |
+ [dispatcher startDispatchingToTarget:target |
+ forProtocol:@protocol(ShowProtocol)]; |
+ [dispatcher startDispatchingToTarget:target forSelector:@selector(hide)]; |
+ |
+ [dispatcher show]; |
+ EXPECT_TRUE(target.showCalled); |
+ EXPECT_FALSE(target.showMoreCalled); |
+ EXPECT_FALSE(target.hideCalled); |
+ [target resetProperties]; |
+ [dispatcher showMore]; |
+ EXPECT_FALSE(target.showCalled); |
+ EXPECT_TRUE(target.showMoreCalled); |
+ EXPECT_FALSE(target.hideCalled); |
+ |
+ [target resetProperties]; |
+ [dispatcher stopDispatchingForProtocol:@protocol(ShowProtocol)]; |
+ bool exception_caught = false; |
+ @try { |
+ [dispatcher show]; |
+ } @catch (NSException* exception) { |
+ EXPECT_EQ(NSInvalidArgumentException, [exception name]); |
+ exception_caught = true; |
+ } |
+ EXPECT_TRUE(exception_caught); |
+ exception_caught = false; |
+ @try { |
+ [dispatcher showMore]; |
+ } @catch (NSException* exception) { |
+ EXPECT_EQ(NSInvalidArgumentException, [exception name]); |
+ exception_caught = true; |
+ } |
+ EXPECT_TRUE(exception_caught); |
+ |
+ [dispatcher hide]; |
+ EXPECT_FALSE(target.showCalled); |
+ EXPECT_FALSE(target.showMoreCalled); |
+ EXPECT_TRUE(target.hideCalled); |
+} |
+ |
// Tests that handlers are no longer forwarded messages after target |
// deregistration. |
TEST(CommandDispatcherTest, TargetDeregistration) { |