-
Notifications
You must be signed in to change notification settings - Fork 26.7k
/
dom_renderer_test.dart
131 lines (123 loc) · 5.33 KB
/
dom_renderer_test.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:html' as html;
import 'package:ui/src/engine.dart';
import 'package:test/test.dart';
void main() {
test('creating elements works', () {
final DomRenderer renderer = DomRenderer();
final html.Element element = renderer.createElement('div');
expect(element, isNotNull);
});
test('can append children to parents', () {
final DomRenderer renderer = DomRenderer();
final html.Element parent = renderer.createElement('div');
final html.Element child = renderer.createElement('div');
renderer.append(parent, child);
expect(parent.children, hasLength(1));
});
test('can set text on elements', () {
final DomRenderer renderer = DomRenderer();
final html.Element element = renderer.createElement('div');
renderer.setText(element, 'Hello World');
expect(element.text, 'Hello World');
});
test('can set attributes on elements', () {
final DomRenderer renderer = DomRenderer();
final html.Element element = renderer.createElement('div');
renderer.setElementAttribute(element, 'id', 'foo');
expect(element.id, 'foo');
});
test('can add classes to elements', () {
final DomRenderer renderer = DomRenderer();
final html.Element element = renderer.createElement('div');
renderer.addElementClass(element, 'foo');
renderer.addElementClass(element, 'bar');
expect(element.classes, <String>['foo', 'bar']);
});
test('can remove classes from elements', () {
final DomRenderer renderer = DomRenderer();
final html.Element element = renderer.createElement('div');
renderer.addElementClass(element, 'foo');
renderer.addElementClass(element, 'bar');
expect(element.classes, <String>['foo', 'bar']);
renderer.removeElementClass(element, 'foo');
expect(element.classes, <String>['bar']);
});
test('can set style properties on elements', () {
final DomRenderer renderer = DomRenderer();
final html.Element element = renderer.createElement('div');
renderer.setElementStyle(element, 'color', 'red');
expect(element.style.color, 'red');
});
test('can remove style properties from elements', () {
final DomRenderer renderer = DomRenderer();
final html.Element element = renderer.createElement('div');
renderer.setElementStyle(element, 'color', 'blue');
expect(element.style.color, 'blue');
renderer.setElementStyle(element, 'color', null);
expect(element.style.color, '');
});
test('elements can have children', () {
final DomRenderer renderer = DomRenderer();
final html.Element element = renderer.createElement('div');
renderer.createElement('div', parent: element);
expect(element.children, hasLength(1));
});
test('can detach elements', () {
final DomRenderer renderer = DomRenderer();
final html.Element element = renderer.createElement('div');
final html.Element child = renderer.createElement('div', parent: element);
renderer.detachElement(child);
expect(element.children, isEmpty);
});
test('can reattach detached elements', () {
final DomRenderer renderer = DomRenderer();
final html.Element element = renderer.createElement('div');
final html.Element child = renderer.createElement('div', parent: element);
final html.Element otherChild =
renderer.createElement('foo', parent: element);
renderer.detachElement(child);
expect(element.children, hasLength(1));
renderer.attachBeforeElement(element, otherChild, child);
expect(element.children, hasLength(2));
});
test('insert two elements in the middle of a child list', () {
final DomRenderer renderer = DomRenderer();
final html.Element parent = renderer.createElement('div');
renderer.createElement('a', parent: parent);
final html.Element childD = renderer.createElement('d', parent: parent);
expect(parent.innerHtml, '<a></a><d></d>');
final html.Element childB = renderer.createElement('b', parent: parent);
final html.Element childC = renderer.createElement('c', parent: parent);
renderer.attachBeforeElement(parent, childD, childB);
renderer.attachBeforeElement(parent, childD, childC);
expect(parent.innerHtml, '<a></a><b></b><c></c><d></d>');
});
test('innerHeight/innerWidth are equal to visualViewport height and width',
() {
if (html.window.visualViewport != null) {
expect(html.window.visualViewport.width, html.window.innerWidth);
expect(html.window.visualViewport.height, html.window.innerHeight);
}
});
test('replaces viewport meta tags during style reset', () {
final html.MetaElement existingMeta = html.MetaElement()
..name = 'viewport'
..content = 'foo=bar';
html.document.head.append(existingMeta);
expect(existingMeta.isConnected, true);
final DomRenderer renderer = DomRenderer();
renderer.reset();
},
// TODO(nurhan): https://github.com/flutter/flutter/issues/46638
// TODO(nurhan): https://github.com/flutter/flutter/issues/50828
skip: (browserEngine == BrowserEngine.firefox ||
browserEngine == BrowserEngine.edge));
test('accesibility placeholder is attached after creation', () {
DomRenderer();
expect(html.document.getElementsByTagName('flt-semantics-placeholder'),
isNotEmpty);
});
}