layout/style/test/test_font_family_serialization.html
author Cristian Tuns <ctuns@mozilla.com>
Fri, 24 Sep 2021 14:42:22 -0400
changeset 593147 0b4005ebc9776ff43d99d1427c1a1fd2e14d9a44
parent 513525 53904ff833504681060ea25fcb9a30159c90a6f9
permissions -rw-r--r--
Backed out changeset dd075a074e45 (bug 1730518) for causing content crashes (bug 1732479). CLOSED TREE

<!DOCTYPE html>
<meta charset="UTF-8">
<link rel="author" title="Xidorn Quan" href="https://www.upsuper.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<div id="display"></div>
<script>
// This cannot be a web-platform test because this doesn't match what
// the spec says at the moment. Specifically, the spec wants to have
// all font family serialized to string, while in practice, all browsers
// serialize simple them to identifiers in some cases.
// We want to check our current behavior. This can be changed once
// browsers have an agreement on the exact behavior to spec.

// format: [input, expected serialization]
const tests = [
  // Basic cases
  ['simple', 'simple'],
  ['    simple    ', 'simple'],
  ['multi idents font', 'multi idents font'],
  ['    multi   idents   font    ', 'multi idents font'],
  ['"wrapped name"', '"wrapped name"'],
  ['"   wrapped  name   "', '"   wrapped  name   "'],

  // Special whitespaces
  ['\\ leading ws', '" leading ws"'],
  [' \\   leading ws', '"  leading ws"'],
  ['\\ \\ leading ws', '"  leading ws"'],
  [' \\ \\   leading ws', '"   leading ws"'],
  ['\\ \\ \\ leading ws', '"   leading ws"'],
  ['trailing ws\\ ', '"trailing ws "'],
  ['trailing ws\\   ', '"trailing ws "'],
  ['trailing ws   \\ ', '"trailing ws  "'],
  ['trailing ws\\ \\ ', '"trailing ws  "'],
  ['escaped\\ ws', '"escaped ws"'],
  ['escaped\\    ws', '"escaped  ws"'],
  ['escaped\\ \\ ws', '"escaped  ws"'],
  ['escaped   \\ ws', '"escaped  ws"'],
  ['escaped \\  ws', '"escaped   ws"'],
  ['escaped number\\ 5', '"escaped number 5"'],
];

let el = document.getElementById("display");
for (let [input, expected] of tests) {
  test(function() {
    el.style.fontFamily = input;
    assert_equals(el.style.fontFamily, expected);
  }, "Reserialization for " + JSON.stringify(input));
}
</script>