/*
 * Copyright (c) 2014, 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.
 */
/**
 * @assertion Rectangle getBoundingClientRect()
 * Returns the smallest bounding rectangle that encompasses this element's
 * padding, scrollbar, and border.
 * @description Checks that padding, scrollbar and border are included in
 * the rectangle.
 */
import "dart:html";
import "../../../Utils/expect.dart";

main() {
  var html = '<div>Text</div>';
  var x1 = new Element.html(html);
  document.body?.append(x1);
  var r1 = x1.getBoundingClientRect();

  var x2 = new Element.html(html);
  x2.style.padding = '10px';
  document.body?.append(x2);
  var r2 = x2.getBoundingClientRect();
  Expect.isTrue(r2.height > r1.height, 'padding');

  var x3 = new Element.html(html);
  x3.style.padding = '10px';
  x3.style.overflow = 'scroll';
  document.body?.append(x3);
  var r3 = x3.getBoundingClientRect();
  Expect.isTrue(r3.height > r2.height, 'padding scrollbar');

  var x4 = new Element.html(html);
  x4.style.padding = '10px';
  x4.style.overflow = 'scroll';
  x4.style.border = '10px solid';
  document.body?.append(x4);
  var r4 = x4.getBoundingClientRect();
  Expect.isTrue(r4.height > r3.height, 'padding scrollbar border');
}
