Index: chrome/browser/resources/google_now/cards_unittest.gtestjs |
diff --git a/chrome/browser/resources/google_now/cards_unittest.gtestjs b/chrome/browser/resources/google_now/cards_unittest.gtestjs |
index 2c80e4d8cb2b4c32e4d0e8202deb665899ce5bb0..a3e0ec1508d72a87513fdb866bfa48891d47120a 100644 |
--- a/chrome/browser/resources/google_now/cards_unittest.gtestjs |
+++ b/chrome/browser/resources/google_now/cards_unittest.gtestjs |
@@ -20,24 +20,39 @@ GoogleNowCardsUnitTest.prototype = { |
] |
}; |
+// Test implementation of a function provided by utility.js. |
+function verify(condition, message) { |
+ assertTrue(condition, message); |
+} |
+ |
var testCardId = 'TEST CARD ID'; |
-var testNotification = {testNotificationField: 'TEST NOTIFICATION VALUE'}; |
-var expectedShowAlarmId = 'card-show-TEST CARD ID'; |
-var expectedHideAlarmId = 'card-hide-TEST CARD ID'; |
-var testActionUrls = {testField: 'TEST VALUE'}; |
-var testDismissals = [ |
- {testDismissalField: 'TEST DISMISSAL VALUE 1'}, |
- {testDismissalField: 'TEST DISMISSAL VALUE 2'} |
-]; |
-var testGroupRank = 271; |
+var testNotificationIdA = 'TEST CARD ID-A'; |
+var testNotificationIdB = 'TEST CARD ID-B'; |
+var testNotificationA = { |
+ testNotificationField: 'TEST NOTIFICATION VALUE A', |
+ priority: 1 |
+}; |
+var testNotificationB = { |
+ testNotificationField: 'TEST NOTIFICATION VALUE B', |
+ priority: 2 |
+}; |
+var groupNameA = 'A'; |
+var groupNameB = 'B'; |
+var expectedAlarmId = 'card-TEST CARD ID'; |
+var testActionUrlsA = {testField: 'TEST VALUE A'}; |
+var testActionUrlsB = {testField: 'TEST VALUE B'}; |
+var testDismissalA = {testDismissalField: 'TEST DISMISSAL VALUE A'}; |
+var testDismissalB = {testDismissalField: 'TEST DISMISSAL VALUE B'}; |
var LOCATION_CARDS_LINK_THRESHOLD = 10; |
var localStorage = {locationCardsShown: 0}; |
+var notificationUpdateSuccessful = true; |
+var notificationUpdateFailed = false; |
function setUpCardManagerTest(fixture) { |
fixture.makeAndRegisterMockApis([ |
'chrome.alarms.clear', |
'chrome.alarms.create', |
- 'chrome.notifications.clear', |
+ 'instrumented.notifications.clear', |
'chrome.storage.local.set', |
'countLocationCard', |
'instrumented.alarms.onAlarm.addListener', |
@@ -76,6 +91,393 @@ TEST_F('GoogleNowCardsUnitTest', 'BuildCardManager', function() { |
assertEquals('function', typeof test.alarmCallback); |
}); |
+TEST_F('GoogleNowCardsUnitTest', 'UpdateSimpleHideFuture', function() { |
+ // Update a simple card with the hide event in future. |
+ |
+ var testUncombinedNotification = { |
+ receivedNotification: { |
+ notificationId: testNotificationIdA, |
+ chromeNotificationId: testCardId, |
+ chromeNotificationOptions: testNotificationA, |
+ actionUrls: testActionUrlsA, |
+ dismissal: testDismissalA, |
+ groupName: groupNameA |
+ }, |
+ hideTime: 300001 |
+ }; |
+ |
+ // Setup and expectations. |
+ var test = setUpCardManagerTest(this); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedAlarmId); |
+ var chromeNotificationsUpdateSavedArgs = new SaveMockArguments(); |
+ this.mockApis.expects(once()). |
+ instrumented_notifications_update( |
+ chromeNotificationsUpdateSavedArgs.match(eq(testCardId)), |
+ chromeNotificationsUpdateSavedArgs.match(eqJSON(testNotificationA)), |
+ chromeNotificationsUpdateSavedArgs.match(ANYTHING)). |
+ will(invokeCallback( |
+ chromeNotificationsUpdateSavedArgs, 2, notificationUpdateSuccessful)); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_create(expectedAlarmId, eqJSON({when: 300001})); |
+ |
+ // Call tested method. |
+ var notificationData = test.cardSet.update( |
+ testCardId, [testUncombinedNotification], {}); |
+ |
+ // Check the return value. |
+ assertEquals( |
+ JSON.stringify({ |
+ actionUrls: testActionUrlsA, |
+ timestamp: 300000, |
+ combinedCard: [testUncombinedNotification] |
+ }), |
+ JSON.stringify(notificationData)); |
+}); |
+ |
+TEST_F('GoogleNowCardsUnitTest', 'CreateSimpleHideFuture', function() { |
+ // Create a simple card with the hide event in future. |
+ |
+ var testUncombinedNotification = { |
+ receivedNotification: { |
+ notificationId: testNotificationIdA, |
+ chromeNotificationId: testCardId, |
+ chromeNotificationOptions: testNotificationA, |
+ actionUrls: testActionUrlsA, |
+ dismissal: testDismissalA, |
+ groupName: groupNameA |
+ }, |
+ hideTime: 300001 |
+ }; |
+ |
+ // Setup and expectations. |
+ var test = setUpCardManagerTest(this); |
+ this.makeMockLocalFunctions(['onCardShown']); |
+ |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedAlarmId); |
+ |
+ // notifications.update will return false, which will trigger |
+ // notifications.create. |
+ var chromeNotificationsUpdateSavedArgs = new SaveMockArguments(); |
+ this.mockApis.expects(once()). |
+ instrumented_notifications_update( |
+ chromeNotificationsUpdateSavedArgs.match(eq(testCardId)), |
+ chromeNotificationsUpdateSavedArgs.match(eqJSON(testNotificationA)), |
+ chromeNotificationsUpdateSavedArgs.match(ANYTHING)). |
+ will(invokeCallback( |
+ chromeNotificationsUpdateSavedArgs, 2, notificationUpdateFailed)); |
+ var chromeNotificationsCreateSavedArgs = new SaveMockArguments(); |
+ this.mockApis.expects(once()). |
+ instrumented_notifications_create( |
+ chromeNotificationsCreateSavedArgs.match(eq(testCardId)), |
+ chromeNotificationsCreateSavedArgs.match(eqJSON(testNotificationA)), |
+ chromeNotificationsCreateSavedArgs.match(ANYTHING)). |
+ will(invokeCallback(chromeNotificationsCreateSavedArgs, 2, testCardId)); |
+ |
+ this.mockLocalFunctions.expects(once()). |
+ onCardShown(eqJSON(testUncombinedNotification.receivedNotification)); |
+ |
+ this.mockApis.expects(once()). |
+ chrome_alarms_create(expectedAlarmId, eqJSON({when: 300001})); |
+ |
+ // Call tested method. |
+ var notificationData = test.cardSet.update( |
+ testCardId, |
+ [testUncombinedNotification], |
+ {}, |
+ this.mockLocalFunctions.functions().onCardShown); |
+ |
+ // Check the return value. |
+ assertEquals( |
+ JSON.stringify({ |
+ actionUrls: testActionUrlsA, |
+ timestamp: 300000, |
+ combinedCard: [testUncombinedNotification] |
+ }), |
+ JSON.stringify(notificationData)); |
+}); |
+ |
+TEST_F('GoogleNowCardsUnitTest', 'CreateSimpleShowFuture', function() { |
+ // Create a simple card with the show event in future. Should create an alarm |
+ // to fire at the show time. |
+ |
+ var testUncombinedNotification = { |
+ receivedNotification: { |
+ notificationId: testNotificationIdA, |
+ chromeNotificationId: testCardId, |
+ chromeNotificationOptions: testNotificationA, |
+ actionUrls: testActionUrlsA, |
+ dismissal: testDismissalA, |
+ groupName: groupNameA |
+ }, |
+ showTime: 300001, |
+ hideTime: 300002 |
+ }; |
+ |
+ // Setup and expectations. |
+ var test = setUpCardManagerTest(this); |
+ |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedAlarmId); |
+ this.mockApis.expects(once()). |
+ instrumented_notifications_clear(testCardId, ANYTHING); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_create(expectedAlarmId, eqJSON({when: 300001})); |
+ |
+ // Call tested method. |
+ var notificationData = test.cardSet.update( |
+ testCardId, [testUncombinedNotification], {}); |
+ |
+ // Check the return value. |
+ assertEquals( |
+ JSON.stringify({ |
+ timestamp: 300000, |
+ combinedCard: [testUncombinedNotification] |
+ }), |
+ JSON.stringify(notificationData)); |
+}); |
+ |
+TEST_F('GoogleNowCardsUnitTest', 'UpdateSimpleHidePast', function() { |
+ // Update a simple card with the hide event in the past (actually, present). |
+ // Should clear the notification. |
+ |
+ var testUncombinedNotification = { |
+ receivedNotification: { |
+ notificationId: testNotificationIdA, |
+ chromeNotificationId: testCardId, |
+ chromeNotificationOptions: testNotificationA, |
+ actionUrls: testActionUrlsA, |
+ dismissal: testDismissalA, |
+ groupName: groupNameA |
+ }, |
+ hideTime: 300000 |
+ }; |
+ |
+ // Setup and expectations. |
+ var test = setUpCardManagerTest(this); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedAlarmId); |
+ this.mockApis.expects(once()). |
+ instrumented_notifications_clear(testCardId, ANYTHING); |
+ |
+ var groups = { |
+ A: { |
+ cards: [{chromeNotificationId: 'ID1'}, {chromeNotificationId: testCardId}] |
+ }, |
+ B: { |
+ cards: [{chromeNotificationId: testCardId}, {chromeNotificationId: 'ID2'}] |
+ } |
+ }; |
+ |
+ // Call tested method. |
+ var notificationData = test.cardSet.update( |
+ testCardId, [testUncombinedNotification], groups); |
+ |
+ // Check the return value. |
+ assertEquals(undefined, notificationData); |
+ |
+ // Check that groups were cleaned up. |
+ var expectedCleanedGroups = { |
+ A: { |
+ cards: [{chromeNotificationId: 'ID1'}] |
+ }, |
+ B: { |
+ cards: [{chromeNotificationId: 'ID2'}] |
+ } |
+ }; |
+ |
+ assertEquals(JSON.stringify(expectedCleanedGroups), JSON.stringify(groups)); |
+}); |
+ |
+TEST_F('GoogleNowCardsUnitTest', 'UpdateComplex', function() { |
+ // Update a combined card that contains 2 uncombined cards. The card from |
+ // group B has higher priority and wins. |
+ |
+ var testUncombinedNotificationA = { |
+ receivedNotification: { |
+ notificationId: testNotificationIdA, |
+ chromeNotificationId: testCardId, |
+ chromeNotificationOptions: testNotificationA, |
+ actionUrls: testActionUrlsA, |
+ dismissal: testDismissalA, |
+ groupName: groupNameA |
+ }, |
+ hideTime: 300001 |
+ }; |
+ |
+ var testUncombinedNotificationB = { |
+ receivedNotification: { |
+ notificationId: testNotificationIdB, |
+ chromeNotificationId: testCardId, |
+ chromeNotificationOptions: testNotificationB, |
+ actionUrls: testActionUrlsB, |
+ dismissal: testDismissalB, |
+ groupName: groupNameB |
+ }, |
+ hideTime: 300002 |
+ }; |
+ |
+ // Setup and expectations. |
+ var test = setUpCardManagerTest(this); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedAlarmId); |
+ var chromeNotificationsUpdateSavedArgs = new SaveMockArguments(); |
+ this.mockApis.expects(once()). |
+ instrumented_notifications_update( |
+ chromeNotificationsUpdateSavedArgs.match(eq(testCardId)), |
+ chromeNotificationsUpdateSavedArgs.match(eqJSON(testNotificationB)), |
+ chromeNotificationsUpdateSavedArgs.match(ANYTHING)). |
+ will(invokeCallback( |
+ chromeNotificationsUpdateSavedArgs, 2, notificationUpdateSuccessful)); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_create(expectedAlarmId, eqJSON({when: 300001})); |
+ |
+ // Call tested method. |
+ var notificationData = test.cardSet.update( |
+ testCardId, |
+ [testUncombinedNotificationA, testUncombinedNotificationB], |
+ {}); |
+ |
+ // Check the return value. |
+ assertEquals( |
+ JSON.stringify({ |
+ actionUrls: testActionUrlsB, |
+ timestamp: 300000, |
+ combinedCard: [testUncombinedNotificationA, testUncombinedNotificationB] |
+ }), |
+ JSON.stringify(notificationData)); |
+}); |
+ |
+TEST_F('GoogleNowCardsUnitTest', 'DismissSimple', function() { |
+ // Dismiss a combined card that contains 1 uncombined currently visible card. |
+ // The notification should be deleted, and the card data should be cleared. |
+ |
+ var testUncombinedNotificationA = { |
+ receivedNotification: { |
+ notificationId: testNotificationIdA, |
+ chromeNotificationId: testCardId, |
+ chromeNotificationOptions: testNotificationA, |
+ actionUrls: testActionUrlsA, |
+ dismissal: testDismissalA, |
+ groupName: groupNameA |
+ }, |
+ showTime: 299995, |
+ hideTime: 300005 |
+ }; |
+ |
+ // Setup and expectations. |
+ var test = setUpCardManagerTest(this); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedAlarmId); |
+ this.mockApis.expects(once()). |
+ instrumented_notifications_clear(testCardId, ANYTHING); |
+ |
+ var groups = { |
+ A: { |
+ cards: [{chromeNotificationId: 'ID1'}, {chromeNotificationId: testCardId}] |
+ }, |
+ B: { |
+ cards: [{chromeNotificationId: testCardId}, {chromeNotificationId: 'ID2'}] |
+ } |
+ }; |
+ |
+ // Call tested method. |
+ var dismissalResult = test.cardSet.onDismissal( |
+ testCardId, |
+ { |
+ actionUrls: testActionUrlsA, |
+ timestamp: 299999, |
+ combinedCard: [testUncombinedNotificationA] |
+ }, |
+ groups); |
+ |
+ // Check the return value. |
+ assertEquals( |
+ JSON.stringify({ |
+ dismissals: [ |
+ {notificationId: testNotificationIdA, parameters: testDismissalA} |
+ ], |
+ notificationData: undefined |
+ }), |
+ JSON.stringify(dismissalResult)); |
+ |
+ // Check that groups were cleaned up. |
+ var expectedCleanedGroups = { |
+ A: { |
+ cards: [{chromeNotificationId: 'ID1'}] |
+ }, |
+ B: { |
+ cards: [{chromeNotificationId: 'ID2'}] |
+ } |
+ }; |
+ |
+ assertEquals(JSON.stringify(expectedCleanedGroups), JSON.stringify(groups)); |
+}); |
+ |
+TEST_F('GoogleNowCardsUnitTest', 'DismissComplex', function() { |
+ // Dismiss a combined card that contains 2 uncombined cards. One of them (B), |
+ // is currently shown, and it should be dismissed. The other one (A) has |
+ // showTime in future, and it should not be dismissed. |
+ |
+ var testUncombinedNotificationA = { |
+ receivedNotification: { |
+ notificationId: testNotificationIdA, |
+ chromeNotificationId: testCardId, |
+ chromeNotificationOptions: testNotificationA, |
+ actionUrls: testActionUrlsA, |
+ dismissal: testDismissalA, |
+ groupName: groupNameA |
+ }, |
+ showTime: 300010, |
+ hideTime: 300011 |
+ }; |
+ |
+ var testUncombinedNotificationB = { |
+ receivedNotification: { |
+ notificationId: testNotificationIdB, |
+ chromeNotificationId: testCardId, |
+ chromeNotificationOptions: testNotificationB, |
+ actionUrls: testActionUrlsB, |
+ dismissal: testDismissalB, |
+ groupName: groupNameB |
+ }, |
+ showTime: 299995, |
+ hideTime: 300005 |
+ }; |
+ |
+ // Setup and expectations. |
+ var test = setUpCardManagerTest(this); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedAlarmId); |
+ this.mockApis.expects(once()). |
+ instrumented_notifications_clear(testCardId, ANYTHING); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_create(expectedAlarmId, eqJSON({when: 300010})); |
+ |
+ // Call tested method. |
+ var dismissalResult = test.cardSet.onDismissal( |
+ testCardId, |
+ { |
+ actionUrls: testActionUrlsB, |
+ timestamp: 299999, |
+ combinedCard: [testUncombinedNotificationA, testUncombinedNotificationB] |
+ }, |
+ {}); |
+ |
+ // Check the return value. |
+ assertEquals( |
+ JSON.stringify({ |
+ dismissals: [ |
+ {notificationId: testNotificationIdB, parameters: testDismissalB} |
+ ], |
+ notificationData: { |
+ timestamp: 300000, |
+ combinedCard: [testUncombinedNotificationA] |
+ }}), |
+ JSON.stringify(dismissalResult)); |
+}); |
+ |
TEST_F('GoogleNowCardsUnitTest', 'onAlarmUnrecognized', function() { |
// Tests onAlarm does nothing on an unrelated alarm. |
var test = setUpCardManagerTest(this); |
@@ -83,3 +485,145 @@ TEST_F('GoogleNowCardsUnitTest', 'onAlarmUnrecognized', function() { |
// Call tested method. |
test.alarmCallback({name: 'unrelated'}); |
}); |
+ |
+TEST_F('GoogleNowCardsUnitTest', 'onAlarmClear', function() { |
+ // Tests onAlarm fired at a moment past all card's events. The card should be |
+ // cleaned. |
+ var testUncombinedNotification = { |
+ receivedNotification: { |
+ notificationId: testNotificationIdA, |
+ chromeNotificationId: testCardId, |
+ chromeNotificationOptions: testNotificationA, |
+ actionUrls: testActionUrlsA, |
+ dismissal: testDismissalA, |
+ groupName: groupNameA |
+ }, |
+ hideTime: 299999 |
+ }; |
+ |
+ // Setup and expectations. |
+ var test = setUpCardManagerTest(this); |
+ var tasksAddSavedArgs = new SaveMockArguments(); |
+ this.mockApis.expects(once()). |
+ tasks_add( |
+ tasksAddSavedArgs.match(eq(UPDATE_CARD_TASK_NAME)), |
+ tasksAddSavedArgs.match(ANYTHING)). |
+ will(invokeCallback(tasksAddSavedArgs,1)); |
+ var storageGetSavedArgs = new SaveMockArguments(); |
+ this.mockApis.expects(once()). |
+ instrumented_storage_local_get( |
+ storageGetSavedArgs.match( |
+ eqJSON(['notificationsData', 'notificationGroups'])), |
+ storageGetSavedArgs.match(ANYTHING)). |
+ will(invokeCallback( |
+ storageGetSavedArgs, |
+ 1, |
+ { |
+ notificationsData: { |
+ 'TEST CARD ID': { |
+ actionUrls: testActionUrlsA, |
+ timestamp: 299998, |
+ combinedCard: [testUncombinedNotification] |
+ }, |
+ 'TEST CARD ID 1': {testField: 'TEST VALUE 1'} |
+ }, |
+ notificationGroups: { |
+ A: { |
+ cards: [ |
+ {chromeNotificationId: 'ID1'}, |
+ {chromeNotificationId: testCardId} |
+ ] |
+ }, |
+ B: { |
+ cards: [ |
+ {chromeNotificationId: testCardId}, |
+ {chromeNotificationId: 'ID2'} |
+ ] |
+ }}})); |
+ this.mockApis.expects(once()). |
+ instrumented_notifications_clear(testCardId, ANYTHING); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedAlarmId); |
+ this.mockApis.expects(once()). |
+ chrome_storage_local_set(eqJSON({ |
+ notificationsData: { |
+ 'TEST CARD ID 1': {testField: 'TEST VALUE 1'} |
+ }, |
+ notificationGroups: { |
+ A: { |
+ cards: [{chromeNotificationId: 'ID1'}] |
+ }, |
+ B: { |
+ cards: [{chromeNotificationId: 'ID2'}] |
+ }}})); |
+ |
+ // Call tested method. |
+ test.alarmCallback({name: expectedAlarmId}); |
+}); |
+ |
+TEST_F('GoogleNowCardsUnitTest', 'onAlarmUpdate', function() { |
+ // Tests onAlarm fired at a moment when there are future card's events. The |
+ // card needs to be updated. |
+ var testUncombinedNotification = { |
+ receivedNotification: { |
+ notificationId: testNotificationIdA, |
+ chromeNotificationId: testCardId, |
+ chromeNotificationOptions: testNotificationA, |
+ actionUrls: testActionUrlsA, |
+ dismissal: testDismissalA, |
+ groupName: groupNameA |
+ }, |
+ hideTime: 300001 |
+ }; |
+ |
+ // Setup and expectations. |
+ var test = setUpCardManagerTest(this); |
+ var tasksAddSavedArgs = new SaveMockArguments(); |
+ this.mockApis.expects(once()). |
+ tasks_add( |
+ tasksAddSavedArgs.match(eq(UPDATE_CARD_TASK_NAME)), |
+ tasksAddSavedArgs.match(ANYTHING)). |
+ will(invokeCallback(tasksAddSavedArgs,1)); |
+ var storageGetSavedArgs = new SaveMockArguments(); |
+ this.mockApis.expects(once()). |
+ instrumented_storage_local_get( |
+ storageGetSavedArgs.match( |
+ eqJSON(['notificationsData', 'notificationGroups'])), |
+ storageGetSavedArgs.match(ANYTHING)). |
+ will(invokeCallback( |
+ storageGetSavedArgs, |
+ 1, |
+ { |
+ notificationsData: { |
+ 'TEST CARD ID': { |
+ actionUrls: testActionUrlsA, |
+ timestamp: 299998, |
+ combinedCard: [testUncombinedNotification] |
+ }}})); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedAlarmId); |
+ var chromeNotificationsUpdateSavedArgs = new SaveMockArguments(); |
+ this.mockApis.expects(once()). |
+ instrumented_notifications_update( |
+ chromeNotificationsUpdateSavedArgs.match(eq(testCardId)), |
+ chromeNotificationsUpdateSavedArgs.match(eqJSON(testNotificationA)), |
+ chromeNotificationsUpdateSavedArgs.match(ANYTHING)). |
+ will(invokeCallback( |
+ chromeNotificationsUpdateSavedArgs, 2, notificationUpdateSuccessful)); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_create(expectedAlarmId, eqJSON({when: 300001})); |
+ this.mockApis.expects(once()). |
+ chrome_storage_local_set(eqJSON({ |
+ notificationsData: { |
+ 'TEST CARD ID': { |
+ actionUrls: testActionUrlsA, |
+ timestamp: 300000, |
+ combinedCard: [testUncombinedNotification] |
+ } |
+ }, |
+ notificationGroups: { |
+ }})); |
+ |
+ // Call tested method. |
+ test.alarmCallback({name: expectedAlarmId}); |
+}); |