// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. library attribute_changed_callback_test; import 'package:unittest/unittest.dart'; import 'package:unittest/html_config.dart'; import 'dart:html'; class A extends HtmlElement { static final tag = 'x-a'; factory A() => new Element.tag(tag); static var attributeChangedInvocations = 0; void attributeChanged(name, oldValue, newValue) { attributeChangedInvocations++; } } class B extends HtmlElement { static final tag = 'x-b'; factory B() => new Element.tag(tag); static var invocations = []; void created() { invocations.add('created'); } void attributeChanged(name, oldValue, newValue) { invocations.add('$name: $oldValue => $newValue'); } } main() { useHtmlConfiguration(); // Adapted from Blink's fast/dom/custom/attribute-changed-callback test. test('transfer attribute changed callback', () { document.register(A.tag, A); var element = new A(); element.attributes['a'] = 'b'; expect(A.attributeChangedInvocations, 1); }); test('add, change and remove an attribute', () { document.register(B.tag, B); var b = new B(); b.id = 'x'; expect(B.invocations, ['created', 'id: null => x']); B.invocations = []; b.attributes.remove('id'); expect(B.invocations, ['id: x => null']); B.invocations = []; b.attributes['data-s'] = 't'; expect(B.invocations, ['data-s: null => t']); B.invocations = []; b.classList.toggle('u'); expect(B.invocations, ['class: null => u']); b.attributes['data-v'] = 'w'; B.invocations = []; b.attributes['data-v'] = 'x'; expect(B.invocations, ['data-v: w => x']); B.invocations = []; b.attributes['data-v'] = 'x'; expect(B.invocations, []); }); }