<!doctype html>
<title>The hr element: setting 'overflow: visible'</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<style>
/* Use 0 margin for hr instead of default 0.5em to make things simpler */
hr {
  margin-top: 0;
  margin-bottom: 0;
}
.wrapper {
  height: 150px;
  position: relative;
}
#test-visible {
  overflow: visible;
}
.float, hr::before {
  content: "";
  float: left;
  width: 50px;
  height: 50px;
  background-color: orange;
}
.clear {
  clear: left;
}
</style>

<div class=wrapper>
 <div class=float></div>
 <hr id=test-control>
 <div class=float></div>
</div>

<div class=wrapper>
 <div class=float></div>
 <hr id=test-visible>
 <div class=float></div>
</div>

<script>

test(() => {
  const hr = document.getElementById('test-control');
  assert_equals(hr.offsetLeft, 50, 'hr.offsetLeft');
  assert_equals(hr.offsetTop, 0, 'hr.offsetTop');
  assert_equals(hr.clientHeight, 50, 'hr.clientHeight');
  const divAfter = hr.nextElementSibling;
  assert_equals(divAfter.offsetLeft, 0, 'divAfter.offsetLeft');
  assert_equals(divAfter.offsetTop, 50 + 1 + 1 /* hr border */, 'divAfter.offsetTop');
}, 'control');

test(() => {
  const hr = document.getElementById('test-visible');
  assert_equals(hr.offsetLeft, 0, 'hr.offsetLeft');
  assert_equals(hr.offsetTop, 0, 'hr.offsetTop');
  assert_equals(hr.clientHeight, 0, 'hr.clientHeight');
  const divAfter = hr.nextElementSibling;
  assert_equals(divAfter.offsetLeft, 50 + 50, 'divAfter.offsetLeft');
  assert_equals(divAfter.offsetTop, 1 + 1 /* hr border */, 'divAfter.offsetTop');
}, 'overflow: visible');

</script>
