<!DOCTYPE html>
<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-getboundingclientrect">
<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-range-getboundingclientrect">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
text {
  font-family: Ahem;
  font-size: 10px;
  line-height: 1;
  width: 10ch;
}
</style>
<body>

<svg width="800" height="100">
<text x="20" y="20" id="text-1">An SVG text element with no "transform" attribute</text>
<text x="20" y="50" id="text-2" transform="matrix(2,0,0,2,0,0)">An SVG with a "transform" attribute</text>
<text x="20" y="80" id="text-3" rotate="45">An SVG with a "rotate" attribute</text>
</svg>

<script>
function getBoundingClientRect(node, start, end) {
  const range = document.createRange();
  range.setStart(node, start);
  range.setEnd(node, end);
  const rect = range.getBoundingClientRect();
  return rect;
}

test(() => {
  const element = document.querySelector('#text-1');
  const elementRect = element.getBoundingClientRect();
  const rangeRect = getBoundingClientRect(element.firstChild, 0, element.firstChild.length);
  assert_approx_equals(elementRect.x, rangeRect.x, 1);
  assert_approx_equals(elementRect.y, rangeRect.y, 1);
  assert_approx_equals(elementRect.width, rangeRect.width, 1);
  assert_approx_equals(elementRect.height, rangeRect.height, 1);
}, 'Element.getBoundingClientRect() and Range.getBoudingClientRect() should match for an SVG <text>');

test(() => {
  const element = document.querySelector('#text-2');
  const elementRect = element.getBoundingClientRect();
  const rangeRect = getBoundingClientRect(element.firstChild, 0, element.firstChild.length);
  assert_approx_equals(elementRect.x, rangeRect.x, 1);
  assert_approx_equals(elementRect.y, rangeRect.y, 1);
  assert_approx_equals(elementRect.width, rangeRect.width, 1);
  assert_approx_equals(elementRect.height, rangeRect.height, 1);
}, 'Element.getBoundingClientRect() and Range.getBoudingClientRect() should match for an SVG <text> with a transform');

test(() => {
  const element = document.querySelector('#text-3');
  const elementRect = element.getBoundingClientRect();
  const rangeRect = getBoundingClientRect(element.firstChild, 0, element.firstChild.length);
  assert_approx_equals(elementRect.x, rangeRect.x, 1);
  assert_approx_equals(elementRect.y, rangeRect.y, 1);
  assert_approx_equals(elementRect.width, rangeRect.width, 1);
  assert_approx_equals(elementRect.height, rangeRect.height, 1);
}, 'Element.getBoundingClientRect() and Range.getBoudingClientRect() should match for an SVG <text> with a rotate');
</script>
</body>
