| Index: pkg/custom_element/test/custom_element_test.dart
 | 
| diff --git a/pkg/custom_element/test/custom_element_test.dart b/pkg/custom_element/test/custom_element_test.dart
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..93fcd1555cc2e63f603c975318a45098bc377977
 | 
| --- /dev/null
 | 
| +++ b/pkg/custom_element/test/custom_element_test.dart
 | 
| @@ -0,0 +1,80 @@
 | 
| +// 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 custom_element.test.custom_element_test;
 | 
| +
 | 
| +import 'dart:async';
 | 
| +import 'dart:html';
 | 
| +import 'package:custom_element/custom_element.dart';
 | 
| +import 'package:unittest/html_config.dart';
 | 
| +import 'package:unittest/unittest.dart';
 | 
| +
 | 
| +main() {
 | 
| +  useHtmlConfiguration();
 | 
| +
 | 
| +  test('register creates the element and calls lifecycle methods', () {
 | 
| +    // Add element to the page.
 | 
| +    var element = new Element.html('<fancy-button>foo bar</fancy-button>');
 | 
| +    document.body.nodes.add(element);
 | 
| +
 | 
| +    var xtag = null;
 | 
| +    registerCustomElement('fancy-button', () => xtag = new FancyButton());
 | 
| +    expect(xtag, isNotNull, reason: 'FancyButton was created');
 | 
| +    expect(element.xtag, xtag, reason: 'xtag pointer should be set');
 | 
| +    expect(xtag.host, element, reason: 'host pointer should be set');
 | 
| +    expect(xtag.lifecycle, ['created']);
 | 
| +    return new Future(() {
 | 
| +      expect(xtag.lifecycle, ['created', 'inserted']);
 | 
| +      element.remove();
 | 
| +      return new Future(() {
 | 
| +        expect(xtag.lifecycle, ['created', 'inserted', 'removed']);
 | 
| +      });
 | 
| +    });
 | 
| +  });
 | 
| +
 | 
| +  test('create a component in code', () {
 | 
| +    var element = createElement('super-button');
 | 
| +    expect(element.xtag, element, reason: 'element not registered');
 | 
| +
 | 
| +    var xtag = null;
 | 
| +    registerCustomElement('super-button', () => xtag = new FancyButton());
 | 
| +
 | 
| +    element = createElement('super-button');
 | 
| +    expect(xtag, isNotNull, reason: 'FancyButton was created');
 | 
| +    expect(element.xtag, xtag, reason: 'xtag pointer should be set');
 | 
| +    expect(xtag.host, element, reason: 'host pointer should be set');
 | 
| +    expect(xtag.lifecycle, ['created']);
 | 
| +    return new Future(() {
 | 
| +      expect(xtag.lifecycle, ['created'], reason: 'not inserted into document');
 | 
| +
 | 
| +      document.body.nodes.add(element);
 | 
| +      return new Future(() {
 | 
| +        expect(xtag.lifecycle, ['created'],
 | 
| +            reason: 'mutation observer not implemented yet');
 | 
| +
 | 
| +        element.remove();
 | 
| +        return new Future(() {
 | 
| +          expect(xtag.lifecycle, ['created'],
 | 
| +              reason: 'mutation observer not implemented yet');
 | 
| +        });
 | 
| +      });
 | 
| +    });
 | 
| +  });
 | 
| +}
 | 
| +
 | 
| +class FancyButton extends CustomElement {
 | 
| +  final lifecycle = [];
 | 
| +  created() {
 | 
| +    super.created();
 | 
| +    lifecycle.add('created');
 | 
| +  }
 | 
| +  inserted() {
 | 
| +    super.inserted();
 | 
| +    lifecycle.add('inserted');
 | 
| +  }
 | 
| +  removed() {
 | 
| +    super.removed();
 | 
| +    lifecycle.add('removed');
 | 
| +  }
 | 
| +}
 | 
| 
 |