blob: ecadde45d7a8d4a8687fb214877f31f9ad27c79b [file] [log] [blame]
// 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
// @dart = 2.9
import 'dart:html';
import 'package:expect/minitest.dart';
main() {
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 = document.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 = document.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 = document.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 = document.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 = document.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 = document.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 = document.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 = document.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 = document.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 = document.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 = document.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 = document.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 = document.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);
}
});
});
}