blob: 9229f1268ea8e8ec8d83fca77665b17602aebf56 [file] [log] [blame]
'use strict';
(function() {
function assert_initial(property, initial) {
test(() => {
const target = document.getElementById('target');
if (!getComputedStyle(target)[property])
return;
target.style[property] = 'initial';
assert_equals(getComputedStyle(target)[property], initial);
target.style[property] = '';
}, 'Property ' + property + ' has initial value ' + initial);
}
/**
* Create tests that a CSS property inherits and has the given initial value.
*
* The current document must have an element #target within element #container.
*
* @param {string} property The name of the CSS property being tested.
* @param {string} initial The computed value for 'initial'.
* @param {string} other An arbitrary value for the property that round
* trips and is distinct from the initial value.
*/
function assert_inherited(property, initial, other) {
assert_initial(property, initial);
test(() => {
const container = document.getElementById('container');
const target = document.getElementById('target');
if (!getComputedStyle(target)[property])
return;
container.style[property] = 'initial';
target.style[property] = 'unset';
assert_not_equals(getComputedStyle(container)[property], other);
assert_not_equals(getComputedStyle(target)[property], other);
container.style[property] = other;
assert_equals(getComputedStyle(container)[property], other);
assert_equals(getComputedStyle(target)[property], other);
target.style[property] = 'initial';
assert_equals(getComputedStyle(container)[property], other);
assert_not_equals(getComputedStyle(target)[property], other);
target.style[property] = 'inherit';
assert_equals(getComputedStyle(target)[property], other);
container.style[property] = '';
target.style[property] = '';
}, 'Property ' + property + ' inherits');
}
/**
* Create tests that a CSS property does not inherit, and that it has the
* given initial value.
*
* The current document must have an element #target within element #container.
*
* @param {string} property The name of the CSS property being tested.
* @param {string} initial The computed value for 'initial'.
* @param {string} other An arbitrary value for the property that round
* trips and is distinct from the initial value.
*/
function assert_not_inherited(property, initial, other) {
assert_initial(property, initial);
test(() => {
const container = document.getElementById('container');
const target = document.getElementById('target');
if (!getComputedStyle(target)[property])
return;
container.style[property] = 'initial';
target.style[property] = 'unset';
assert_not_equals(getComputedStyle(container)[property], other);
assert_not_equals(getComputedStyle(target)[property], other);
container.style[property] = other;
assert_equals(getComputedStyle(container)[property], other);
assert_not_equals(getComputedStyle(target)[property], other);
target.style[property] = 'inherit';
assert_equals(getComputedStyle(target)[property], other);
container.style[property] = '';
target.style[property] = '';
}, 'Property ' + property + ' does not inherit');
}
window.assert_inherited = assert_inherited;
window.assert_not_inherited = assert_not_inherited;
})();