blob: 7290a84d410dd7874124fa54e603d485b69ef9da [file] [log] [blame]
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
class TestElement extends HTMLElement {
constructor() {
super();
this._internals = this.attachInternals();
}
get internals() {
return this._internals;
}
}
customElements.define("test-element", TestElement);
test(() => {
let i = (new TestElement()).internals;
assert_true(i.states instanceof DOMTokenList);
assert_equals(i.states.length, 0);
assert_false(i.states.contains('foo'));
assert_equals(i.states.value, '');
assert_equals(i.states.toString(), '');
}, 'DOMTokenList behavior of ElementInternals.states: Initial state');
test(() => {
let i = (new TestElement()).internals;
assert_throws_js(TypeError, () => { i.states.supports('foo'); });
assert_throws_dom('SyntaxError', () => { i.states.add(''); });
assert_throws_dom('InvalidCharacterError', () => { i.states.add('a\tb'); });
}, 'DOMTokenList behavior of ElementInternals.states: Exceptions');
test(() => {
let i = (new TestElement()).internals;
i.states.add('foo', 'bar', 'foo');
assert_equals(i.states.length, 2);
assert_true(i.states.contains('foo'));
assert_true(i.states.contains('bar'));
assert_equals(i.states.item(0), 'foo');
assert_equals(i.states.item(1), 'bar');
assert_equals(i.states[0], 'foo');
assert_equals(i.states[1], 'bar');
assert_equals(i.states.value, 'foo bar');
i.states.remove('foo');
assert_array_equals(i.states, ['bar']);
assert_equals(i.states.value, 'bar');
i.states.toggle('foo');
assert_array_equals(i.states, ['bar', 'foo']);
assert_equals(i.states.value, 'bar foo');
i.states.replace('bar', 'baz');
assert_array_equals(i.states, ['baz', 'foo']);
assert_equals(i.states.value, 'baz foo');
i.states.value = ' c u s t o o o o m';
assert_equals(i.states.length, 6);
assert_array_equals(i.states, ['c', 'u', 's', 't', 'o', 'm']);
i.states.value = '';
// No throw for a token which can't be a CSS <ident>.
i.states.add('foo)');
assert_array_equals(i.states, ['foo)']);
}, 'DOMTokenList behavior of ElementInternals.states: Modifications');
</script>