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