Index: ios/chrome/browser/web/mailto_url_rewriter_unittest.mm |
diff --git a/ios/chrome/browser/web/mailto_url_rewriter_unittest.mm b/ios/chrome/browser/web/mailto_url_rewriter_unittest.mm |
index 8edead2b7f832e499b5a881045e498d81bbab1f5..796f53c47b6f35cf8673b313871e18cf0b5739a1 100644 |
--- a/ios/chrome/browser/web/mailto_url_rewriter_unittest.mm |
+++ b/ios/chrome/browser/web/mailto_url_rewriter_unittest.mm |
@@ -50,6 +50,19 @@ NSString* const kGmailAppStoreID = @"422689480"; |
} |
@end |
+#pragma mark - Test Observer object |
+ |
+@interface RewriterObserver : NSObject<MailtoURLRewriterObserver> |
+@property(nonatomic, readonly) int changeCount; |
+@end |
+ |
+@implementation RewriterObserver |
+@synthesize changeCount = _changeCount; |
+- (void)rewriterDidChange:(MailtoURLRewriter*)rewriter { |
+ ++_changeCount; |
+} |
+@end |
+ |
#pragma mark - MailtoURLRewriter private interfaces for testing. |
@interface MailtoURLRewriter () |
@@ -69,6 +82,7 @@ TEST_F(MailtoURLRewriterTest, TestStandardInstance) { |
MailtoURLRewriter* rewriter = |
[[MailtoURLRewriter alloc] initWithStandardHandlers]; |
EXPECT_TRUE(rewriter); |
+ EXPECT_GT([[rewriter defaultHandlerName] length], 0U); |
// ID for system Mail client app must not be an empty string. |
EXPECT_GT([[MailtoURLRewriter systemMailApp] length], 0U); |
@@ -115,6 +129,42 @@ TEST_F(MailtoURLRewriterTest, TestUserPreferencePersistence) { |
EXPECT_NSEQ(otherHandlerID, [rewriter2 defaultHandlerID]); |
} |
+TEST_F(MailtoURLRewriterTest, TestChangeObserver) { |
+ RewriterObserver* observer = [[RewriterObserver alloc] init]; |
+ ASSERT_EQ(0, [observer changeCount]); |
+ |
+ // Sets up a MailtoURLRewriter object. The default handler is Gmail app |
+ // because |fakeGmailHandler| reports that it is "installed". |
+ MailtoURLRewriter* rewriter = [[MailtoURLRewriter alloc] init]; |
+ MailtoHandler* systemMailHandler = [[MailtoHandlerSystemMail alloc] init]; |
+ MailtoHandler* fakeGmailHandler = |
+ [[FakeMailtoHandlerGmailInstalled alloc] init]; |
+ [rewriter addMailtoApps:@[ systemMailHandler, fakeGmailHandler ]]; |
+ EXPECT_NSEQ([fakeGmailHandler appStoreID], [rewriter defaultHandlerID]); |
+ [rewriter setObserver:observer]; |
+ |
+ // Setting system Mail app as handler while current handler is Gmail should |
+ // trigger the observer callback, incrementing count from 0 to 1. |
+ [rewriter setDefaultHandlerID:[systemMailHandler appStoreID]]; |
+ EXPECT_EQ(1, [observer changeCount]); |
+ |
+ // Setting system Mail app as handler while current handler is already |
+ // system Mail app should not trigger the observer callback. Count remains |
+ // at 1. |
+ [rewriter setDefaultHandlerID:[systemMailHandler appStoreID]]; |
+ EXPECT_EQ(1, [observer changeCount]); |
+ |
+ // Setting Gmail app as the default handler when current handler is system |
+ // Mail app should trigger the observer callback. Count increases from 1 to 2. |
+ [rewriter setDefaultHandlerID:[fakeGmailHandler appStoreID]]; |
+ EXPECT_EQ(2, [observer changeCount]); |
+ |
+ // Deallocates the observer to test that there are no ill side-effects (e.g. |
+ // crashes) when observer's lifetime is shorter than the rewriter. |
+ observer = nil; |
+ [rewriter setDefaultHandlerID:[systemMailHandler appStoreID]]; |
+} |
+ |
// Tests that a new user without Gmail app installed launches system Mail app. |
TEST_F(MailtoURLRewriterTest, TestNewUserNoGmail) { |
// Sets pre-condition for a user who did not have Chrome installed. |