blob: 8914f0268647fcdd162e78a46f882da0f1a0fcd0 [file] [log] [blame]
<!doctype html>
<head>
<script>
WCT = {waitFor: function (cb) {HTMLImports.whenReady(cb)}}
</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="../../apply-shim.min.js"></script>
<script src="../../custom-style-interface.min.js"></script>
<script src="../module/generated/make-element.js"></script>
</head>
<body>
<div>
<x-item-a>item A</x-item-a>
<x-item-b>item B</x-item-b>
</div>
<x-menu>
</x-menu>
<x-menu-group>
</x-menu-group>
<template id="x-item-a">
<style>
:host {
display:block;
background: rgb(255, 255, 255);
@apply --item-mixin;
}
</style>
<slot></slot>
</template>
<template id="x-menu">
<style>
:host {
display:block;
border:1px solid black;
margin:2px;
--item-mixin:{background:rgb(0, 0, 255);};
}
</style>
<x-item-a>menu item A</x-item-a>
<x-item-b>menu item B</x-item-b>
</template>
<template id="x-group">
<style>
:host{
display:block;
--item-mixin:{background:rgb(255, 0, 0);};
}
</style>
<x-item-a>group item A</x-item-a>
<x-item-b>group item B</x-item-b>
</template>
<template id="x-menu-group">
<style>
:host {
display:block;
border:1px solid black;
margin:2px;
--item-mixin:{background:rgb(0, 0, 255);};
}
</style>
<x-group></x-group>
</template>
<template id="x-item-b">
<style>
:host {
display:block;
background: rgb(255, 255, 255);
@apply --item-mixin;
}
</style>
<slot></slot>
</template>
<template id="x-dynamic">
<style>
:host {
display: block;
background: rgb(255, 255, 255);
@apply --mixin;
}
</style>
<span>dynamic item</span>
</template>
<template id="x-dynamic-container">
<style>
:host {
--mixin: {
background-color: rgb(123, 123, 123);
};
}
</style>
<x-dynamic></x-dynamic>
</template>
<script>
suite('Mixin Ordering', function() {
suiteSetup(function() {
makeElement('x-item-a');
makeElement('x-menu');
makeElement('x-group');
makeElement('x-menu-group');
makeElement('x-item-b');
});
test('mixins are re-evaluated with element upgrade', function() {
function checkBg(node) {
var itemA = node.querySelector('x-item-a');
var itemB = node.querySelector('x-item-b');
var itemA_BG = getComputedStyle(itemA)['background-color'].trim();
var itemB_BG = getComputedStyle(itemB)['background-color'].trim();
assert.equal(itemA_BG, itemB_BG, 'x-item-a and x-item-b should have the same background color');
}
checkBg(document.querySelector('div'));
checkBg(document.querySelector('x-menu').shadowRoot);
checkBg(document.querySelector('x-menu-group').shadowRoot.querySelector('x-group').shadowRoot);
});
test('dynamically updates', function() {
makeElement('x-dynamic');
makeElement('x-dynamic-container');
var container = document.createElement('x-dynamic-container');
document.body.appendChild(container);
if (window.ShadyDOM) {
ShadyDOM.flush();
}
assert.equal(getComputedStyle(container.shadowRoot.querySelector('x-dynamic'))['background-color'].trim(), 'rgb(123, 123, 123)');
});
});
</script>
</body>