OLD | NEW |
(Empty) | |
| 1 <!DOCTYPE html> |
| 2 <html> |
| 3 <head> |
| 4 <title>Custom Elements: CEReactions on DOMStringMap interface</title> |
| 5 <meta name="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"> |
| 6 <meta name="assert" content="setter and deleter of DOMStringMap interface must h
ave CEReactions"> |
| 7 <meta name="help" content="https://html.spec.whatwg.org/#domstringmap"> |
| 8 <script src="/resources/testharness.js"></script> |
| 9 <script src="/resources/testharnessreport.js"></script> |
| 10 <script src="../resources/custom-elements-helpers.js"></script> |
| 11 <script src="./resources/reactions.js"></script> |
| 12 </head> |
| 13 <body> |
| 14 <div id="log"></div> |
| 15 <script> |
| 16 |
| 17 test(function () { |
| 18 var element = define_new_custom_element(['data-foo']); |
| 19 var instance = document.createElement(element.name); |
| 20 assert_array_equals(element.takeLog().types(), ['constructed']); |
| 21 instance.dataset.foo = 'bar'; |
| 22 var logEntries = element.takeLog(); |
| 23 assert_array_equals(logEntries.types(), ['attributeChanged']); |
| 24 assert_attribute_log_entry(logEntries.last(), {name: 'data-foo', oldValue: n
ull, newValue: 'bar', namespace: null}); |
| 25 }, 'setter on DOMStringMap must enqueue an attributeChanged reaction when adding
an observed data attribute'); |
| 26 |
| 27 test(function () { |
| 28 var element = define_new_custom_element(['data-bar']); |
| 29 var instance = document.createElement(element.name); |
| 30 assert_array_equals(element.takeLog().types(), ['constructed']); |
| 31 instance.dataset.foo = 'bar'; |
| 32 assert_array_equals(element.takeLog().types(), []); |
| 33 }, 'setter on DOMStringMap must not enqueue an attributeChanged reaction when ad
ding an unobserved data attribute'); |
| 34 |
| 35 test(function () { |
| 36 var element = define_new_custom_element(['data-foo']); |
| 37 var instance = document.createElement(element.name); |
| 38 instance.dataset.foo = 'bar'; |
| 39 assert_array_equals(element.takeLog().types(), ['constructed', 'attributeCha
nged']); |
| 40 instance.dataset.foo = 'baz'; |
| 41 var logEntries = element.takeLog(); |
| 42 assert_array_equals(logEntries.types(), ['attributeChanged']); |
| 43 assert_attribute_log_entry(logEntries.last(), {name: 'data-foo', oldValue: '
bar', newValue: 'baz', namespace: null}); |
| 44 }, 'setter on DOMStringMap must enqueue an attributeChanged reaction when mutati
ng the value of an observed data attribute'); |
| 45 |
| 46 test(function () { |
| 47 var element = define_new_custom_element(['data-foo']); |
| 48 var instance = document.createElement(element.name); |
| 49 instance.dataset.foo = 'bar'; |
| 50 assert_array_equals(element.takeLog().types(), ['constructed', 'attributeCha
nged']); |
| 51 instance.dataset.foo = 'bar'; |
| 52 var logEntries = element.takeLog(); |
| 53 assert_array_equals(logEntries.types(), ['attributeChanged']); |
| 54 assert_attribute_log_entry(logEntries.last(), {name: 'data-foo', oldValue: '
bar', newValue: 'bar', namespace: null}); |
| 55 }, 'setter on DOMStringMap must enqueue an attributeChanged reaction when mutati
ng the value of an observed data attribute to the same value'); |
| 56 |
| 57 test(function () { |
| 58 var element = define_new_custom_element(['data-zero']); |
| 59 var instance = document.createElement(element.name); |
| 60 instance.dataset.foo = 'bar'; |
| 61 assert_array_equals(element.takeLog().types(), ['constructed']); |
| 62 instance.dataset.foo = 'baz'; |
| 63 assert_array_equals(element.takeLog().types(), []); |
| 64 }, 'setter on DOMStringMap must not enqueue an attributeChanged reaction when mu
tating the value of an unobserved data attribute'); |
| 65 |
| 66 test(function () { |
| 67 var element = define_new_custom_element(['data-foo']); |
| 68 var instance = document.createElement(element.name); |
| 69 instance.dataset.foo = 'bar'; |
| 70 assert_array_equals(element.takeLog().types(), ['constructed', 'attributeCha
nged']); |
| 71 delete instance.dataset.foo; |
| 72 var logEntries = element.takeLog(); |
| 73 assert_array_equals(logEntries.types(), ['attributeChanged']); |
| 74 assert_attribute_log_entry(logEntries.last(), {name: 'data-foo', oldValue: '
bar', newValue: null, namespace: null}); |
| 75 }, 'deleter on DOMStringMap must enqueue an attributeChanged reaction when remov
ing an observed data attribute'); |
| 76 |
| 77 test(function () { |
| 78 var element = define_new_custom_element(['data-bar']); |
| 79 var instance = document.createElement(element.name); |
| 80 instance.dataset.foo = 'bar'; |
| 81 assert_array_equals(element.takeLog().types(), ['constructed']); |
| 82 delete instance.dataset.foo; |
| 83 assert_array_equals(element.takeLog().types(), []); |
| 84 }, 'deleter on DOMStringMap must not enqueue an attributeChanged reaction when r
emoving an unobserved data attribute'); |
| 85 |
| 86 test(function () { |
| 87 var element = define_new_custom_element(['data-foo']); |
| 88 var instance = document.createElement(element.name); |
| 89 assert_array_equals(element.takeLog().types(), ['constructed']); |
| 90 delete instance.dataset.foo; |
| 91 assert_array_equals(element.takeLog().types(), []); |
| 92 }, 'deleter on DOMStringMap must not enqueue an attributeChanged reaction when i
t does not remove a data attribute'); |
| 93 |
| 94 </script> |
| 95 </body> |
| 96 </html> |
OLD | NEW |