Index: chrome/browser/resources/google_now/background_unittest.gtestjs |
diff --git a/chrome/browser/resources/google_now/background_unittest.gtestjs b/chrome/browser/resources/google_now/background_unittest.gtestjs |
index a0a8f00a9d9340f66e776ca127b92902bef90711..f685145454745284bb2daf963bea32a54f2a4d0f 100644 |
--- a/chrome/browser/resources/google_now/background_unittest.gtestjs |
+++ b/chrome/browser/resources/google_now/background_unittest.gtestjs |
@@ -30,14 +30,22 @@ TEST_F('GoogleNowBackgroundUnitTest', 'AreTasksConflicting', function() { |
testTaskPair(UPDATE_CARDS_TASK_NAME, UPDATE_CARDS_TASK_NAME, true); |
testTaskPair(UPDATE_CARDS_TASK_NAME, DISMISS_CARD_TASK_NAME, false); |
testTaskPair(UPDATE_CARDS_TASK_NAME, RETRY_DISMISS_TASK_NAME, false); |
+ testTaskPair(UPDATE_CARDS_TASK_NAME, STATE_CHANGED_TASK_NAME, false); |
testTaskPair(DISMISS_CARD_TASK_NAME, UPDATE_CARDS_TASK_NAME, false); |
testTaskPair(DISMISS_CARD_TASK_NAME, DISMISS_CARD_TASK_NAME, false); |
testTaskPair(DISMISS_CARD_TASK_NAME, RETRY_DISMISS_TASK_NAME, false); |
+ testTaskPair(DISMISS_CARD_TASK_NAME, STATE_CHANGED_TASK_NAME, false); |
testTaskPair(RETRY_DISMISS_TASK_NAME, UPDATE_CARDS_TASK_NAME, true); |
testTaskPair(RETRY_DISMISS_TASK_NAME, DISMISS_CARD_TASK_NAME, true); |
testTaskPair(RETRY_DISMISS_TASK_NAME, RETRY_DISMISS_TASK_NAME, true); |
+ testTaskPair(RETRY_DISMISS_TASK_NAME, STATE_CHANGED_TASK_NAME, false); |
+ |
+ testTaskPair(STATE_CHANGED_TASK_NAME, UPDATE_CARDS_TASK_NAME, false); |
+ testTaskPair(STATE_CHANGED_TASK_NAME, DISMISS_CARD_TASK_NAME, false); |
+ testTaskPair(STATE_CHANGED_TASK_NAME, RETRY_DISMISS_TASK_NAME, false); |
+ testTaskPair(STATE_CHANGED_TASK_NAME, STATE_CHANGED_TASK_NAME, false); |
}); |
/** |
@@ -49,32 +57,126 @@ function mockInitializeDependencies(fixture) { |
'recordEvent', |
'showWelcomeToast', |
'startPollingCards']); |
- fixture.makeAndRegisterMockApis( |
- ['storage.get', 'chrome.identity.getAuthToken']); |
+ fixture.makeAndRegisterMockApis([ |
+ 'chrome.identity.getAuthToken', |
vadimt
2013/07/26 01:54:01
Should be indented by 2, I guess.
robliao
2013/07/26 08:11:23
Yup, per the style guide. Fixed the one above too.
|
+ 'chrome.location.clearWatch', |
+ 'chrome.notifications.getAll', |
+ 'chrome.preferencesPrivate.googleGeolocationAccessEnabled.get', |
+ 'storage.get', |
+ 'storage.set', |
+ 'tasks.add', |
+ 'updateCardsAttempts.isRunning', |
+ 'updateCardsAttempts.stop' |
+ ]); |
+} |
+ |
+/** |
+ * Sets up the test to expect the state machine calls and send |
+ * the specified state machine state. Currently used to test initialize(). |
+ * Note that this CAN NOT be used if any of the methods below are called |
+ * outside of this context with the same argument matchers. |
+ * expects() calls cannot be chained with the same argument matchers. |
+ * @param {object} mockApisObj Mock APIs Object. |
+ * @param {string} testIdentityToken getAuthToken callback token. |
+ * @param {boolean} testGeolocationPref Geolocation Preference callback value. |
+ * @param {boolean} testUserRespondedToToast User Response to toast |
+ & callback value. |
+ */ |
+function expectStateMachineCalls( |
+ mockApisObj, |
+ testIdentityToken, |
+ testGeolocationPref, |
+ testUserRespondedToToast) { |
+ var chromeIdentityGetAuthTokenSavedArgs = new SaveMockArguments(); |
+ mockApisObj.expects(once()). |
+ chrome_identity_getAuthToken( |
+ chromeIdentityGetAuthTokenSavedArgs.match( |
+ eqJSON({interactive: false})), |
+ chromeIdentityGetAuthTokenSavedArgs.match(ANYTHING)). |
+ will(invokeCallback( |
+ chromeIdentityGetAuthTokenSavedArgs, 1, testIdentityToken)); |
+ |
+ var googleGeolocationPrefGetSavedArgs = new SaveMockArguments(); |
+ mockApisObj.expects(once()). |
+ chrome_preferencesPrivate_googleGeolocationAccessEnabled_get( |
+ googleGeolocationPrefGetSavedArgs.match(eqJSON({})), |
+ googleGeolocationPrefGetSavedArgs.match(ANYTHING)). |
+ will(invokeCallback( |
+ googleGeolocationPrefGetSavedArgs, 1, {value: testGeolocationPref})); |
+ |
+ var storageGetSavedArgs = new SaveMockArguments(); |
+ mockApisObj.expects(once()). |
+ storage_get( |
+ storageGetSavedArgs.match(eq('userRespondedToToast')), |
+ storageGetSavedArgs.match(ANYTHING)). |
+ will(invokeCallback(storageGetSavedArgs, 1, testUserRespondedToToast)); |
+} |
+ |
+/** |
+ * Sets up the test to expect the initialization calls that |
+ * initialize() invokes. |
+ * Note that this CAN NOT be used if any of the methods below are called |
+ * outside of this context with the same argument matchers. |
+ * expects() calls cannot be chained with the same argument matchers. |
+ */ |
+function expectInitialization(mockApisObj) { |
+ mockApisObj.expects(once()). |
+ chrome_location_clearWatch(ANYTHING); |
+ mockApisObj.expects(once()). |
+ updateCardsAttempts_stop(); |
+ mockApisObj.expects(once()). |
+ storage_set(eqJSON({notificationsData: {}})); |
+ var tasksAddSavedArgs = new SaveMockArguments(); |
+ mockApisObj.expects(once()). |
+ tasks_add( |
+ tasksAddSavedArgs.match(ANYTHING), |
+ tasksAddSavedArgs.match(ANYTHING)). |
+ will(invokeCallback(tasksAddSavedArgs, 1, function() {})); |
+ var updateCardsAttemptsIsRunningSavedArgs = new SaveMockArguments(); |
+ mockApisObj.expects(once()). |
+ updateCardsAttempts_isRunning( |
+ updateCardsAttemptsIsRunningSavedArgs.match(ANYTHING)). |
+ will( |
+ invokeCallback( |
+ updateCardsAttemptsIsRunningSavedArgs, 0, false)); |
} |
TEST_F( |
'GoogleNowBackgroundUnitTest', |
'Initialize_ToastStateEmpty1', |
function() { |
- // Tests the case when toast state is empty and NOTIFICATION_CARDS_URL is |
- // not set. In this case, the function should quietly exit after finding |
- // out that NOTIFICATION_CARDS_URL is empty. |
+ // Tests the case when the user isn't signed in and NOTIFICATION_CARDS_URL |
+ // is not set. Since NOTIFICATION_CARDS_URL is empty, |
+ // nothing should start. |
// Setup and expectations. |
- var testToastState = {}; |
NOTIFICATION_CARDS_URL = undefined; |
+ var testIdentityToken = undefined; |
+ var testGeolocationPref = false; |
+ var testUserRespondedToToast = {}; |
mockInitializeDependencies(this); |
this.mockGlobals.expects(once()).recordEvent( |
DiagnosticEvent.EXTENSION_START); |
- var storageGetSavedArgs = new SaveMockArguments(); |
- this.mockApis.expects(once()). |
- storage_get( |
- storageGetSavedArgs.match(eq('toastState')), |
- storageGetSavedArgs.match(ANYTHING)). |
- will(invokeCallback(storageGetSavedArgs, 1, testToastState)); |
+ |
+ expectInitialization(this.mockApis); |
+ |
+ expectStateMachineCalls( |
+ this.mockApis, |
+ testIdentityToken, |
+ testGeolocationPref, |
+ testUserRespondedToToast); |
+ |
+ var chromeNotificationGetAllSavedArgs = new SaveMockArguments(); |
+ this.mockApis.expects(exactly(2)). |
+ chrome_notifications_getAll( |
+ chromeNotificationGetAllSavedArgs.match(ANYTHING)). |
+ will( |
+ invokeCallback(chromeNotificationGetAllSavedArgs, 0, {}), |
+ invokeCallback(chromeNotificationGetAllSavedArgs, 0, {})); |
+ |
+ // TODO(robliao,vadimt): Determine the granularity of testing to perform. |
// Invoking the tested function. |
initialize(); |
@@ -84,34 +186,36 @@ TEST_F( |
'GoogleNowBackgroundUnitTest', |
'Initialize_ToastStateEmpty2', |
function() { |
- // Tests the case when toast state is empty and NOTIFICATION_CARDS_URL is |
- // set, but getAuthToken fails most likely because the user is not signed |
- // in. In this case, the function should quietly exit after finding out |
- // that getAuthToken fails. |
+ // Tests the case when NOTIFICATION_CARDS_URL is but getAuthToken fails |
+ // most likely because the user is not signed in. In this case, the |
+ // function should quietly exit after finding out that getAuthToken fails. |
// Setup and expectations. |
- var testToastState = {}; |
NOTIFICATION_CARDS_URL = 'https://some.server.url.com'; |
var testIdentityToken = undefined; |
+ var testGeolocationPref = false; |
+ var testUserRespondedToToast = {}; |
mockInitializeDependencies(this); |
this.mockGlobals.expects(once()).recordEvent( |
DiagnosticEvent.EXTENSION_START); |
- var storageGetSavedArgs = new SaveMockArguments(); |
- this.mockApis.expects(once()). |
- storage_get( |
- storageGetSavedArgs.match(eq('toastState')), |
- storageGetSavedArgs.match(ANYTHING)). |
- will(invokeCallback(storageGetSavedArgs, 1, testToastState)); |
- var chromeIdentityGetAuthTokenSavedArgs = new SaveMockArguments(); |
- this.mockApis.expects(once()). |
- chrome_identity_getAuthToken( |
- chromeIdentityGetAuthTokenSavedArgs.match( |
- eqJSON({interactive: false})), |
- chromeIdentityGetAuthTokenSavedArgs.match(ANYTHING)). |
- will(invokeCallback( |
- chromeIdentityGetAuthTokenSavedArgs, 1, testIdentityToken)); |
+ |
+ expectInitialization(this.mockApis); |
+ |
+ expectStateMachineCalls( |
+ this.mockApis, |
+ testIdentityToken, |
+ testGeolocationPref, |
+ testUserRespondedToToast); |
+ |
+ var chromeNotificationGetAllSavedArgs = new SaveMockArguments(); |
+ this.mockApis.expects(exactly(2)). |
+ chrome_notifications_getAll( |
+ chromeNotificationGetAllSavedArgs.match(ANYTHING)). |
+ will( |
+ invokeCallback(chromeNotificationGetAllSavedArgs, 0, {}), |
+ invokeCallback(chromeNotificationGetAllSavedArgs, 0, {})); |
// Invoking the tested function. |
initialize(); |
@@ -121,80 +225,113 @@ TEST_F( |
'GoogleNowBackgroundUnitTest', |
'Initialize_ToastStateEmpty3', |
function() { |
- // Tests the case when toast state is empty and NOTIFICATION_CARDS_URL is |
- // set, and getAuthToken succeeds. In this case, the function should |
- // invoke showWelcomeToast(). |
+ // Tests the case when NOTIFICATION_CARDS_URL is set, getAuthToken |
+ // succeeds, and the user has never responded to the toast. |
+ // In this case, the function should invoke showWelcomeToast(). |
// Setup and expectations. |
- var testToastState = {}; |
NOTIFICATION_CARDS_URL = 'https://some.server.url.com'; |
var testIdentityToken = 'some identity token'; |
+ var testGeolocationPref = false; |
+ var testUserRespondedToToast = {}; |
mockInitializeDependencies(this); |
this.mockGlobals.expects(once()).recordEvent( |
DiagnosticEvent.EXTENSION_START); |
- var storageGetSavedArgs = new SaveMockArguments(); |
- this.mockApis.expects(once()). |
- storage_get( |
- storageGetSavedArgs.match(eq('toastState')), |
- storageGetSavedArgs.match(ANYTHING)). |
- will(invokeCallback(storageGetSavedArgs, 1, testToastState)); |
- var chromeIdentityGetAuthTokenSavedArgs = new SaveMockArguments(); |
- this.mockApis.expects(once()). |
- chrome_identity_getAuthToken( |
- chromeIdentityGetAuthTokenSavedArgs.match( |
- eqJSON({interactive: false})), |
- chromeIdentityGetAuthTokenSavedArgs.match(ANYTHING)). |
- will(invokeCallback( |
- chromeIdentityGetAuthTokenSavedArgs, 1, testIdentityToken)); |
+ |
+ expectInitialization(this.mockApis); |
+ |
+ expectStateMachineCalls( |
+ this.mockApis, |
+ testIdentityToken, |
+ testGeolocationPref, |
+ testUserRespondedToToast); |
+ |
+ var chromeNotificationGetAllSavedArgs = new SaveMockArguments(); |
+ this.mockApis.expects(exactly(2)). |
+ chrome_notifications_getAll( |
+ chromeNotificationGetAllSavedArgs.match(ANYTHING)). |
+ will( |
+ invokeCallback(chromeNotificationGetAllSavedArgs, 0, {}), |
+ invokeCallback(chromeNotificationGetAllSavedArgs, 0, {})); |
+ |
this.mockGlobals.expects(once()).showWelcomeToast(); |
// Invoking the tested function. |
initialize(); |
}); |
-TEST_F('GoogleNowBackgroundUnitTest', 'Initialize_ToastStateYes', function() { |
- // Tests the case when the user has answered "yes" to the toast in the past. |
- // In this case, the function should invoke startPollingCards(). |
+TEST_F('GoogleNowBackgroundUnitTest', 'Initialize_RunGoogleNow', function() { |
+ // Tests if Google Now will invoke startPollingCards when all |
+ // of the required state is fulfilled. |
- // Setup and expectations. |
- var testToastState = {toastState: ToastOptionResponse.CHOSE_YES}; |
+ // Setup and expectations. |
+ NOTIFICATION_CARDS_URL = 'https://some.server.url.com'; |
+ var testIdentityToken = 'some identity token'; |
+ var testGeolocationPref = true; |
+ var testUserRespondedToToast = {userRespondedToToast: true}; |
- mockInitializeDependencies(this); |
+ mockInitializeDependencies(this); |
- this.mockGlobals.expects(once()).recordEvent(DiagnosticEvent.EXTENSION_START); |
- var storageGetSavedArgs = new SaveMockArguments(); |
- this.mockApis.expects(once()). |
- storage_get( |
- storageGetSavedArgs.match(eq('toastState')), |
- storageGetSavedArgs.match(ANYTHING)). |
- will(invokeCallback(storageGetSavedArgs, 1, testToastState)); |
- this.mockGlobals.expects(once()).startPollingCards(); |
+ this.mockGlobals.expects(once()).recordEvent( |
+ DiagnosticEvent.EXTENSION_START); |
+ |
+ expectInitialization(this.mockApis); |
+ |
+ expectStateMachineCalls( |
+ this.mockApis, |
+ testIdentityToken, |
+ testGeolocationPref, |
+ testUserRespondedToToast); |
+ |
+ var chromeNotificationGetAllSavedArgs = new SaveMockArguments(); |
+ this.mockApis.expects(exactly(2)). |
+ chrome_notifications_getAll( |
+ chromeNotificationGetAllSavedArgs.match(ANYTHING)). |
+ will( |
+ invokeCallback(chromeNotificationGetAllSavedArgs, 0, {}), |
+ invokeCallback(chromeNotificationGetAllSavedArgs, 0, {})); |
+ |
+ this.mockGlobals.expects(once()).startPollingCards(); |
- // Invoking the tested function. |
- initialize(); |
+ // Invoking the tested function. |
+ initialize(); |
}); |
-TEST_F('GoogleNowBackgroundUnitTest', 'Initialize_ToastStateNo', function() { |
- // Tests the case when the user has answered "no" to the toast in the past. |
- // In this case, the function should do nothing. |
+TEST_F('GoogleNowBackgroundUnitTest', 'Initialize_NoGeolocation', function() { |
+ // Tests the case where everything is in place except for the |
+ // Geolocation Preference after the user responded to the toast. |
- // Setup and expectations. |
- var testToastState = {toastState: ToastOptionResponse.CHOSE_NO}; |
+ // Setup and expectations. |
+ NOTIFICATION_CARDS_URL = 'https://some.server.url.com'; |
+ var testIdentityToken = 'some identity token'; |
+ var testGeolocationPref = false; |
+ var testUserRespondedToToast = {userRespondedToToast: true}; |
- mockInitializeDependencies(this); |
+ mockInitializeDependencies(this); |
- this.mockGlobals.expects(once()).recordEvent(DiagnosticEvent.EXTENSION_START); |
- var storageGetSavedArgs = new SaveMockArguments(); |
- this.mockApis.expects(once()). |
- storage_get( |
- storageGetSavedArgs.match(eq('toastState')), |
- storageGetSavedArgs.match(ANYTHING)). |
- will(invokeCallback(storageGetSavedArgs, 1, testToastState)); |
+ this.mockGlobals.expects(once()).recordEvent( |
+ DiagnosticEvent.EXTENSION_START); |
+ |
+ expectInitialization(this.mockApis); |
+ |
+ expectStateMachineCalls( |
+ this.mockApis, |
+ testIdentityToken, |
+ testGeolocationPref, |
+ testUserRespondedToToast); |
+ |
+ var chromeNotificationGetAllSavedArgs = new SaveMockArguments(); |
+ this.mockApis.expects(exactly(2)). |
+ chrome_notifications_getAll( |
+ chromeNotificationGetAllSavedArgs.match(ANYTHING)). |
+ will( |
+ invokeCallback(chromeNotificationGetAllSavedArgs, 0, {}), |
+ invokeCallback(chromeNotificationGetAllSavedArgs, 0, {})); |
- // Invoking the tested function. |
- initialize(); |
+ // Invoking the tested function. |
+ initialize(); |
}); |
/** |