diff options
Diffstat (limited to 'catapult/third_party/polymer/components/shadycss/tests/style-transformer.html')
-rw-r--r-- | catapult/third_party/polymer/components/shadycss/tests/style-transformer.html | 299 |
1 files changed, 299 insertions, 0 deletions
diff --git a/catapult/third_party/polymer/components/shadycss/tests/style-transformer.html b/catapult/third_party/polymer/components/shadycss/tests/style-transformer.html new file mode 100644 index 00000000..cf457f3d --- /dev/null +++ b/catapult/third_party/polymer/components/shadycss/tests/style-transformer.html @@ -0,0 +1,299 @@ +<!doctype html> +<!-- +@license +Copyright (c) 2014 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 +--> +<script> +WCT = {waitFor: function (cb) {HTMLImports.whenReady(cb)}} +</script> +<script src="./test-flags.js"></script> +<script src="../node_modules/wct-browser-legacy/browser.js"></script> +<script src="../node_modules/@webcomponents/webcomponents-platform/webcomponents-platform.js"></script> +<script src="../node_modules/es6-promise/dist/es6-promise.auto.min.js"></script> +<script src="../node_modules/@webcomponents/template/template.js"></script> +<script src="../node_modules/@webcomponents/html-imports/html-imports.min.js"></script> +<script src="../node_modules/@webcomponents/shadydom/shadydom.min.js"></script> +<script src="../node_modules/@webcomponents/custom-elements/custom-elements.min.js"></script> +<script src="../scoping-shim.min.js"></script> +<script src="module/generated/style-transformer.js"></script> +<title>Style Transformer</title> + +<template id="host"> + <style> + :host { + color: blue; + } + :host([red]) { + color: red; + } + :host > * { + color: green; + } + :host(.bar) :-webkit-any(.foo, .bar) { + color: purple; + }; + :-webkit-any([baz], [zot="foo"]) :matches(foo, bar) > :-moz-any(:not(:defined), :unresolved) { + color: rgb(123, 123, 123); + } + :matches(a, b) { + color: black; + } + </style> +</template> + +<template id="slotted"> + <style> + div::slotted(.foo) { + color: gray; + } + ::slotted(.bar) { + color: lightgray; + } + :host > ::slotted(*:nth-of-type(2n - 1)) { + color: red; + } + </style> +</template> + +<template id="dir"> + <style> + div:dir(rtl) { + color: blue; + } + :host(:dir(rtl)) { + color: blue; + } + </style> +</template> + +<template id="custom-style"> + <style> + :root { + color: black; + } + </style> +</template> + +<template id="shared-style"> + <style> + html, :host { + color: gray; + } + </style> +</template> + +<template id="attribute-style"> + <style> + [foo="foo:bar"] { + background-color: blue; + } + </style> +</template> + +<template id="nested-attribute-style"> + <style> + [foo="foo:bar"] [foo="foo:bar"] { + background-color: blue; + } + </style> +</template> + +<template id="prepended-attribute-style"> + <style> + foo[foo="foo:bar"] { + background-color: blue; + } + </style> +</template> + +<script> +function processTemplate(templateName, elementName) { + var template = document.querySelector('template#' + templateName); + window.ShadyCSS.prepareTemplate(template, elementName); + return template._styleAst; +} +suite('Style Transformer', function() { + setup(function() { + if (window.ShadyCSS.nativeShadow) { + this.skip(); + } + }) + suite(':host transforms', function() { + var ast; + suiteSetup(function() { + ast = processTemplate('host', 'x-foo'); + }); + + test(':host{}', function() { + assert.equal(ast.rules[0].selector, 'x-foo'); + }); + + test(':host([red]){}', function() { + assert.equal(ast.rules[1].selector, 'x-foo[red]'); + }); + + test(':host > *{}', function() { + assert.equal(ast.rules[2].selector, 'x-foo > *.x-foo'); + }); + + test(':host() :-webkit-any()', function() { + assert.equal(ast.rules[3].selector, 'x-foo.bar :-webkit-any(.foo, .bar).x-foo'); + }); + + test('lots of :matches()', function() { + assert.equal(ast.rules[4].selector, ':-webkit-any([baz], [zot="foo"]).x-foo :matches(foo, bar).x-foo > :-moz-any(:not(:defined), :unresolved).x-foo'); + }); + + test('only match', function() { + assert.equal(ast.rules[5].selector, ':matches(a, b).x-foo'); + }); + }); + + suite('::slotted transforms', function() { + var ast; + suiteSetup(function() { + ast = processTemplate('slotted', 'x-slot'); + }); + + test('div::slotted(.foo)', function() { + assert.equal(ast.rules[0].selector, 'div.x-slot > .foo'); + }); + + test('::slotted(.bar)', function() { + assert.equal(ast.rules[1].selector, 'x-slot > .bar'); + }); + + test(':host > ::slotted(*:nth-of-type(2n - 1))', function() { + assert.equal(ast.rules[2].selector, 'x-slot > *:nth-of-type(2n-1)'); + }); + }); + + suite('dir transforms', function() { + var ast; + suiteSetup(function() { + ast = processTemplate('dir', 'x-dir'); + }); + + test('div:dir(rtl)', function() { + assert.equal(ast.rules[0].selector, '[dir="rtl"] div.x-dir, div.x-dir[dir="rtl"]'); + }); + + test('host(:dir(rtl))', function() { + assert.equal(ast.rules[1].selector, '[dir="rtl"] x-dir, x-dir[dir="rtl"]'); + }); + + }); + + suite('custom-style transforms', function() { + var rule; + setup(function() { + var template = document.querySelector('template#custom-style'); + var style = template.content.querySelector('style').cloneNode(true); + var ast = window.ShadyCSS.ScopingShim.getStyleAst(style); + rule = ast.rules[0]; + }); + + test('native ShadowDOM', function() { + window.StyleTransformer.normalizeRootSelector(rule); + assert.equal(rule.selector, 'html'); + }); + + test('ShadyDOM', function() { + window.StyleTransformer.documentRule(rule); + assert.equal(rule.selector, 'html:not(.style-scope)'); + }); + }); + + suite('shared style (light or shadow dom) transforms', function() { + let rule; + + setup(function() { + const template = document.querySelector('template#shared-style'); + const style = template.content.querySelector('style').cloneNode(true); + const ast = window.ShadyCSS.ScopingShim.getStyleAst(style); + rule = ast.rules[0]; + }); + + test('native ShadowDOM', function() { + window.StyleTransformer.normalizeRootSelector(rule); + assert.equal(rule.selector, 'html, :host'); + }); + + test('ShadyDOM', function() { + window.StyleTransformer.documentRule(rule); + assert.equal(rule.selector, 'html:not(.style-scope)'); + }); + }); + + suite('attribute selectors', function() { + + suite('simple', function() { + let rule; + + setup(function() { + const template = document.querySelector('template#attribute-style'); + const style = template.content.querySelector('style').cloneNode(true); + const ast = window.ShadyCSS.ScopingShim.getStyleAst(style); + rule = ast.rules[0]; + }); + + test('native ShadowDOM', function() { + window.StyleTransformer.normalizeRootSelector(rule); + assert.equal(rule.selector, '[foo="foo:bar"]'); + }); + + test('ShadyDOM', function() { + window.StyleTransformer.documentRule(rule); + assert.equal(rule.selector, ':not(.style-scope)[foo="foo:bar"]'); + }); + }); + + suite('nested', function() { + let rule; + + setup(function() { + const template = document.querySelector('template#nested-attribute-style'); + const style = template.content.querySelector('style').cloneNode(true); + const ast = window.ShadyCSS.ScopingShim.getStyleAst(style); + rule = ast.rules[0]; + }); + + test('native ShadowDOM', function() { + window.StyleTransformer.normalizeRootSelector(rule); + assert.equal(rule.selector, '[foo="foo:bar"] [foo="foo:bar"]'); + }); + + test('ShadyDOM', function() { + window.StyleTransformer.documentRule(rule); + assert.equal(rule.selector, ':not(.style-scope)[foo="foo:bar"] :not(.style-scope)[foo="foo:bar"]'); + }); + }); + + suite('prepended', function() { + let rule; + + setup(function() { + const template = document.querySelector('template#prepended-attribute-style'); + const style = template.content.querySelector('style').cloneNode(true); + const ast = window.ShadyCSS.ScopingShim.getStyleAst(style); + rule = ast.rules[0]; + }); + + test('native ShadowDOM', function() { + window.StyleTransformer.normalizeRootSelector(rule); + assert.equal(rule.selector, 'foo[foo="foo:bar"]'); + }); + + test('ShadyDOM', function() { + window.StyleTransformer.documentRule(rule); + assert.equal(rule.selector, 'foo:not(.style-scope)[foo="foo:bar"]'); + }); + }); + }); +}); +</script> |