| Index: client/tests/client/html/ElementTests.dart
 | 
| diff --git a/client/tests/client/html/ElementTests.dart b/client/tests/client/html/ElementTests.dart
 | 
| index d14f0625ad562f15cc7ff80c90004c04436a95fb..38c608a238f8e033b5db67c6c5e2521b619ec743 100644
 | 
| --- a/client/tests/client/html/ElementTests.dart
 | 
| +++ b/client/tests/client/html/ElementTests.dart
 | 
| @@ -41,6 +41,11 @@ void testConstructorHelper(String tag, String htmlSnippet,
 | 
|    Expect.equals(elementFromSnippet.text, expectedText);
 | 
|  }
 | 
|  
 | 
| +Element makeElement() => new Element.tag('div');
 | 
| +
 | 
| +Element makeElementWithChildren() =>
 | 
| +  new Element.html("<div><br/><img/><input/></div>");
 | 
| +
 | 
|  void testElement() { 
 | 
|    asyncTest('computedStyle', 1, () {
 | 
|      final element = document.body;
 | 
| @@ -389,4 +394,145 @@ void testElement() {
 | 
|      // attributes['style'] = 'width: 300px;';
 | 
|      // Expect.equals(attributes.length, 5);*/
 | 
|    });
 | 
| +
 | 
| +  group('elements', () {
 | 
| +    test('is a subset of nodes', () {
 | 
| +      var el = new Element.html("<div>Foo<br/><img/></div>");
 | 
| +      Expect.equals(3, el.nodes.length);
 | 
| +      Expect.equals(2, el.elements.length);
 | 
| +      Expect.equals(el.nodes[1], el.elements[0]);
 | 
| +      Expect.equals(el.nodes[2], el.elements[1]);
 | 
| +    });
 | 
| +
 | 
| +    test('changes when an element is added to nodes', () {
 | 
| +      var el = new Element.html("<div>Foo<br/><img/></div>");
 | 
| +      el.nodes.add(new Element.tag('hr'));
 | 
| +      Expect.equals(3, el.elements.length);
 | 
| +      Expect.isTrue(el.elements[2] is HRElement);
 | 
| +      Expect.equals(el.nodes[3], el.elements[2]);
 | 
| +    });
 | 
| +
 | 
| +    test('changes nodes when an element is added', () {
 | 
| +      var el = new Element.html("<div>Foo<br/><img/></div>");
 | 
| +      el.elements.add(new Element.tag('hr'));
 | 
| +      Expect.equals(4, el.nodes.length);
 | 
| +      Expect.isTrue(el.nodes[3] is HRElement);
 | 
| +      Expect.equals(el.elements[2], el.nodes[3]);
 | 
| +    });
 | 
| +
 | 
| +    test('first', () {
 | 
| +      var el = makeElementWithChildren();
 | 
| +      Expect.isTrue(el.elements.first is BRElement);
 | 
| +    });
 | 
| +
 | 
| +    test('last', () {
 | 
| +      var el = makeElementWithChildren();
 | 
| +      Expect.isTrue(el.elements.last() is InputElement);
 | 
| +    });
 | 
| +
 | 
| +    test('forEach', () {
 | 
| +      var els = [];
 | 
| +      var el = makeElementWithChildren();
 | 
| +      el.elements.forEach((n) => els.add(n));
 | 
| +      Expect.isTrue(els[0] is BRElement);
 | 
| +      Expect.isTrue(els[1] is ImageElement);
 | 
| +      Expect.isTrue(els[2] is InputElement);
 | 
| +    });
 | 
| +
 | 
| +    test('filter', () {
 | 
| +      var filtered = makeElementWithChildren().elements.
 | 
| +        filter((n) => n is ImageElement);
 | 
| +      Expect.equals(1, filtered.length);
 | 
| +      Expect.isTrue(filtered[0] is ImageElement);
 | 
| +    });
 | 
| +
 | 
| +    test('every', () {
 | 
| +      var el = makeElementWithChildren();
 | 
| +      Expect.isTrue(el.elements.every((n) => n is Element));
 | 
| +      Expect.isFalse(el.elements.every((n) => n is InputElement));
 | 
| +    });
 | 
| +
 | 
| +    test('some', () {
 | 
| +      var el = makeElementWithChildren();
 | 
| +      Expect.isTrue(el.elements.some((n) => n is InputElement));
 | 
| +      Expect.isFalse(el.elements.some((n) => n is SVGElement));
 | 
| +    });
 | 
| +
 | 
| +    test('isEmpty', () {
 | 
| +      Expect.isTrue(makeElement().elements.isEmpty());
 | 
| +      Expect.isFalse(makeElementWithChildren().elements.isEmpty());
 | 
| +    });
 | 
| +
 | 
| +    test('length', () {
 | 
| +      Expect.equals(0, makeElement().elements.length);
 | 
| +      Expect.equals(3, makeElementWithChildren().elements.length);
 | 
| +    });
 | 
| +
 | 
| +    test('[]', () {
 | 
| +      var el = makeElementWithChildren();
 | 
| +      Expect.isTrue(el.elements[0] is BRElement);
 | 
| +      Expect.isTrue(el.elements[1] is ImageElement);
 | 
| +      Expect.isTrue(el.elements[2] is InputElement);
 | 
| +    });
 | 
| +
 | 
| +    test('[]=', () {
 | 
| +      var el = makeElementWithChildren();
 | 
| +      el.elements[1] = new Element.tag('hr');
 | 
| +      Expect.isTrue(el.elements[0] is BRElement);
 | 
| +      Expect.isTrue(el.elements[1] is HRElement);
 | 
| +      Expect.isTrue(el.elements[2] is InputElement);
 | 
| +    });
 | 
| +
 | 
| +    test('add', () {
 | 
| +      var el = makeElement();
 | 
| +      el.elements.add(new Element.tag('hr'));
 | 
| +      Expect.isTrue(el.elements.last() is HRElement);
 | 
| +    });
 | 
| +
 | 
| +    test('addLast', () {
 | 
| +      var el = makeElement();
 | 
| +      el.elements.addLast(new Element.tag('hr'));
 | 
| +      Expect.isTrue(el.elements.last() is HRElement);
 | 
| +    });
 | 
| +
 | 
| +    test('iterator', () {
 | 
| +      var els = [];
 | 
| +      var el = makeElementWithChildren();
 | 
| +      for (var subel in el.elements) {
 | 
| +        els.add(subel);
 | 
| +      }
 | 
| +      Expect.isTrue(els[0] is BRElement);
 | 
| +      Expect.isTrue(els[1] is ImageElement);
 | 
| +      Expect.isTrue(els[2] is InputElement);
 | 
| +    });
 | 
| +
 | 
| +    test('addAll', () {
 | 
| +      var el = makeElementWithChildren();
 | 
| +      el.elements.addAll([
 | 
| +        new Element.tag('span'),
 | 
| +        new Element.tag('a'),
 | 
| +        new Element.tag('h1')
 | 
| +      ]);
 | 
| +      Expect.isTrue(el.elements[0] is BRElement);
 | 
| +      Expect.isTrue(el.elements[1] is ImageElement);
 | 
| +      Expect.isTrue(el.elements[2] is InputElement);
 | 
| +      Expect.isTrue(el.elements[3] is SpanElement);
 | 
| +      Expect.isTrue(el.elements[4] is AnchorElement);
 | 
| +      Expect.isTrue(el.elements[5] is HeadingElement);
 | 
| +    });
 | 
| +
 | 
| +    test('clear', () {
 | 
| +      var el = makeElementWithChildren();
 | 
| +      el.elements.clear();
 | 
| +      Expect.listEquals([], el.elements);
 | 
| +    });
 | 
| +
 | 
| +    test('removeLast', () {
 | 
| +      var el = makeElementWithChildren();
 | 
| +      Expect.isTrue(el.elements.removeLast() is InputElement);
 | 
| +      Expect.equals(2, el.elements.length);
 | 
| +      Expect.isTrue(el.elements.removeLast() is ImageElement);
 | 
| +      Expect.equals(1, el.elements.length);
 | 
| +    });
 | 
| +  });
 | 
|  }
 | 
| 
 |