Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add CEReactions tests for HTMLButtonElement (#10137)
* Add CEReactions tests for HTMLButtonElement - Verify attributes of HTMLButtonElement interface have CEReactions - Adjust functions "testReflectAttribute" and "testReflectAttributeWithContentValues" in the reactions.js to compatible customized built-in element
- Loading branch information
Showing
2 changed files
with
124 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,107 @@ | ||
<!DOCTYPE html> | ||
<title>Custom Elements: CEReactions on HTMLButtonElement interface</title> | ||
<meta name="author" title="Zhang Xiaoyu" href="xiaoyux.zhang@intel.com"> | ||
<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="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
<script src="../resources/custom-elements-helpers.js"></script> | ||
<script src="./resources/reactions.js"></script> | ||
<body> | ||
<script> | ||
|
||
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); | ||
testReflectAttrWithParentNode('type', 'type', 'submit', 'submit', 'reset', 'reset', 'type on HTMLButtonElement', 'button', 'form', HTMLButtonElement); | ||
testReflectAttrWithDepAttr('formAction', 'formaction', 'type', 'intel.asp', 'intel1.asp', 'submit', 'formAction on HTMLButtonElement', 'button', 'form', HTMLButtonElement); | ||
testReflectAttrWithDepAttr('formEnctype', 'formenctype', 'type', 'text/plain', 'multipart/form-data', 'submit', 'formEnctype on HTMLButtonElement', 'button', 'form', HTMLButtonElement); | ||
testReflectAttrWithDepAttr('formMethod', 'formmethod', 'type', 'get', 'post', 'submit', 'formMethod on HTMLButtonElement', 'button', 'form', HTMLButtonElement); | ||
testReflectAttrWithContentValuesAndDepAttr('formNoValidate', 'formnovalidate', 'type', true, 'true', false, 'false', 'submit', 'formNoValidate on HTMLButtonElement', 'button', 'form', HTMLButtonElement); | ||
testReflectAttrWithDepAttr('formTarget', 'formtarget', 'type', '_blank', '_self', 'submit', 'formTarget on HTMLButtonElement', 'button', 'form', HTMLButtonElement); | ||
|
||
//In parent node, sub node's observeAttribute can enqueue by changing attribute value | ||
//Test reflect attribute with content values and parent node | ||
function testReflectAttrWithParentNode(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); | ||
} | ||
|
||
//In parent node, sub node's observeAttribute which depends another attribute can enqueue by changing attribute value | ||
//Test reflect attribute with content values and dependent attribute | ||
function testReflectAttrWithContentValuesAndDepAttr(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 reflect attribute with dependent attribute | ||
function testReflectAttrWithDepAttr(jsAtName, coAtName, deAtName, jsAtValue1, jsAtValue2, deAtValue, name, elementName, pElementName, interfaceName) { | ||
testReflectAttrWithContentValuesAndDepAttr(jsAtName, coAtName, deAtName, jsAtValue1, jsAtValue1, jsAtValue2, jsAtValue2, deAtValue, name, elementName, pElementName, interfaceName); | ||
} | ||
|
||
</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