This tests to see if position:sticky gets converted to position:static upon copy/paste

first test - before:
| <html>
|   <head>
|     "
"
|     <meta>
|       content="text/html; charset=utf-8"
|       http-equiv="Content-type"
|     "
"
|     <script>
|       src="../../resources/dump-as-markup.js"
|       type="text/javascript"
|     "
"
|   "
"
|   <body>
|     "
abc"
|     <div>
|       style="position: sticky; left: 0px; top: 0px;"
|       "def"
|     "ghi
"
|     <br>
|     "

"
|     <script>
|       "

Markup.description('This tests to see if position:sticky gets converted to position:static upon copy/paste');

document.designMode = 'on';

if (window.internals)
    window.internals.settings.setShouldConvertPositionStyleOnCopy(true);

var s = window.getSelection();

Markup.dump('test1', 'first test - before');
document.execCommand("SelectAll");
document.execCommand("Cut");
document.execCommand("Paste");
Markup.dump('test1', 'first test - after');

"

first test - after:
| <html>
|   <head>
|     "
"
|     <meta>
|       content="text/html; charset=utf-8"
|       http-equiv="Content-type"
|     "
"
|     <script>
|       src="../../resources/dump-as-markup.js"
|       type="text/javascript"
|     "
"
|   "
"
|   <body>
|     "abc"
|     <div>
|       style="position: static; left: 0px; top: 0px;"
|       "def"
|     "ghi <#selection-caret>

"
|     <script>
|       "

Markup.description('This tests to see if position:sticky gets converted to position:static upon copy/paste');

document.designMode = 'on';

if (window.internals)
    window.internals.settings.setShouldConvertPositionStyleOnCopy(true);

var s = window.getSelection();

Markup.dump('test1', 'first test - before');
document.execCommand("SelectAll");
document.execCommand("Cut");
document.execCommand("Paste");
Markup.dump('test1', 'first test - after');

"
