summaryrefslogtreecommitdiff
path: root/systrace/catapult/third_party/polymer/components/iron-image/test/iron-image.html
diff options
context:
space:
mode:
Diffstat (limited to 'systrace/catapult/third_party/polymer/components/iron-image/test/iron-image.html')
-rw-r--r--systrace/catapult/third_party/polymer/components/iron-image/test/iron-image.html338
1 files changed, 338 insertions, 0 deletions
diff --git a/systrace/catapult/third_party/polymer/components/iron-image/test/iron-image.html b/systrace/catapult/third_party/polymer/components/iron-image/test/iron-image.html
new file mode 100644
index 0000000..162ff4e
--- /dev/null
+++ b/systrace/catapult/third_party/polymer/components/iron-image/test/iron-image.html
@@ -0,0 +1,338 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 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>iron-image</title>
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <script src="../../web-component-tester/browser.js"></script>
+ <script src="../../test-fixture/test-fixture-mocha.js"></script>
+
+ <link rel="import" href="../../polymer/polymer.html">
+ <link rel="import" href="../../test-fixture/test-fixture.html">
+ <link rel="import" href="../iron-image.html">
+
+ <style is="custom-style">
+ .fixed-width-container {
+ width: 500px;
+ }
+
+ .fixed-width-container iron-image {
+ width: 100%;
+ --iron-image-width: 100%;
+ }
+
+ .fixed-height-container {
+ height: 500px;
+ }
+
+ .fixed-height-container iron-image {
+ height: 100%;
+ --iron-image-height: 100%;
+ }
+ </style>
+ </head>
+ <body>
+ <test-fixture id="TrivialImage">
+ <template>
+ <iron-image></iron-image>
+ </template>
+ </test-fixture>
+
+ <test-fixture id="FixedWidthContainer">
+ <template>
+ <div class="fixed-width-container">
+ <iron-image></iron-image>
+ </div>
+ </template>
+ </test-fixture>
+
+ <test-fixture id="FixedHeightContainer">
+ <template>
+ <div class="fixed-height-container">
+ <iron-image></iron-image>
+ </div>
+ </template>
+ </test-fixture>
+
+ <script>
+ suite('<iron-image>', function() {
+ function randomImageUrl () {
+ return '../demo/polymer.svg?' + Math.random();
+ }
+
+ var image;
+
+ suite('basic behavior', function() {
+ setup(function() {
+ image = fixture('TrivialImage');
+ });
+
+ test('loading, loaded, error are false before any src is set', function() {
+ expect(image.loading).to.be.eql(false);
+ expect(image.loaded).to.be.eql(false);
+ expect(image.error).to.be.eql(false);
+ });
+
+ test('loading, loaded, error are false when src is set to empty string', function(done) {
+ image.addEventListener('loaded-changed', function onLoadedChanged() {
+ if (image.loaded) {
+ image.removeEventListener('loaded-changed', onLoadedChanged);
+ image.addEventListener('loaded-changed', function onLoadedChanged2() {
+ image.removeEventListener('loaded-changed', onLoadedChanged2);
+
+ expect(image.loading).to.be.eql(false);
+ expect(image.loaded).to.be.eql(false);
+ expect(image.error).to.be.eql(false);
+ done();
+ });
+
+ expect(image.loading).to.be.eql(false);
+ expect(image.loaded).to.be.eql(true);
+ expect(image.error).to.be.eql(false);
+ image.src = '';
+ }
+ });
+ image.src = randomImageUrl();
+ });
+
+ test('can load images given a src', function(done) {
+ image.addEventListener('loaded-changed', function onLoadedChanged() {
+ image.removeEventListener('loaded-changed', onLoadedChanged);
+
+ try {
+ expect(image.loaded).to.be.eql(true);
+ done();
+ } catch (e) {
+ done(e);
+ }
+ });
+ image.src = randomImageUrl();
+ });
+
+ test('will reload images when src changes', function(done) {
+ var loadCount = 0;
+
+ image.addEventListener('loaded-changed', function onLoadedChanged() {
+ if (image.loaded === true) {
+ loadCount++;
+
+ if (loadCount === 2) {
+ image.removeEventListener('loaded-changed', onLoadedChanged);
+ done();
+ } else {
+ image.src = randomImageUrl();
+ }
+ }
+ });
+
+ image.src = randomImageUrl();
+ });
+
+ test('error property is set when the image fails to load', function(done) {
+ image.addEventListener('error-changed', function onErrorChanged() {
+ assert(image.error, 'image has error property set');
+ image.removeEventListener('error-changed', onErrorChanged);
+ done();
+ });
+
+ image.src = '/this_image_should_not_exist.jpg';
+ });
+
+ // Test for PolymerElements/iron-image#16.
+ test('placeholder is hidden after loading when src is changed from invalid to valid', function(done) {
+ image.preload = true;
+
+ image.addEventListener('error-changed', function onErrorChanged() {
+ image.removeEventListener('error-changed', onErrorChanged);
+
+ assert.equal(image.loading, false, 'errored image loading = false');
+ assert.equal(image.loaded, false, 'errored image loaded = false');
+ assert.equal(image.error, true, 'errored image error = true');
+
+ image.addEventListener('loaded-changed', function onLoadedChanged() {
+ if (!image.loaded) return;
+
+ image.removeEventListener('loaded-changed', onLoadedChanged);
+
+ assert.equal(image.loading, false, 'ok image loading = false');
+ assert.equal(image.loaded, true, 'ok image loaded = true');
+ assert.equal(image.error, false, 'ok image error = false');
+ assert.equal(getComputedStyle(image.$.placeholder).display, 'none', 'placeholder has style.display = none');
+
+ done();
+ });
+
+ image.src = randomImageUrl();
+ });
+
+ image.src = '/this_image_should_not_exist.jpg';
+ });
+
+ // Test for PolymerElements/iron-image#23.
+ test('image is not shown below placeholder if previous image was loaded with' +
+ ' sizing on and current image fails to load', function(done) {
+ image.preload = true;
+ image.sizing = 'cover';
+
+ image.addEventListener('loaded-changed', function onLoadedChanged() {
+ if (!image.loaded) return;
+ image.removeEventListener('loaded-changed', onLoadedChanged);
+
+ assert.notEqual(getComputedStyle(image.$.sizedImgDiv).backgroundImage, 'none', 'image visible after successful load');
+ assert.equal(getComputedStyle(image.$.placeholder).display, 'none', 'placeholder hidden after successful load');
+
+ image.addEventListener('error-changed', function onErrorChanged() {
+ if (!image.error) return;
+ image.removeEventListener('error-changed', onErrorChanged);
+
+ assert.equal(getComputedStyle(image.$.sizedImgDiv).backgroundImage, 'none', 'image hidden after failed load');
+ assert.notEqual(getComputedStyle(image.$.placeholder).display, 'none', 'placeholder visible after failed load');
+
+ done();
+ });
+
+ image.src = '/this_image_should_not_exist.jpg';
+ });
+
+ image.src = randomImageUrl();
+ });
+ });
+
+ suite('--iron-image-width, --iron-image-height', function() {
+ var fixedWidthContainer;
+ var fixedWidthIronImage;
+ var fixedHeightContainer;
+ var fixedHeightIronImage;
+
+ setup(function() {
+ fixedWidthContainer = fixture('FixedWidthContainer');
+ fixedWidthIronImage = fixedWidthContainer.querySelector('iron-image');
+ fixedHeightContainer = fixture('FixedHeightContainer');
+ fixedHeightIronImage = fixedHeightContainer.querySelector('iron-image');
+ });
+
+ test('100% width image fills container', function(done) {
+ fixedWidthIronImage.$.img.addEventListener('load', function onLoadedChanged(e) {
+ fixedWidthIronImage.$.img.removeEventListener('load', onLoadedChanged);
+ Polymer.updateStyles();
+
+ var containerRect = fixedWidthContainer.getBoundingClientRect();
+ var ironImageRect = fixedWidthIronImage.getBoundingClientRect();
+ var wrappedImageRect = fixedWidthIronImage.$.img.getBoundingClientRect();
+
+ expect(containerRect.width).to.be.closeTo(500, 0.5);
+ expect(ironImageRect.width).to.be.closeTo(500, 0.5);
+ expect(wrappedImageRect.width).to.be.closeTo(500, 0.5);
+
+ done();
+ });
+
+ fixedWidthIronImage.src = randomImageUrl();
+ });
+
+ test('100% height image fills container', function(done) {
+ fixedHeightIronImage.$.img.addEventListener('load', function onLoadedChanged(e) {
+ fixedHeightIronImage.$.img.removeEventListener('load', onLoadedChanged);
+ Polymer.updateStyles();
+
+ var containerRect = fixedHeightContainer.getBoundingClientRect();
+ var ironImageRect = fixedHeightIronImage.getBoundingClientRect();
+ var wrappedImageRect = fixedHeightIronImage.$.img.getBoundingClientRect();
+
+ expect(containerRect.height).to.be.closeTo(500, 0.5);
+ expect(ironImageRect.height).to.be.closeTo(500, 0.5);
+ expect(wrappedImageRect.height).to.be.closeTo(500, 0.5);
+
+ done();
+ });
+
+ fixedHeightIronImage.src = randomImageUrl();
+ });
+ });
+
+ suite('accessibility', function() {
+ suite('sizing inactive', function() {
+ var image;
+
+ setup(function() {
+ image = fixture('TrivialImage');
+ });
+
+ test('#sizedImgDiv is hidden', function() {
+ var sizedImgDivStyle = window.getComputedStyle(image.$.sizedImgDiv);
+ assert.strictEqual(sizedImgDivStyle.display, 'none');
+ });
+
+ test('img has no alt text by default', function() {
+ assert.isFalse(image.$.img.hasAttribute('alt'));
+ });
+
+ test('img alt text is empty string when iron-image alt text is empty string', function() {
+ image.alt = '';
+
+ assert.isTrue(image.$.img.hasAttribute('alt'));
+ assert.strictEqual(image.$.img.getAttribute('alt'), '');
+ });
+
+ test('img alt text matches iron-image alt text when defined', function() {
+ image.alt = 'alt text value';
+
+ assert.isTrue(image.$.img.hasAttribute('alt'));
+ assert.strictEqual(image.$.img.getAttribute('alt'), 'alt text value');
+ });
+ });
+
+ suite('sizing active', function() {
+ var image;
+
+ setup(function() {
+ image = fixture('TrivialImage');
+ image.sizing = 'cover';
+ });
+
+ test('inner img is hidden', function() {
+ var imgStyle = window.getComputedStyle(image.$.img);
+ assert.strictEqual(imgStyle.display, 'none');
+ });
+
+ test('#sizedImgDiv has empty aria-label text by default', function() {
+ assert.isTrue(image.$.sizedImgDiv.hasAttribute('aria-label'));
+ assert.strictEqual(image.$.sizedImgDiv.getAttribute('aria-label'), '');
+ });
+
+ test('#sizedImgDiv has aria-hidden when iron-image alt text is empty string', function() {
+ image.alt = '';
+
+ assert.isTrue(image.$.sizedImgDiv.hasAttribute('aria-hidden'));
+ var hiddenValue = image.$.sizedImgDiv.getAttribute('aria-hidden');
+ assert.isTrue(hiddenValue === '' || hiddenValue === 'true');
+ });
+
+ test('#sizedImgDiv aria-label matches iron-image alt text when defined', function() {
+ image.alt = 'alt text value';
+
+ assert.isTrue(image.$.sizedImgDiv.hasAttribute('aria-label'));
+ assert.strictEqual(image.$.sizedImgDiv.getAttribute('aria-label'), 'alt text value');
+ });
+
+ test('#sizedImgDiv aria-label text is last path component of src when iron-image alt text is undefined', function() {
+ image.src = '/some/path.components/file.jpg?a=b&c=d#anchor';
+
+ assert.isTrue(image.$.sizedImgDiv.hasAttribute('aria-label'));
+ assert.strictEqual(image.$.sizedImgDiv.getAttribute('aria-label'), 'file.jpg');
+ });
+ });
+ });
+ });
+ </script>
+ </body>
+</html>