<!DOCTYPE html>
<html  lang="en" >
<head>
<meta charset="utf-8">
<title>Thai with ZWSP before line break</title>
<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'>
<link rel='help' href='https://drafts.csswg.org/css-text-3/#line-break-transform'>
<meta name="assert" content="If the character immediately before or immediately after the segment break is the zero-width space character (U+200B), then the break is removed, leaving behind the zero-width space.">
<style type='text/css'>
/* the CSS below is not part of the test */
.test span { font-size: 24px; font-family: sans-serif; background-color: #2AA5F7; color: white; }
.ref span { font-size: 24px; font-family: sans-serif; background-color: #270CEF; color: white; }
</style>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<div id='log'></div>
<div id='test1' class="test"><span>ภาษา&#x200B;
ไทย</span></div>
<div id='test2' class="test"><span>ภาษา&#x200B;&#x20;&#x20;&#x20;
ไทย</span></div>
<div id='test3' class="test"><span>ภาษา&#x200B;
&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;ไทย</span></div>
<div id='test4' class="test"><span>ภาษา&#x200B;&#x20;&#x20;&#x20;
&#x20;&#x20;&#x20;&#x20;&#x20;ไทย</span></div>
<div id='test5' class="test"><span>ภาษา&#x200B;


ไทย</span></div>
<div id='test6' class="test"><span>ภาษา&#x200B;&#x20;&#x20;
&#x20;&#x20;&#x20;
&#x20;&#x20;&#x20;
&#x20;&#x20;&#x20;ไทย</span></div>
<div id="ref" class="ref"><span>ภาษาไทย</span></div>
<script>
test(function() {
assert_equals(document.getElementById('test1').firstChild.offsetWidth, document.getElementById('ref').firstChild.offsetWidth);
}, "linebreak only");
var matches = document.getElementById('test1').firstChild.textContent.match(/\u200B/g)
test(function() {
assert_equals(matches.length, 1);
}, "zwsp retained 1");
test(function() {
assert_equals(document.getElementById('test2').firstChild.offsetWidth, document.getElementById('ref').firstChild.offsetWidth);
}, "spaces linebreak");
var matches = document.getElementById('test2').firstChild.textContent.match(/\u200B/g)
test(function() {
assert_equals(matches.length, 1);
}, "zwsp retained 2");
test(function() {
assert_equals(document.getElementById('test3').firstChild.offsetWidth, document.getElementById('ref').firstChild.offsetWidth);
}, "linebreak spaces");
var matches = document.getElementById('test3').firstChild.textContent.match(/\u200B/g)
test(function() {
assert_equals(matches.length, 1);
}, "zwsp retained 3");
test(function() {
assert_equals(document.getElementById('test4').firstChild.offsetWidth, document.getElementById('ref').firstChild.offsetWidth);
}, "spaces linebreak spaces");
var matches = document.getElementById('test4').firstChild.textContent.match(/\u200B/g)
test(function() {
assert_equals(matches.length, 1);
}, "zwsp retained 4");
test(function() {
assert_equals(document.getElementById('test5').firstChild.offsetWidth, document.getElementById('ref').firstChild.offsetWidth);
}, "multiple linebreaks");
var matches = document.getElementById('test5').firstChild.textContent.match(/\u200B/g)
test(function() {
assert_equals(matches.length, 1);
}, "zwsp retained 5");
test(function() {
assert_equals(document.getElementById('test6').firstChild.offsetWidth, document.getElementById('ref').firstChild.offsetWidth);
}, "multiple linebreaks + spaces");
var matches = document.getElementById('test6').firstChild.textContent.match(/\u200B/g)
test(function() {
assert_equals(matches.length, 1);
}, "zwsp retained 6");
</script>
<!--  Notes:
The assertion will fail if a normal space is produced for any line in the test paragraph.
 -->
</body>
</html>


