// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file library element_dimensions_test; import 'package:unittest/unittest.dart'; import 'package:unittest/html_config.dart'; import 'dart:html'; main() { useHtmlConfiguration(); var isElement = predicate((x) => x is Element, 'is an Element'); var isCanvasElement = predicate((x) => x is CanvasElement, 'is a CanvasElement'); var isDivElement = predicate((x) => x is DivElement, 'is a isDivElement'); var div = new DivElement(); div.id = 'test'; document.body.nodes.add(div); void initDiv() { var style = div.style; style ..padding = '4px' ..border = '0px solid #fff' ..margin = '6px' ..height = '10px' ..width = '11px' ..boxSizing = 'content-box' ..overflow = 'visible'; } div.nodes.addAll([ new DivElement(), new CanvasElement(), new DivElement(), new Text('Hello'), new DivElement(), new Text('World'), new CanvasElement() ]); group('dimensions', () { setUp(initDiv); test('contentEdge.height', () { var all1 = querySelectorAll('#test'); expect(all1.contentEdge.height, 10); expect(all1[0].getComputedStyle().getPropertyValue('height'), '10px'); all1.contentEdge.height = new Dimension.px(600); all1.contentEdge.height = 600; expect(all1.contentEdge.height, 600); expect(all1[0].getComputedStyle().getPropertyValue('height'), '600px'); all1[0].style.visibility = 'hidden'; expect(all1.contentEdge.height, 600); all1[0].style.visibility = 'visible'; // If user passes in a negative number, set height to 0. all1.contentEdge.height = new Dimension.px(-1); expect(all1.contentEdge.height, 0); // Adding padding or border shouldn't affect the height for // non-box-sizing. div.style.padding = '20pc'; expect(all1.contentEdge.height, 0); div.style.border = '2px solid #fff'; expect(all1.contentEdge.height, 0); }); test('contentEdge.height with border-box', () { var all1 = querySelectorAll('#test'); div.style.boxSizing = 'border-box'; expect(all1.contentEdge.height, 2); div.style.padding = '20pc'; expect(all1.contentEdge.height, 0); div.style.border = '2px solid #fff'; expect(all1.contentEdge.height, 0); }); test('contentEdge.width', () { var all1 = querySelectorAll('#test'); expect(all1.contentEdge.width, 11); expect(all1[0].getComputedStyle().getPropertyValue('width'), '11px'); all1.contentEdge.width = new Dimension.px(600); expect(all1.contentEdge.width, 600); expect(all1[0].getComputedStyle().getPropertyValue('width'), '600px'); all1[0].style.visibility = 'hidden'; expect(all1.contentEdge.width, 600); all1[0].style.visibility = 'visible'; // If user passes in a negative number, set width to 0. all1.contentEdge.width = new Dimension.px(-1); expect(all1.contentEdge.width, 0); // Adding padding or border shouldn't affect the width. div.style.padding = '20pc'; expect(all1.contentEdge.width, 0); div.style.border = '2px solid #fff'; expect(all1.contentEdge.width, 0); }); test('contentEdge.width with border-box', () { var all1 = querySelectorAll('#test'); div.style.boxSizing = 'border-box'; expect(all1.contentEdge.width, 3); div.style.padding = '20pc'; expect(all1.contentEdge.width, 0); div.style.border = '2px solid #fff'; expect(all1.contentEdge.width, 0); }); test('paddingEdge.height', () { var all1 = querySelectorAll('#test'); expect(all1.paddingEdge.height, 18); all1[0].style.visibility = 'hidden'; expect(all1.paddingEdge.height, 18); all1[0].style.visibility = 'visible'; // Adding border shouldn't affect the paddingEdge.height. div.style.border = '2px solid #fff'; expect(all1.paddingEdge.height, 18); // Adding padding should affect the paddingEdge.height. div.style.padding = '20pc'; expect(all1.paddingEdge.height, 650); }); test('paddingEdge.height with border-box', () { var all1 = querySelectorAll('#test'); div.style.boxSizing = 'border-box'; expect(all1.paddingEdge.height, 10); div.style.padding = '20pc'; expect(all1.paddingEdge.height, 640); div.style.border = '2px solid #fff'; expect(all1.paddingEdge.height, 640); }); test('paddingEdge.width', () { var all1 = querySelectorAll('#test'); expect(all1.paddingEdge.width, 19); all1[0].style.visibility = 'hidden'; expect(all1.paddingEdge.width, 19); all1[0].style.visibility = 'visible'; // Adding border shouldn't affect the width. div.style.border = '2px solid #fff'; expect(all1.paddingEdge.width, 19); // Adding padding should affect the paddingEdge.width. div.style.padding = '20pc'; expect(all1.paddingEdge.width, 651); }); test('paddingEdge.width with border-box', () { var all1 = querySelectorAll('#test'); div.style.boxSizing = 'border-box'; expect(all1.paddingEdge.width, 11); div.style.padding = '20pc'; expect(all1.paddingEdge.width, 640); div.style.border = '2px solid #fff'; expect(all1.paddingEdge.width, 640); }); test('borderEdge.height and marginEdge.height', () { var all1 = querySelectorAll('#test'); expect(div.borderEdge.height, 18); expect(div.marginEdge.height, 30); expect(all1.borderEdge.height, 18); expect(all1.marginEdge.height, 30); all1[0].style.visibility = 'hidden'; expect(all1.borderEdge.height, 18); all1[0].style.visibility = 'visible'; // Adding border should affect the borderEdge.height. div.style.border = '2px solid #fff'; expect(all1.borderEdge.height, 22); // Adding padding should affect the borderEdge.height. div.style.padding = '20pc'; expect(all1.borderEdge.height, 654); expect(all1.marginEdge.height, 666); }); test('borderEdge.height and marginEdge.height with border-box', () { var all1 = querySelectorAll('#test'); div.style.boxSizing = 'border-box'; expect(all1.borderEdge.height, 10); expect(all1.marginEdge.height, 22); div.style.padding = '20pc'; expect(all1.borderEdge.height, 640); expect(all1.marginEdge.height, 652); div.style.border = '2px solid #fff'; expect(all1.borderEdge.height, 644); expect(all1.marginEdge.height, 656); }); test('borderEdge.width and marginEdge.width', () { var all1 = querySelectorAll('#test'); expect(all1.borderEdge.width, 19); expect(all1.marginEdge.width, 31); // Adding border should affect the width. div.style.border = '2px solid #fff'; expect(all1.borderEdge.width, 23); // Adding padding should affect the borderEdge.width. div.style.padding = '20pc'; expect(all1.borderEdge.width, 655); expect(all1.marginEdge.width, 667); }); test('borderEdge.width and marginEdge.width with border-box', () { var all1 = querySelectorAll('#test'); div.style.boxSizing = 'border-box'; expect(all1.borderEdge.width, 11); expect(all1.marginEdge.width, 23); div.style.padding = '20pc'; expect(all1.borderEdge.width, 640); expect(all1.marginEdge.width, 652); div.style.border = '2px solid #fff'; expect(all1.borderEdge.width, 644); expect(all1.marginEdge.width, 656); }); test('left and top', () { div.style.border = '1px solid #fff'; div.style.margin = '6px 7px'; div.style.padding = '4px 5px'; var all1 = querySelectorAll('#test'); expect(all1.borderEdge.left, all1[0].getBoundingClientRect().left); expect(all1.borderEdge.top, all1[0].getBoundingClientRect().top); expect( all1.contentEdge.left, all1[0].getBoundingClientRect().left + 1 + 5); expect(all1.contentEdge.top, all1[0].getBoundingClientRect().top + 1 + 4); expect(all1.marginEdge.left, all1[0].getBoundingClientRect().left - 7); expect(all1.marginEdge.top, all1[0].getBoundingClientRect().top - 6); expect(all1.paddingEdge.left, all1[0].getBoundingClientRect().left + 1); expect(all1.paddingEdge.top, all1[0].getBoundingClientRect().top + 1); }); test('setHeight ElementList', () { div.style.border = '1px solid #fff'; div.style.margin = '6px 7px'; div.style.padding = '4px 5px'; var all1 = querySelectorAll('div'); all1.contentEdge.height = new Dimension.px(200); all1.contentEdge.height = 200; for (Element elem in all1) { expect(elem.contentEdge.height, 200); } all1.contentEdge.height = new Dimension.px(10); for (Element elem in all1) { expect(elem.contentEdge.height, 10); } }); }); }