• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5import 'dart:html' as html;
6
7import 'package:ui/src/engine.dart';
8import 'package:test/test.dart';
9
10void main() {
11  test('creating elements works', () {
12    var renderer = new DomRenderer();
13    var element = renderer.createElement('div');
14    expect(element, isNotNull);
15  });
16  test('can append children to parents', () {
17    var renderer = new DomRenderer();
18    var parent = renderer.createElement('div');
19    var child = renderer.createElement('div');
20    renderer.append(parent, child);
21    expect(parent.children, hasLength(1));
22  });
23  test('can set text on elements', () {
24    var renderer = new DomRenderer();
25    var element = renderer.createElement('div');
26    renderer.setText(element, 'Hello World');
27    expect(element.text, 'Hello World');
28  });
29  test('can set attributes on elements', () {
30    var renderer = new DomRenderer();
31    var element = renderer.createElement('div');
32    renderer.setElementAttribute(element, 'id', 'foo');
33    expect(element.id, 'foo');
34  });
35  test('can add classes to elements', () {
36    var renderer = new DomRenderer();
37    var element = renderer.createElement('div');
38    renderer.addElementClass(element, 'foo');
39    renderer.addElementClass(element, 'bar');
40    expect(element.classes, ['foo', 'bar']);
41  });
42  test('can remove classes from elements', () {
43    var renderer = new DomRenderer();
44    var element = renderer.createElement('div');
45    renderer.addElementClass(element, 'foo');
46    renderer.addElementClass(element, 'bar');
47    expect(element.classes, ['foo', 'bar']);
48    renderer.removeElementClass(element, 'foo');
49    expect(element.classes, ['bar']);
50  });
51  test('can set style properties on elements', () {
52    var renderer = new DomRenderer();
53    var element = renderer.createElement('div');
54    renderer.setElementStyle(element, 'color', 'red');
55    expect(element.style.color, 'red');
56  });
57  test('can remove style properties from elements', () {
58    var renderer = new DomRenderer();
59    var element = renderer.createElement('div');
60    renderer.setElementStyle(element, 'color', 'blue');
61    expect(element.style.color, 'blue');
62    renderer.setElementStyle(element, 'color', null);
63    expect(element.style.color, '');
64  });
65  test('elements can have children', () {
66    var renderer = new DomRenderer();
67    var element = renderer.createElement('div');
68    renderer.createElement('div', parent: element);
69    expect(element.children, hasLength(1));
70  });
71  test('can detach elements', () {
72    var renderer = new DomRenderer();
73    var element = renderer.createElement('div');
74    var child = renderer.createElement('div', parent: element);
75    renderer.detachElement(child);
76    expect(element.children, isEmpty);
77  });
78  test('can reattach detached elements', () {
79    var renderer = new DomRenderer();
80    var element = renderer.createElement('div');
81    var child = renderer.createElement('div', parent: element);
82    var otherChild = renderer.createElement('foo', parent: element);
83    renderer.detachElement(child);
84    expect(element.children, hasLength(1));
85    renderer.attachBeforeElement(element, otherChild, child);
86    expect(element.children, hasLength(2));
87  });
88  test('insert two elements in the middle of a child list', () {
89    var renderer = new DomRenderer();
90    var parent = renderer.createElement('div');
91    renderer.createElement('a', parent: parent);
92    var childD = renderer.createElement('d', parent: parent);
93    expect(parent.innerHtml, '<a></a><d></d>');
94    var childB = renderer.createElement('b', parent: parent);
95    var childC = renderer.createElement('c', parent: parent);
96    renderer.attachBeforeElement(parent, childD, childB);
97    renderer.attachBeforeElement(parent, childD, childC);
98    expect(parent.innerHtml, '<a></a><b></b><c></c><d></d>');
99  });
100  test('replaces viewport meta tags during style reset', () {
101    html.MetaElement existingMeta = html.MetaElement()
102      ..name = 'viewport'
103      ..content = 'foo=bar';
104    html.document.head.append(existingMeta);
105    expect(existingMeta.isConnected, true);
106
107    var renderer = new DomRenderer();
108    renderer.reset();
109  });
110}
111