<!DOCTYPE html>
<html>
<body>
<button id="start">Start</button>
<div id="editor" style="font-family: Arial" contenteditable>hello</div>
<script src="../../resources/js-test.js"></script>
<script>

jsTestIsAsync = true;

description(`This tests pasting a markup with -webkit-standard font family name. WebKit should not strip it away upon paste.<br>
To manually test, click on "start" first then trigger paste from menu or callout bar or press cmd+v`);

const markup = `<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta name="Generator" content="Cocoa HTML Writer">
</head>
<body>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px '-webkit-standard'; color: #454545">Hello</p>
</body>
</html>`;

editor.focus();
start.addEventListener('click', () => {
    editor.focus();
    document.execCommand('selectAll');
    document.execCommand('copy');
    if (window.testRunner)
        document.execCommand('paste');
});
editor.addEventListener('copy', (event) => {
    event.clipboardData.setData('text/html', markup);
    event.preventDefault();
});
editor.addEventListener('paste', (event) => {
    shouldBe(`event.clipboardData.getData('text/html')`, `markup`);
    document.execCommand('insertHTML', false, event.clipboardData.getData('text/html'));
    shouldBeTrue(`editor.innerHTML.includes('-webkit-standard')`);
    editor.innerHTML = '';
    event.preventDefault();
    start.style.display = 'none';
    finishJSTest();
});

if (window.testRunner)
    start.click();

</script>
</body>
</html>
