| // 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', () { |
| var renderer = new DomRenderer(); |
| var element = renderer.createElement('div'); |
| expect(element, isNotNull); |
| }); |
| test('can append children to parents', () { |
| var renderer = new DomRenderer(); |
| var parent = renderer.createElement('div'); |
| var child = renderer.createElement('div'); |
| renderer.append(parent, child); |
| expect(parent.children, hasLength(1)); |
| }); |
| test('can set text on elements', () { |
| var renderer = new DomRenderer(); |
| var element = renderer.createElement('div'); |
| renderer.setText(element, 'Hello World'); |
| expect(element.text, 'Hello World'); |
| }); |
| test('can set attributes on elements', () { |
| var renderer = new DomRenderer(); |
| var element = renderer.createElement('div'); |
| renderer.setElementAttribute(element, 'id', 'foo'); |
| expect(element.id, 'foo'); |
| }); |
| test('can add classes to elements', () { |
| var renderer = new DomRenderer(); |
| var element = renderer.createElement('div'); |
| renderer.addElementClass(element, 'foo'); |
| renderer.addElementClass(element, 'bar'); |
| expect(element.classes, ['foo', 'bar']); |
| }); |
| test('can remove classes from elements', () { |
| var renderer = new DomRenderer(); |
| var element = renderer.createElement('div'); |
| renderer.addElementClass(element, 'foo'); |
| renderer.addElementClass(element, 'bar'); |
| expect(element.classes, ['foo', 'bar']); |
| renderer.removeElementClass(element, 'foo'); |
| expect(element.classes, ['bar']); |
| }); |
| test('can set style properties on elements', () { |
| var renderer = new DomRenderer(); |
| var element = renderer.createElement('div'); |
| renderer.setElementStyle(element, 'color', 'red'); |
| expect(element.style.color, 'red'); |
| }); |
| test('can remove style properties from elements', () { |
| var renderer = new DomRenderer(); |
| var 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', () { |
| var renderer = new DomRenderer(); |
| var element = renderer.createElement('div'); |
| renderer.createElement('div', parent: element); |
| expect(element.children, hasLength(1)); |
| }); |
| test('can detach elements', () { |
| var renderer = new DomRenderer(); |
| var element = renderer.createElement('div'); |
| var child = renderer.createElement('div', parent: element); |
| renderer.detachElement(child); |
| expect(element.children, isEmpty); |
| }); |
| test('can reattach detached elements', () { |
| var renderer = new DomRenderer(); |
| var element = renderer.createElement('div'); |
| var child = renderer.createElement('div', parent: element); |
| var 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', () { |
| var renderer = new DomRenderer(); |
| var parent = renderer.createElement('div'); |
| renderer.createElement('a', parent: parent); |
| var childD = renderer.createElement('d', parent: parent); |
| expect(parent.innerHtml, '<a></a><d></d>'); |
| var childB = renderer.createElement('b', parent: parent); |
| var 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('replaces viewport meta tags during style reset', () { |
| html.MetaElement existingMeta = html.MetaElement() |
| ..name = 'viewport' |
| ..content = 'foo=bar'; |
| html.document.head.append(existingMeta); |
| expect(existingMeta.isConnected, true); |
| |
| var renderer = new DomRenderer(); |
| renderer.reset(); |
| }); |
| } |