aboutsummaryrefslogtreecommitdiff
path: root/catapult/third_party/polymer/components/app-route/test/app-location.html
diff options
context:
space:
mode:
Diffstat (limited to 'catapult/third_party/polymer/components/app-route/test/app-location.html')
-rw-r--r--catapult/third_party/polymer/components/app-route/test/app-location.html168
1 files changed, 168 insertions, 0 deletions
diff --git a/catapult/third_party/polymer/components/app-route/test/app-location.html b/catapult/third_party/polymer/components/app-route/test/app-location.html
new file mode 100644
index 00000000..cdb71237
--- /dev/null
+++ b/catapult/third_party/polymer/components/app-route/test/app-location.html
@@ -0,0 +1,168 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+ <title>app-location</title>
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <script src="../../web-component-tester/browser.js"></script>
+
+ <link rel="import" href="../../polymer/polymer.html">
+ <link rel="import" href="../../iron-test-helpers/mock-interactions.html">
+ <link rel="import" href="../app-location.html">
+</head>
+<body>
+ <test-fixture id="BasicLocation">
+ <template>
+ <app-location></app-location>
+ </template>
+ </test-fixture>
+
+ <test-fixture id="LocationViaHash">
+ <template>
+ <app-location use-hash-as-path></app-location>
+ </template>
+ </test-fixture>
+
+ <test-fixture id="ClickableLink">
+ <template>
+ <a></a>
+ </template>
+ </test-fixture>
+
+ <script>
+ 'use strict';
+
+ function setLocation(url) {
+ window.history.pushState({}, '', url);
+ Polymer.Base.fire('location-changed', {}, { node: window });
+ }
+
+ function assign(a, b) {
+ if (Object.assign) {
+ return Object.assign.apply(Object, arguments);
+ }
+
+ for (var property in b) {
+ a[property] = b[property];
+ }
+
+ return a;
+ }
+
+ suite('<app-location>', function () {
+ var initialUrl;
+
+ setup(function() {
+ initialUrl = window.location.href;
+ });
+
+ teardown(function() {
+ window.history.replaceState({}, '', initialUrl);
+ });
+
+ suite('in the default configuration', function() {
+ var appLocation;
+
+ setup(function() {
+ appLocation = fixture('BasicLocation');
+ });
+
+ test('it automatically exposes the current route', function() {
+ expect(appLocation.route).to.be.ok;
+ expect(appLocation.route.path).to.be.equal(window.location.pathname);
+ });
+
+ suite('manipulating the route', function() {
+ var originalPath;
+ var originalQueryParams;
+
+ setup(function() {
+ originalPath = appLocation.route.path;
+ originalQueryParams = assign({}, appLocation.route.__queryParams);
+ });
+
+ teardown(function() {
+ appLocation.set('route.prefix', '');
+ appLocation.set('route.path', originalPath);
+ appLocation.set('route.__queryParams', originalQueryParams);
+ });
+
+ test('it reflects path to location.pathname', function() {
+ appLocation.set('route.path', '/foo/bar');
+ expect(window.location.pathname).to.be.equal('/foo/bar');
+ });
+
+ test('it reflects queryParams values to location.search', function() {
+ appLocation.set('route.__queryParams.foo', 1);
+ expect(window.location.search).to.match(/foo=1/);
+ });
+
+ test('it reflects completely replaced queryParams', function() {
+ appLocation.set('route.__queryParams', { bar: 1 });
+ expect(window.location.search).to.be.equal('?bar=1');
+ });
+
+ test('it reflects the prefix to location.pathname', function() {
+ appLocation.set('route.prefix', '/fiz');
+ expect(window.location.pathname).to.be.equal('/fiz' + originalPath);
+ });
+ });
+
+ /**
+ * NOTE: For a more thorough spec describing this behavior, please refer
+ * to the `iron-location` component.
+ */
+ suite('manipulating the history state', function() {
+ var originalLocation;
+
+ setup(function() {
+ originalLocation = window.location.toString();
+ });
+
+ teardown(function() {
+ setLocation(originalLocation);
+ });
+
+ test('it reflects location.pathname to route.path', function() {
+ setLocation('/fiz/buz');
+ expect(appLocation.route.path).to.be.equal('/fiz/buz');
+ });
+
+ test('it reflects location.search to route.__queryParams', function() {
+ setLocation('?fiz=buz');
+ expect(appLocation.route.__queryParams).to.be.eql({
+ fiz: 'buz'
+ });
+ });
+ });
+ });
+
+ suite('using the hash as the route path', function() {
+ var appLocation;
+
+ setup(function() {
+ appLocation = fixture('LocationViaHash');
+ });
+
+ test('it reflects location.hash to route.path', function() {
+ setLocation('#/fiz/buz');
+ expect(appLocation.route.path).to.be.equal('/fiz/buz');
+ });
+
+ test('it reflects route.path to location.hash', function() {
+ appLocation.set('route.path', '/foo/bar');
+ expect(window.location.hash).to.be.equal('#/foo/bar');
+ });
+ });
+ });
+ </script>
+</body>