Index: chrome/test/data/webui/settings/route_tests.js |
diff --git a/chrome/test/data/webui/settings/route_tests.js b/chrome/test/data/webui/settings/route_tests.js |
index ed9d7b5cb14612ae828cf9489a6be698712c4a38..302f2f57115288b60d16bbec06bbaa64eb0bd60e 100644 |
--- a/chrome/test/data/webui/settings/route_tests.js |
+++ b/chrome/test/data/webui/settings/route_tests.js |
@@ -3,6 +3,42 @@ |
// found in the LICENSE file. |
suite('route', function() { |
+ /** |
+ * Returns a new promise that resolves after a window 'popstate' event. |
+ * @return {!Promise} |
+ */ |
+ function whenPopState(causeEvent) { |
+ var promise = new Promise(function(resolve) { |
+ window.addEventListener('popstate', function callback() { |
+ window.removeEventListener('popstate', callback); |
+ resolve(); |
+ }); |
+ }); |
+ |
+ causeEvent(); |
+ return promise; |
+ } |
+ |
+ /** |
+ * Tests a specific navigation situation. |
+ * @param {!settings.Route} previousRoute |
+ * @param {!settings.Route} currentRoute |
+ * @param {!settings.Route} expectedNavigatePreviousResult |
+ * @return {!Promise} |
+ */ |
+ function testNavigateBackUsesHistory(previousRoute, currentRoute, |
+ expectedNavigatePreviousResult) { |
+ settings.navigateTo(previousRoute); |
+ settings.navigateTo(currentRoute); |
+ |
+ return whenPopState(function() { |
+ settings.navigateToPreviousRoute(); |
+ }).then(function() { |
+ assertEquals(expectedNavigatePreviousResult, |
+ settings.getCurrentRoute()); |
+ }); |
+ }; |
+ |
test('tree structure', function() { |
// Set up root page routes. |
var BASIC = new settings.Route('/'); |
@@ -55,38 +91,6 @@ suite('route', function() { |
}); |
}); |
- /** |
- * Tests a specific navigation situation. |
- * @param {!settings.Route} previousRoute |
- * @param {!settings.Route} currentRoute |
- * @param {!settings.Route} expectedNavigatePreviousResult |
- * @return {!Promise} |
- */ |
- function testNavigateBackUsesHistory(previousRoute, currentRoute, |
- expectedNavigatePreviousResult) { |
- /** |
- * Returns a new promise that resolves after a window 'popstate' event. |
- * @return {!Promise} |
- */ |
- function whenPopState() { |
- return new Promise(function(resolve) { |
- window.addEventListener('popstate', function callback() { |
- window.removeEventListener('popstate', callback); |
- resolve(); |
- }); |
- }); |
- } |
- |
- settings.navigateTo(previousRoute); |
- settings.navigateTo(currentRoute); |
- settings.navigateToPreviousRoute(); |
- |
- return whenPopState().then(function() { |
- assertEquals(expectedNavigatePreviousResult, |
- settings.getCurrentRoute()); |
- }); |
- }; |
- |
test('navigate back to parent previous route', function() { |
return testNavigateBackUsesHistory( |
settings.Route.BASIC, |
@@ -121,4 +125,22 @@ suite('route', function() { |
settings.navigateToPreviousRoute(); |
assertEquals(settings.Route.BASIC, settings.getCurrentRoute()); |
}); |
+ |
+ test('popstate flag works', function() { |
+ settings.navigateTo(settings.Route.BASIC); |
+ assertFalse(settings.lastRouteChangeWasPopstate()); |
+ |
+ settings.navigateTo(settings.Route.PEOPLE); |
+ assertFalse(settings.lastRouteChangeWasPopstate()); |
+ |
+ return whenPopState(function() { |
+ window.history.back(); |
+ }).then(function() { |
+ assertEquals(settings.Route.BASIC, settings.getCurrentRoute()); |
+ assertTrue(settings.lastRouteChangeWasPopstate()); |
+ |
+ settings.navigateTo(settings.Route.ADVANCED); |
+ assertFalse(settings.lastRouteChangeWasPopstate()); |
+ }); |
+ }); |
}); |