// 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.

// @dart = 2.9

/// @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');
}
