chromium/third_party/blink/web_tests/editing/pasteboard/paste-from-excel.html

<!DOCTYPE html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script>
// Snapshot of real HTML written by Microsoft Excel to clipboard.
const kExcelMarkup = `
<html xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
<meta name=ProgId content=Excel.Sheet>
<meta name=Generator content="Microsoft Excel 15">
<link id=Main-File rel=Main-File
href="file:///C:/Users/mockuser/AppData/Local/Temp/msohtmlclip1/01/clip.htm">
<link rel=File-List
href="file:///C:/Users/mockuser/AppData/Local/Temp/msohtmlclip1/01/clip_filelist.xml">
<style>
<!--table
	{mso-displayed-decimal-separator:"\.";
	mso-displayed-thousand-separator:"\,";}
@page
	{margin:.75in .7in .75in .7in;
	mso-header-margin:.3in;
	mso-footer-margin:.3in;}
tr
	{mso-height-source:auto;}
col
	{mso-width-source:auto;}
br
	{mso-data-placement:same-cell;}
td
	{padding-top:1px;
	padding-right:1px;
	padding-left:1px;
	mso-ignore:padding;
	color:black;
	font-size:11.0pt;
	font-weight:400;
	font-style:normal;
	text-decoration:none;
	font-family:Calibri, sans-serif;
	mso-font-charset:0;
	mso-number-format:General;
	text-align:general;
	vertical-align:bottom;
	border:none;
	mso-background-source:auto;
	mso-pattern:auto;
	mso-protection:locked visible;
	white-space:nowrap;
	mso-rotate:0;}
.xl63
	{font-size:20.0pt;}
.xl64
	{font-weight:700;}
.xl65
	{font-style:italic;}
.xl66
	{text-decoration:underline;
	text-underline-style:single;}
.xl67
	{color:red;}
.xl68
	{background:yellow;
	mso-pattern:black none;}
-->
</style>
</head>

<body link="#0563C1" vlink="#954F72">

<table border=0 cellpadding=0 cellspacing=0 width=128 style='border-collapse:
 collapse;width:96pt'>
<!--StartFragment-->
 <col width=64 span=2 style='width:48pt'>
 <tr height=35 style='height:26.0pt'>
  <td height=35 class=xl63 width=64 style='height:26.0pt;width:48pt'>large</td>
  <td class=xl64 width=64 style='width:48pt'>bold</td>
 </tr>
 <tr height=19 style='height:14.5pt'>
  <td height=19 class=xl65 style='height:14.5pt'>italic</td>
  <td class=xl66>underline</td>
 </tr>
 <tr height=19 style='height:14.5pt'>
  <td height=19 class=xl67 style='height:14.5pt'>color</td>
  <td class=xl68>highlight</td>
 </tr>
<!--EndFragment-->
</table>

</body>

</html>
`;

document.oncopy = event => {
  event.clipboardData.setData('text/html', kExcelMarkup);
  event.preventDefault();
}

function parsePixelValue(str) {
  const parsed = CSSNumericValue.parse(str);
  assert_equals(parsed.unit, 'px');
  return parsed.value;
}
</script>

<p>Test passes if we can paste content from Excel with style preserved.</p>
<div id="target" contenteditable></div>
<script>
test(() => {
  target.focus();
  document.execCommand('copy');
  document.execCommand('paste');

  // Stylesheets in clipboard should have been stripped or turned into inline style
  assert_equals(document.styleSheets.length, 0);

  // large  bold
  // italic underline
  // color  highlight

  const cells = document.querySelectorAll('td');

  assert_approx_equals(
      parsePixelValue(getComputedStyle(cells[0]).fontSize),
      20 * 1.3333, // 20pt to pixels
      0.01);

  assert_equals(getComputedStyle(cells[1]).fontWeight, '700');
  assert_equals(getComputedStyle(cells[2]).fontStyle, 'italic');
  assert_equals(getComputedStyle(cells[3]).textDecorationLine, 'underline');
  assert_equals(getComputedStyle(cells[4]).color, 'rgb(255, 0, 0)');
  assert_equals(getComputedStyle(cells[5]).backgroundColor, 'rgb(255, 255, 0)');
}, 'Style on content pasted from Excel is preserved');
</script>