| OLD | NEW |
| (Empty) | |
| 1 <!DOCTYPE html> |
| 2 <script src="../../../resources/testharness.js"></script> |
| 3 <script src="../../../resources/testharnessreport.js"></script> |
| 4 <body> |
| 5 <script> |
| 6 test(function () { |
| 7 var attributeChangedInvocations = 0; |
| 8 function attributeChanged(_, _, _) { |
| 9 attributeChangedInvocations++; |
| 10 } |
| 11 |
| 12 var getterInvocations = 0; |
| 13 function getter() { |
| 14 getterInvocations++; |
| 15 return attributeChanged; |
| 16 } |
| 17 |
| 18 function failer() { |
| 19 assert_unreached('the attribute changed callback must not be retrieved a
fter registration'); |
| 20 } |
| 21 |
| 22 var proto = Object.create(HTMLElement.prototype, { |
| 23 attributeChangedCallback: { |
| 24 get: getter |
| 25 } |
| 26 }); |
| 27 var ctor = document.register('x-a', {prototype: proto}); |
| 28 assert_equals(getterInvocations, 1, 'the attribute changed callback must hav
e been retrieved'); |
| 29 |
| 30 proto.attributeChangedCallback = failer; |
| 31 var element = new ctor(); |
| 32 element.setAttribute('a', 'b'); |
| 33 assert_equals(attributeChangedInvocations, 1, 'the attribute changed callbac
k retrieved at registration must be invoked'); |
| 34 }, 'transfer attribute changed callback'); |
| 35 |
| 36 test(function () { |
| 37 var invocations = []; |
| 38 function created() { |
| 39 invocations.push('created'); |
| 40 } |
| 41 function attributeChanged(name, oldValue, newValue) { |
| 42 invocations.push(name + ': ' + oldValue + ' => ' + newValue); |
| 43 } |
| 44 |
| 45 var proto = Object.create(HTMLElement.prototype); |
| 46 proto.createdCallback = created; |
| 47 proto.attributeChangedCallback = attributeChanged; |
| 48 var B = document.register('x-b', {prototype: proto}); |
| 49 |
| 50 var b = new B(); |
| 51 b.id = 'x'; |
| 52 assert_array_equals(invocations, ['created', 'id: null => x'], 'setting a re
flected attribute should invoke the attributeChanged callback'); |
| 53 |
| 54 invocations = []; |
| 55 b.removeAttribute('id'); |
| 56 assert_array_equals(invocations, ['id: x => null'], 'removing an attribute s
hould invoke the attributeChangedCallback'); |
| 57 |
| 58 invocations = []; |
| 59 b.setAttribute('data-x', 'y'); |
| 60 assert_array_equals(invocations, ['data-x: null => y'], 'setAttribute should
invoke the attributeChangedCallback'); |
| 61 |
| 62 invocations = []; |
| 63 b.classList.toggle('z'); |
| 64 assert_array_equals(invocations, ['class: null => z'], 'changing the class a
ttribute through classList should invoke the attributeChangedCallback'); |
| 65 }, 'add, change and remove an attribute'); |
| 66 </script> |
| OLD | NEW |