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 |
new file mode 100644 |
index 0000000000000000000000000000000000000000..01cb7894cb705d514ed2f92372f88d98cdd2add1 |
--- /dev/null |
+++ b/chrome/browser/resources/google_now/cards_unittest.gtestjs |
@@ -0,0 +1,435 @@ |
+// Copyright 2013 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+/** |
+ * Test fixture for cards.js. |
+ * @constructor |
+ * @extends {testing.Test} |
+ */ |
+function GoogleNowCardsUnitTest () { |
+ testing.Test.call(this); |
+} |
+ |
+GoogleNowCardsUnitTest.prototype = { |
+ __proto__: testing.Test.prototype, |
+ |
+ /** @override */ |
+ extraLibraries: [ |
+ 'cards.js' |
+ ] |
+}; |
+ |
+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 testDismissal = {testDismissalField: 'TEST DISMISSAL VALUE'}; |
+ |
+function setUpCardManagerTest(fixture) { |
+ fixture.makeAndRegisterMockApis([ |
+ 'chrome.alarms.onAlarm.addListener', |
+ 'chrome.alarms.clear', |
+ 'chrome.alarms.create', |
+ 'chrome.notifications.clear', |
+ 'chrome.notifications.create', |
+ 'chrome.notifications.update', |
+ 'storage.get' |
+ ]); |
+ |
+ chrome.runtime = {}; // No error. |
+ |
+ var onAlarmSavedArgs = new SaveMockArguments(); |
+ fixture.mockApis.expects(once()). |
+ chrome_alarms_onAlarm_addListener( |
+ onAlarmSavedArgs.match(ANYTHING)); |
+ |
+ var cardSet = buildCardSet(); |
+ |
+ Mock4JS.verifyAllMocks(); |
+ |
+ Date.now = function() { return 300000; }; |
+ |
+ var test = { |
+ cardSet: cardSet, |
+ alarmCallback: onAlarmSavedArgs.arguments [0] |
+ }; |
+ |
+ return test; |
+} |
+ |
+TEST_F('GoogleNowCardsUnitTest', 'BuildCardManager', function() { |
+ // Tests that buildCardSet() call completes with no problems. |
+ var test = setUpCardManagerTest(this); |
+ |
+ assertEquals('object', typeof test.cardSet); |
+ assertEquals('function', typeof test.alarmCallback); |
+}); |
+ |
+TEST_F('GoogleNowCardsUnitTest', 'CreateCard', function() { |
+ // Creates a new card with no trigger. |
+ |
+ // Setup and expectations. |
+ var test = setUpCardManagerTest(this); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedHideAlarmId); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedShowAlarmId); |
+ var chromeNotificationsCreateSavedArgs = new SaveMockArguments(); |
+ this.mockApis.expects(once()). |
+ chrome_notifications_create( |
+ chromeNotificationsCreateSavedArgs.match(eq(testCardId)), |
+ chromeNotificationsCreateSavedArgs.match(eqJSON(testNotification)), |
+ chromeNotificationsCreateSavedArgs.match(ANYTHING)). |
+ will(invokeCallback(chromeNotificationsCreateSavedArgs, 2, testCardId)); |
+ |
+ // Call tested method. |
+ var notificationData = test.cardSet.update({ |
+ notificationId: testCardId, |
+ notification: testNotification, |
+ actionUrls: testActionUrls, |
+ dismissal: testDismissal, |
+ version: 0}); |
+ |
+ // Check the return value. |
+ assertEquals( |
+ JSON.stringify({ |
+ actionUrls: testActionUrls, |
+ cardCreateInfo: { |
+ notification: testNotification, |
+ timeHide: undefined, |
+ version: 0 |
+ }, |
+ dismissalParameters: testDismissal |
+ }), |
+ JSON.stringify(notificationData)); |
+}); |
+ |
+TEST_F('GoogleNowCardsUnitTest', 'CreateCardEmptyTrigger', function() { |
+ // Creates a new card with empty trigger. |
+ |
+ // Setup and expectations. |
+ var test = setUpCardManagerTest(this); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedHideAlarmId); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedShowAlarmId); |
+ this.mockApis.expects(once()). |
+ chrome_notifications_create( |
+ testCardId, eqJSON(testNotification), ANYTHING); |
+ |
+ // Call tested method. |
+ var notificationData = test.cardSet.update({ |
+ notificationId: testCardId, |
+ notification: testNotification, |
+ actionUrls: testActionUrls, |
+ dismissal: testDismissal, |
+ version: 0, |
+ trigger: {}}); |
+ |
+ // Check the return value. |
+ assertEquals( |
+ JSON.stringify({ |
+ actionUrls: testActionUrls, |
+ cardCreateInfo: { |
+ notification: testNotification, |
+ timeHide: undefined, |
+ version: 0 |
+ }, |
+ dismissalParameters: testDismissal |
+ }), |
+ JSON.stringify(notificationData)); |
+}); |
+ |
+TEST_F('GoogleNowCardsUnitTest', 'CreateCardHideTime', function() { |
+ // Creates a new card with trigger specifying hide time. |
+ |
+ // Setup and expectations. |
+ var test = setUpCardManagerTest(this); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedHideAlarmId); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedShowAlarmId); |
+ var chromeNotificationsCreateSavedArgs = new SaveMockArguments(); |
+ this.mockApis.expects(once()). |
+ chrome_notifications_create( |
+ chromeNotificationsCreateSavedArgs.match(eq(testCardId)), |
+ chromeNotificationsCreateSavedArgs.match(eqJSON(testNotification)), |
+ chromeNotificationsCreateSavedArgs.match(ANYTHING)). |
+ will(invokeCallback(chromeNotificationsCreateSavedArgs, 2, testCardId)); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_create(expectedHideAlarmId, eqJSON({when: 1313000})); |
+ |
+ // Call tested method. |
+ var notificationData = test.cardSet.update({ |
+ notificationId: testCardId, |
+ notification: testNotification, |
+ actionUrls: testActionUrls, |
+ dismissal: testDismissal, |
+ version: 0, |
+ trigger: {hideTimeSec: 1013}}); |
+ |
+ // Check the return value. |
+ assertEquals( |
+ JSON.stringify({ |
+ actionUrls: testActionUrls, |
+ cardCreateInfo: { |
+ notification: testNotification, |
+ timeHide: 1313000, |
+ version: 0 |
+ }, |
+ dismissalParameters: testDismissal |
+ }), |
+ JSON.stringify(notificationData)); |
+}); |
+ |
+TEST_F('GoogleNowCardsUnitTest', 'UpdateCardSameVersion', function() { |
+ // Updates a card with another card with same version. |
+ |
+ // Setup and expectations. |
+ var test = setUpCardManagerTest(this); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedHideAlarmId); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedShowAlarmId); |
+ var chromeNotificationsCreateSavedArgs = new SaveMockArguments(); |
+ this.mockApis.expects(once()). |
+ chrome_notifications_update( |
+ chromeNotificationsCreateSavedArgs.match(eq(testCardId)), |
+ chromeNotificationsCreateSavedArgs.match(eqJSON(testNotification)), |
+ chromeNotificationsCreateSavedArgs.match(ANYTHING)). |
+ will(invokeCallback(chromeNotificationsCreateSavedArgs, 2, true)); |
+ |
+ // Call tested method. |
+ var notificationData = test.cardSet.update({ |
+ notificationId: testCardId, |
+ notification: testNotification, |
+ actionUrls: testActionUrls, |
+ dismissal: testDismissal, |
+ version: 0}, |
+ 0); |
+ |
+ // Check the return value. |
+ assertEquals( |
+ JSON.stringify({ |
+ actionUrls: testActionUrls, |
+ cardCreateInfo: { |
+ notification: testNotification, |
+ version: 0, |
+ previousVersion: 0 |
+ }, |
+ dismissalParameters: testDismissal |
+ }), |
+ JSON.stringify(notificationData)); |
+}); |
+ |
+TEST_F('GoogleNowCardsUnitTest', 'UpdateCardSameVersionHideTime', function() { |
+ // Updates a card with another card with same version and specifying hide |
+ // time. |
+ |
+ // Setup and expectations. |
+ var test = setUpCardManagerTest(this); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedHideAlarmId); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedShowAlarmId); |
+ var chromeNotificationsCreateSavedArgs = new SaveMockArguments(); |
+ this.mockApis.expects(once()). |
+ chrome_notifications_update( |
+ chromeNotificationsCreateSavedArgs.match(eq(testCardId)), |
+ chromeNotificationsCreateSavedArgs.match(eqJSON(testNotification)), |
+ chromeNotificationsCreateSavedArgs.match(ANYTHING)). |
+ will(invokeCallback(chromeNotificationsCreateSavedArgs, 2, testCardId)); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_create(expectedHideAlarmId, eqJSON({when: 1313000})); |
+ |
+ // Call tested method. |
+ test.cardSet.update({ |
+ notificationId: testCardId, |
+ notification: testNotification, |
+ actionUrls: testActionUrls, |
+ dismissal: testDismissal, |
+ version: 0, |
+ trigger: {hideTimeSec: 1013}}, |
+ 0); |
+}); |
+ |
+TEST_F('GoogleNowCardsUnitTest', 'UpdateCardDifferentVersion', function() { |
+ // Updates a card with another card with different version. |
+ |
+ // Setup and expectations. |
+ var test = setUpCardManagerTest(this); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedHideAlarmId); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedShowAlarmId); |
+ this.mockApis.expects(once()). |
+ chrome_notifications_create( |
+ testCardId, eqJSON(testNotification), ANYTHING); |
+ |
+ // Call tested method. |
+ test.cardSet.update({ |
+ notificationId: testCardId, |
+ notification: testNotification, |
+ actionUrls: testActionUrls, |
+ dismissal: testDismissal, |
+ version: 0}, |
+ 1); |
+}); |
+ |
+TEST_F('GoogleNowCardsUnitTest', 'CreateCardTriggerShowNow', function() { |
+ // Creates a new card with trigger that requires showing the card immediately. |
+ |
+ // Setup and expectations. |
+ var test = setUpCardManagerTest(this); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedHideAlarmId); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedShowAlarmId); |
+ this.mockApis.expects(once()). |
+ chrome_notifications_create( |
+ testCardId, eqJSON(testNotification), ANYTHING); |
+ |
+ // Call tested method. |
+ test.cardSet.update({ |
+ notificationId: testCardId, |
+ notification: testNotification, |
+ actionUrls: testActionUrls, |
+ dismissal: testDismissal, |
+ version: 0, |
+ trigger: {showTimeSec: 0}}); |
+}); |
+ |
+TEST_F('GoogleNowCardsUnitTest', 'CreateCardTriggerShowLater', function() { |
+ // Creates a new card with trigger that requires showing the card later. |
+ // We are supposed to schedule an alarm to show the notification later. |
+ |
+ // Setup and expectations. |
+ var test = setUpCardManagerTest(this); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedHideAlarmId); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_create(expectedShowAlarmId, eqJSON({when: 539000})); |
+ |
+ // Call tested method. |
+ test.cardSet.update({ |
+ notificationId: testCardId, |
+ notification: testNotification, |
+ actionUrls: testActionUrls, |
+ dismissal: testDismissal, |
+ version: 0, |
+ trigger: {showTimeSec: 239}}); |
+}); |
+ |
+TEST_F('GoogleNowCardsUnitTest', 'ClearCard', function() { |
+ // Clears a card. |
+ |
+ // Setup and expectations. |
+ var test = setUpCardManagerTest(this); |
+ this.mockApis.expects(once()). |
+ chrome_notifications_clear(testCardId, ANYTHING); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedShowAlarmId); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_clear(expectedHideAlarmId); |
+ |
+ // Call tested method. |
+ test.cardSet.clear(testCardId); |
+}); |
+ |
+TEST_F('GoogleNowCardsUnitTest', 'onAlarmUnrecognized', function() { |
+ // Tests onAlarm does nothing on an unrelated alarm. |
+ var test = setUpCardManagerTest(this); |
+ |
+ // Call tested method. |
+ test.alarmCallback({name: 'unrelated'}); |
+}); |
+ |
+TEST_F('GoogleNowCardsUnitTest', 'onAlarmShowNoData', function() { |
+ // Tests onAlarm for the 'show' alarm when there is no data for the card. |
+ var test = setUpCardManagerTest(this); |
+ var storageGetSavedArgs = new SaveMockArguments(); |
+ this.mockApis.expects(once()). |
+ storage_get( |
+ storageGetSavedArgs.match(eq('notificationsData')), |
+ storageGetSavedArgs.match(ANYTHING)). |
+ will(invokeCallback(storageGetSavedArgs, 1, {})); |
+ |
+ // Call tested method. |
+ test.alarmCallback({name: expectedShowAlarmId}); |
+}); |
+ |
+TEST_F('GoogleNowCardsUnitTest', 'onAlarmShowHasDataCreate', function() { |
+ // Tests onAlarm for the 'show' alarm when there is data for the card. The |
+ // notification will be created because there is no previous version. |
+ var test = setUpCardManagerTest(this); |
+ var storageGetSavedArgs = new SaveMockArguments(); |
+ this.mockApis.expects(once()). |
+ storage_get( |
+ storageGetSavedArgs.match(eq('notificationsData')), |
+ storageGetSavedArgs.match(ANYTHING)). |
+ will(invokeCallback( |
+ storageGetSavedArgs, |
+ 1, |
+ { |
+ notificationsData: { |
+ 'TEST CARD ID': { |
+ actionUrls: testActionUrls, |
+ cardCreateInfo: { |
+ notification: testNotification, |
+ timeHide: 1313000, |
+ version: 0}}}})); |
+ var chromeNotificationsCreateSavedArgs = new SaveMockArguments(); |
+ this.mockApis.expects(once()). |
+ chrome_notifications_create( |
+ chromeNotificationsCreateSavedArgs.match(eq(testCardId)), |
+ chromeNotificationsCreateSavedArgs.match(eqJSON(testNotification)), |
+ chromeNotificationsCreateSavedArgs.match(ANYTHING)). |
+ will(invokeCallback(chromeNotificationsCreateSavedArgs, 2, testCardId)); |
+ this.mockApis.expects(once()). |
+ chrome_alarms_create(expectedHideAlarmId, eqJSON({when: 1313000})); |
+ |
+ // Call tested method. |
+ test.alarmCallback({name: expectedShowAlarmId}); |
+}); |
+ |
+TEST_F('GoogleNowCardsUnitTest', 'onAlarmShowHasDataUpdate', function() { |
+ // Tests onAlarm for the 'show' alarm when there is data for the card. The |
+ // notification will be updated because previous version is same as current. |
+ var test = setUpCardManagerTest(this); |
+ var storageGetSavedArgs = new SaveMockArguments(); |
+ this.mockApis.expects(once()). |
+ storage_get( |
+ storageGetSavedArgs.match(eq('notificationsData')), |
+ storageGetSavedArgs.match(ANYTHING)). |
+ will(invokeCallback( |
+ storageGetSavedArgs, |
+ 1, |
+ { |
+ notificationsData: { |
+ 'TEST CARD ID': { |
+ actionUrls: testActionUrls, |
+ cardCreateInfo: { |
+ notification: testNotification, |
+ timeHide: 1313000, |
+ version: 0, |
+ previousVersion:0}}}})); |
+ var chromeNotificationsCreateSavedArgs = new SaveMockArguments(); |
+ this.mockApis.expects(once()). |
+ chrome_notifications_update( |
+ testCardId, eqJSON(testNotification), ANYTHING); |
+ |
+ // Call tested method. |
+ test.alarmCallback({name: expectedShowAlarmId}); |
+}); |
+ |
+TEST_F('GoogleNowCardsUnitTest', 'onAlarmHide', function() { |
+ // Tests onAlarm for the 'hide' alarm. |
+ var test = setUpCardManagerTest(this); |
+ this.mockApis.expects(once()). |
+ chrome_notifications_clear(testCardId, ANYTHING); |
+ |
+ // Call tested method. |
+ test.alarmCallback({name: expectedHideAlarmId}); |
+}); |