-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add HTMLButtonElement interface to custom element test
- Loading branch information
Showing
2 changed files
with
129 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
<!DOCTYPE html> | ||
<title>Custom Elements: CEReactions on HTMLButtonElement interface</title> | ||
<meta name="author" title="Zhang xiaoyu" href="[email protected]"> | ||
<meta name="assert" content=" autofocus, disabled, formAction, formEnctype, formMethod, formNoValidate, formTarget, name, type, value of HTMLButtonElement interface must have CEReactions"> | ||
<meta name="help" content="https://html.spec.whatwg.org/#htmlbuttonelement"> | ||
<script src="/tests/custom-elements/resources/testharness.js"></script> | ||
<script src="/tests/custom-elements/resources/testharnessreport.js"></script> | ||
<script src="./custom-elements-helpers.js"></script> | ||
<script src="./reactions.js"></script> | ||
<body> | ||
<script> | ||
|
||
//In parent node, sub node's observeAttribute can enqueue by changing attribute value | ||
//Re->reflect, At->attribute, P->parent, Co->content | ||
function testReAtWithPNodeWithCoValues(jsAtName, coAtName, jsAtValue1, coAtValue1, jsAtValue2, coAtValue2, name, elementName, pElementName, interfaceName) { | ||
var parentElement = document.createElement(pElementName); | ||
document.body.appendChild(parentElement); | ||
|
||
test(() => { | ||
var element = define_build_in_custom_element([coAtName], interfaceName, elementName); | ||
var instance = document.createElement(elementName, { is: element.name }); | ||
|
||
assert_array_equals(element.takeLog().types(), ['constructed']); | ||
parentElement.appendChild(instance); | ||
assert_array_equals(element.takeLog().types(), ['connected']); | ||
instance[jsAtName] = jsAtValue1; | ||
var logEntries = element.takeLog(); | ||
assert_array_equals(logEntries.types(), ['attributeChanged']); | ||
assert_attribute_log_entry(logEntries.last(), {name: coAtName, oldValue: null, newValue: coAtValue1, namespace: null}); | ||
|
||
}, name + ' must enqueue an attributeChanged reaction when adding a new attribute'); | ||
|
||
test(() => { | ||
var element = define_build_in_custom_element([coAtName], interfaceName, elementName); | ||
var instance = document.createElement(elementName, { is: element.name}); | ||
parentElement.appendChild(instance); | ||
|
||
assert_array_equals(element.takeLog().types(), ['constructed', 'connected']); | ||
instance[jsAtName] = jsAtValue1; | ||
assert_array_equals(element.takeLog().types(), ['attributeChanged']); | ||
instance[jsAtName] = jsAtValue2; | ||
var logEntries = element.takeLog(); | ||
assert_array_equals(logEntries.types(), ['attributeChanged']); | ||
assert_attribute_log_entry(logEntries.last(), {name: coAtName, oldValue: coAtValue1, newValue: coAtValue2, namespace: null}); | ||
|
||
}, name + ' must enqueue an attributeChanged reaction when replacing an existing attribute'); | ||
|
||
parentElement.parentNode.removeChild(parentElement); | ||
} | ||
|
||
//Package JS attribute with parent Node to test | ||
function testReAtWithPNode(jsAtName, coAtName, jsAtValue1, jsAtValue2, name, elementName, pElementName, interfaceName) { | ||
testReAtWithPNodeWithCoValues(jsAtName, coAtName, jsAtValue1, jsAtValue1, jsAtValue2, jsAtValue2, name, elementName, pElementName, interfaceName); | ||
} | ||
|
||
//In parent node, sub node's observeAttribute which depends another attribute can enqueue by changing attribute value | ||
//Re->reflect, At->attribute, De->depdent, Co->content | ||
function testReAtWithDeAtWithCoValues(jsAtName, coAtName, deAtName, jsAtValue1, coAtValue1, jsAtValue2, coAtValue2, deAtValue, name, elementName, pElementName, interfaceName) { | ||
var parentElement = document.createElement(pElementName); | ||
document.body.appendChild(parentElement); | ||
|
||
test(() => { | ||
var element = define_build_in_custom_element([coAtName], interfaceName, elementName); | ||
var instance = document.createElement(elementName, { is: element.name }); | ||
|
||
assert_array_equals(element.takeLog().types(), ['constructed']); | ||
parentElement.appendChild(instance); | ||
assert_array_equals(element.takeLog().types(), ['connected']); | ||
instance.setAttribute(deAtName, deAtValue); | ||
instance[jsAtName] = jsAtValue1; | ||
var logEntries = element.takeLog(); | ||
assert_array_equals(logEntries.types(), ['attributeChanged']); | ||
assert_attribute_log_entry(logEntries.last(), {name: coAtName, oldValue: null, newValue: coAtValue1, namespace: null}); | ||
|
||
}, name + ' must enqueue an attributeChanged reaction when adding a new attribute'); | ||
|
||
test(() => { | ||
var element = define_build_in_custom_element([coAtName], interfaceName, elementName); | ||
var instance = document.createElement(elementName, { is: element.name}); | ||
parentElement.appendChild(instance); | ||
instance.setAttribute(deAtName, deAtValue); | ||
instance[jsAtName] = jsAtValue1; | ||
|
||
assert_array_equals(element.takeLog().types(), ['constructed', 'connected', 'attributeChanged']); | ||
instance[jsAtName] = jsAtValue2; | ||
var logEntries = element.takeLog(); | ||
assert_array_equals(logEntries.types(), ['attributeChanged']); | ||
assert_attribute_log_entry(logEntries.last(), {name: coAtName, oldValue: coAtValue1, newValue: coAtValue2, namespace: null}); | ||
|
||
}, name + ' must enqueue an attributeChanged reaction when replacing an existing attribute'); | ||
|
||
parentElement.parentNode.removeChild(parentElement); | ||
} | ||
|
||
//Package JS attribute depends another atrribute | ||
function testReAtWithDeAt(jsAtName, coAtName, deAtName, jsAtValue1, jsAtValue2, deAtValue, name, elementName, pElementName, interfaceName) { | ||
testReAtWithDeAtWithCoValues(jsAtName, coAtName, deAtName, jsAtValue1, jsAtValue1, jsAtValue2, jsAtValue2, deAtValue, name, elementName, pElementName, interfaceName); | ||
} | ||
|
||
testReflectAttributeWithContentValues('autofocus', 'autofocus', true, 'true', false, 'false', 'autofocus on HTMLButtonElement', 'button', HTMLButtonElement); | ||
testReflectAttributeWithContentValues('disabled', 'disabled', true, 'true', false, 'false', 'disabled on HTMLButtonElement', 'button', HTMLButtonElement); | ||
testReflectAttribute('name', 'name', 'intel', 'intel1', 'name on HTMLButtonElement', 'button', HTMLButtonElement); | ||
testReflectAttribute('value', 'value', 'HTML', 'CSS', 'value on HTMLButtonElement', 'button', HTMLButtonElement); | ||
testReAtWithPNode('type', 'type', 'submit', 'reset', 'type on HTMLButtonElement', 'button', 'form', HTMLButtonElement); | ||
testReAtWithDeAt('formAction', 'formaction', 'type', 'intel.asp', 'intel1.asp', 'submit', 'formAction on HTMLButtonElement', 'button', 'form', HTMLButtonElement); | ||
testReAtWithDeAt('formEnctype', 'formenctype', 'type', 'text/plain', 'multipart/form-data', 'submit', 'formEnctype on HTMLButtonElement', 'button', 'form', HTMLButtonElement); | ||
testReAtWithDeAt('formMethod', 'formmethod', 'type', 'get', 'post', 'submit', 'formMethod on HTMLButtonElement', 'button', 'form', HTMLButtonElement); | ||
testReAtWithDeAtWithCoValues('formNoValidate', 'formnoValidate', 'type', true, 'true', false, 'false', 'submit', 'formNoValidate on HTMLButtonElement', 'button', 'form', HTMLButtonElement); | ||
testReAtWithDeAt('formTarget', 'formtarget', 'type', '_blank', '_self', 'submit', 'formTarget on HTMLButtonElement', 'button', 'form', HTMLButtonElement); | ||
|
||
</script> | ||
</body> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters