| Index: third_party/WebKit/LayoutTests/imported/wpt/custom-elements/reactions/resources/reactions.js
|
| diff --git a/third_party/WebKit/LayoutTests/imported/wpt/custom-elements/reactions/resources/reactions.js b/third_party/WebKit/LayoutTests/imported/wpt/custom-elements/reactions/resources/reactions.js
|
| index b0543bbd428df3460fe24068d794bf2280c7d58c..43ce4fd7ad83ec4066abffa28b3581f1685d1f93 100644
|
| --- a/third_party/WebKit/LayoutTests/imported/wpt/custom-elements/reactions/resources/reactions.js
|
| +++ b/third_party/WebKit/LayoutTests/imported/wpt/custom-elements/reactions/resources/reactions.js
|
| @@ -260,3 +260,102 @@ function testAttributeRemover(testFunction, name, options) {
|
| assert_array_equals(element.takeLog().types(), []);
|
| }, name + ' must not enqueue an attributeChanged reaction when removing an existing unobserved attribute');
|
| }
|
| +
|
| +function test_mutating_style_property_value(testFunction, name, options) {
|
| + const propertyName = (options || {}).propertyName || 'color';
|
| + const idlName = (options || {}).idlName || 'color';
|
| + const value1 = (options || {}).value1 || 'blue';
|
| + const rule1 = `${propertyName}: ${value1};`;
|
| + const value2 = (options || {}).value2 || 'red';
|
| + const rule2 = `${propertyName}: ${value2};`;
|
| +
|
| + test(function () {
|
| + var element = define_new_custom_element(['style']);
|
| + var instance = document.createElement(element.name);
|
| + assert_array_equals(element.takeLog().types(), ['constructed']);
|
| + testFunction(instance, propertyName, idlName, value1);
|
| + assert_equals(instance.getAttribute('style'), rule1);
|
| + var logEntries = element.takeLog();
|
| + assert_array_equals(logEntries.types(), ['attributeChanged']);
|
| + assert_attribute_log_entry(logEntries.last(), {name: 'style', oldValue: null, newValue: rule1, namespace: null});
|
| + }, name + ' must enqueue an attributeChanged reaction when it adds the observed style attribute');
|
| +
|
| + test(function () {
|
| + var element = define_new_custom_element(['title']);
|
| + var instance = document.createElement(element.name);
|
| + assert_array_equals(element.takeLog().types(), ['constructed']);
|
| + testFunction(instance, propertyName, idlName, value1);
|
| + assert_equals(instance.getAttribute('style'), rule1);
|
| + assert_array_equals(element.takeLog().types(), []);
|
| + }, name + ' must not enqueue an attributeChanged reaction when it adds the style attribute but the style attribute is not observed');
|
| +
|
| + test(function () {
|
| + var element = define_new_custom_element(['style']);
|
| + var instance = document.createElement(element.name);
|
| + testFunction(instance, propertyName, idlName, value1);
|
| + assert_array_equals(element.takeLog().types(), ['constructed', 'attributeChanged']);
|
| + testFunction(instance, propertyName, idlName, value2);
|
| + assert_equals(instance.getAttribute('style'), rule2);
|
| + var logEntries = element.takeLog();
|
| + assert_array_equals(logEntries.types(), ['attributeChanged']);
|
| + assert_attribute_log_entry(logEntries.last(), {name: 'style', oldValue: rule1, newValue: rule2, namespace: null});
|
| + }, name + ' must enqueue an attributeChanged reaction when it mutates the observed style attribute');
|
| +
|
| + test(function () {
|
| + var element = define_new_custom_element([]);
|
| + var instance = document.createElement(element.name);
|
| + testFunction(instance, propertyName, idlName, value1);
|
| + assert_array_equals(element.takeLog().types(), ['constructed']);
|
| + testFunction(instance, propertyName, idlName, value2);
|
| + assert_equals(instance.getAttribute('style'), rule2);
|
| + assert_array_equals(element.takeLog().types(), []);
|
| + }, name + ' must not enqueue an attributeChanged reaction when it mutates the style attribute but the style attribute is not observed');
|
| +}
|
| +
|
| +function test_removing_style_property_value(testFunction, name) {
|
| + test(function () {
|
| + var element = define_new_custom_element(['style']);
|
| + var instance = document.createElement(element.name);
|
| + instance.setAttribute('style', 'color: red; display: none;');
|
| + assert_array_equals(element.takeLog().types(), ['constructed', 'attributeChanged']);
|
| + testFunction(instance, 'color', 'color');
|
| + assert_equals(instance.getAttribute('style'), 'display: none;'); // Don't make this empty since browser behaviors are inconsistent now.
|
| + var logEntries = element.takeLog();
|
| + assert_array_equals(logEntries.types(), ['attributeChanged']);
|
| + assert_attribute_log_entry(logEntries.last(), {name: 'style', oldValue: 'color: red; display: none;', newValue: 'display: none;', namespace: null});
|
| + }, name + ' must enqueue an attributeChanged reaction when it removes a property from the observed style attribute');
|
| +
|
| + test(function () {
|
| + var element = define_new_custom_element(['class']);
|
| + var instance = document.createElement(element.name);
|
| + instance.setAttribute('style', 'color: red; display: none;');
|
| + assert_array_equals(element.takeLog().types(), ['constructed']);
|
| + testFunction(instance, 'color', 'color');
|
| + assert_equals(instance.getAttribute('style'), 'display: none;'); // Don't make this empty since browser behaviors are inconsistent now.
|
| + assert_array_equals(element.takeLog().types(), []);
|
| + }, name + ' must not enqueue an attributeChanged reaction when it removes a property from the style attribute but the style attribute is not observed');
|
| +}
|
| +
|
| +function test_mutating_style_property_priority(testFunction, name) {
|
| + test(function () {
|
| + var element = define_new_custom_element(['style']);
|
| + var instance = document.createElement(element.name);
|
| + instance.setAttribute('style', 'color: red');
|
| + assert_array_equals(element.takeLog().types(), ['constructed', 'attributeChanged']);
|
| + testFunction(instance, 'color', 'color', true);
|
| + assert_equals(instance.getAttribute('style'), 'color: red !important;');
|
| + var logEntries = element.takeLog();
|
| + assert_array_equals(logEntries.types(), ['attributeChanged']);
|
| + assert_attribute_log_entry(logEntries.last(), {name: 'style', oldValue: 'color: red', newValue: 'color: red !important;', namespace: null});
|
| + }, name + ' must enqueue an attributeChanged reaction when it makes a property important and the style attribute is observed');
|
| +
|
| + test(function () {
|
| + var element = define_new_custom_element(['id']);
|
| + var instance = document.createElement(element.name);
|
| + instance.setAttribute('style', 'color: red');
|
| + assert_array_equals(element.takeLog().types(), ['constructed']);
|
| + testFunction(instance, 'color', 'color', true);
|
| + assert_equals(instance.getAttribute('style'), 'color: red !important;');
|
| + assert_array_equals(element.takeLog().types(), []);
|
| + }, name + ' must enqueue an attributeChanged reaction when it makes a property important but the style attribute is not observed');
|
| +}
|
|
|