Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4017)

Unified Diff: chrome/test/data/webui/settings/android_apps_page_test.js

Issue 2873853002: arc: Handle ARC events in MD Settings (Closed)
Patch Set: updatge Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/test/data/webui/settings/android_apps_page_test.js
diff --git a/chrome/test/data/webui/settings/android_apps_page_test.js b/chrome/test/data/webui/settings/android_apps_page_test.js
index f5e2daceb010e04a6ff2d0a821576192b512d6ca..e151705fd38417739e296a5080cc920d18deef45 100644
--- a/chrome/test/data/webui/settings/android_apps_page_test.js
+++ b/chrome/test/data/webui/settings/android_apps_page_test.js
@@ -20,7 +20,7 @@ TestAndroidAppsBrowserProxy.prototype = {
/** @override */
requestAndroidAppsInfo: function() {
this.methodCalled('requestAndroidAppsInfo');
- cr.webUIListenerCallback('android-apps-info-update', {appReady: false});
+ this.setAndroidAppsState(false, false);
},
/** override */
@@ -28,10 +28,14 @@ TestAndroidAppsBrowserProxy.prototype = {
this.methodCalled('showAndroidAppsSettings');
},
- setAppReady: function(ready) {
+ setAndroidAppsState: function(playStoreEnabled, settingsAppAvailable) {
// We need to make sure to pass a new object here, otherwise the property
// change event may not get fired in the listener.
- cr.webUIListenerCallback('android-apps-info-update', {appReady: ready});
+ var appsInfo = {
+ playStoreEnabled: playStoreEnabled,
+ settingsAppAvailable: settingsAppAvailable,
+ };
+ cr.webUIListenerCallback('android-apps-info-update', appsInfo);
},
};
@@ -62,7 +66,7 @@ suite('AndroidAppsPageTests', function() {
return androidAppsBrowserProxy.whenCalled('requestAndroidAppsInfo')
.then(function() {
- androidAppsBrowserProxy.setAppReady(false);
+ androidAppsBrowserProxy.setAndroidAppsState(false, false);
});
});
@@ -75,7 +79,7 @@ suite('AndroidAppsPageTests', function() {
Polymer.dom.flush();
assertTrue(androidAppsPage.prefs.arc.enabled.value);
- androidAppsBrowserProxy.setAppReady(true);
+ androidAppsBrowserProxy.setAndroidAppsState(true, false);
Polymer.dom.flush();
assertTrue(!!androidAppsPage.$$('.subpage-arrow'));
});
@@ -83,12 +87,46 @@ suite('AndroidAppsPageTests', function() {
suite('SubPage', function() {
var subpage;
+ var initialHRef;
+
+ /**
+ * Returns a new promise that resolves after a window 'popstate' event.
+ * @return {!Promise}
+ */
+ function whenPopState() {
+ var promise = new Promise(function(resolve) {
+ window.addEventListener('popstate', function callback() {
+ window.removeEventListener('popstate', callback);
+ resolve();
+ });
+ });
+ return promise;
+ }
+
+ /**
+ * Returns a new promise that resolves after a node becomes available for
+ * interaction.
+ * @return {!Promise}
+ */
+ function whenNodeCanInteract(node) {
+ var promise = new Promise(function(resolve) {
+ var checkNode = function() {
+ if (window.getComputedStyle(node)['pointer-events'] != 'none')
+ resolve();
+ else
+ setTimeout(checkNode, 1);
+ }
+ checkNode();
+ });
+ return promise;
+ }
setup(function() {
androidAppsPage.prefs = {arc: {enabled: {value: true}}};
return androidAppsBrowserProxy.whenCalled('requestAndroidAppsInfo')
.then(function() {
- androidAppsBrowserProxy.setAppReady(true);
+ initialHRef = window.location.href;
+ androidAppsBrowserProxy.setAndroidAppsState(true, false);
MockInteractions.tap(androidAppsPage.$$('#android-apps'));
Polymer.dom.flush();
subpage = androidAppsPage.$$('settings-android-apps-subpage');
@@ -96,9 +134,27 @@ suite('AndroidAppsPageTests', function() {
});
});
+ teardown(function() {
+ if (settings.getCurrentRoute() == settings.Route.ANDROID_APPS_DETAILS) {
khmel 2017/05/10 21:48:13 Need to go back after test. Otherwise multiple set
stevenjb 2017/05/10 22:35:44 Ugh. Can we just navigate directly to ANDROID_APPS
khmel 2017/05/11 00:10:30 Yes, but this would increase history stack.
+ settings.navigateToPreviousRoute();
+ return whenPopState().then(function() {});
+ }
+ });
+
test('Sanity', function() {
- assertTrue(!!subpage.$$('#manageApps'));
assertTrue(!!subpage.$$('#remove'));
+ assertTrue(!!subpage.$$('#manageApps'));
+ });
+
+ test('ManageAppsUpdate', function() {
+ var manageApps = subpage.$$('#manageApps');
+ assertTrue(manageApps.hidden);
+ androidAppsBrowserProxy.setAndroidAppsState(true, true);
+ Polymer.dom.flush();
+ assertFalse(manageApps.hidden);
+ androidAppsBrowserProxy.setAndroidAppsState(true, false);
+ Polymer.dom.flush();
+ assertTrue(manageApps.hidden);
});
test('Disable', function() {
@@ -108,10 +164,26 @@ suite('AndroidAppsPageTests', function() {
var remove = subpage.$$('#remove');
assertTrue(!!remove);
- MockInteractions.tap(remove);
+ // remove button is not always visible immediately after dom flush. This
+ // leads to tap ignoring and test failure. Simulate tap asynchronously.
+ return whenNodeCanInteract(remove).then(function() {
khmel 2017/05/10 21:48:13 Well, Polymer.async did not help. also SetTimeot 0
stevenjb 2017/05/10 22:35:44 Ugh. Timeout loops like that tend to be fragile in
khmel 2017/05/11 00:10:30 What is your suggestion? .click is not visible. .
+ MockInteractions.tap(remove);
+ Polymer.dom.flush();
+ assertTrue(dialog.open);
+ });
+ });
+
+ test('HideOnDisable', function() {
+ assertEquals(settings.getCurrentRoute(),
+ settings.Route.ANDROID_APPS_DETAILS);
+ androidAppsBrowserProxy.setAndroidAppsState(false, false);
Polymer.dom.flush();
- assertTrue(dialog.open);
+ return whenPopState().then(function() {
+ assertNotEquals(settings.getCurrentRoute(),
+ settings.Route.ANDROID_APPS_DETAILS);
+ assertEquals(initialHRef, window.location.href);
+ });
});
});
@@ -129,7 +201,7 @@ suite('AndroidAppsPageTests', function() {
};
return androidAppsBrowserProxy.whenCalled('requestAndroidAppsInfo')
.then(function() {
- androidAppsBrowserProxy.setAppReady(true);
+ androidAppsBrowserProxy.setAndroidAppsState(true, true);
MockInteractions.tap(androidAppsPage.$$('#android-apps'));
Polymer.dom.flush();
subpage = androidAppsPage.$$('settings-android-apps-subpage');

Powered by Google App Engine
This is Rietveld 408576698