<!DOCTYPE html>
<title>CSS Test: Test generic family keywords matching for @font-face</title>
<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#family-name-syntax">
<link rel="author" title="Koji Ishii" href="mailto:kojii@chromium.com">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/css-fonts/support/font-family-keywords.js"></script>
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css"/>
<style>
div {
  font-size: 10px;
}
#ahem {
  font-family: Ahem;
}
</style>
<body>
  <div><span id="ahem">00000</span></div>
  <div><span id="test">00000</span></div>
<script>
  setup({ explicit_done: true });
  window.addEventListener("load", () => { document.fonts.ready.then(runTests); });
  function runTests() {
    let ahem = document.getElementById('ahem');
    let ahem_expected_width = ahem.offsetWidth;
    kGenericFontFamilyKeywords.forEach(keyword => {
      test(() => {
        let element = document.getElementById('test');
        element.setAttribute("style", `font-family: ${keyword};`);
        let expected_width = element.offsetWidth;

        // Insert the @font-face rules for quoted and unquoted keywords.
        document.documentElement.insertAdjacentHTML('beforeend', `
<style>
@font-face {
  font-family: ${keyword};
  src: local(Ahem), url('/fonts/Ahem.ttf');
}
</style>
<style>
@font-face {
  font-family: "${keyword}";
  src: local(Ahem), url('/fonts/Ahem.ttf');
}
</style>`);

        assert_equals(element.offsetWidth, expected_width, `unquoted ${keyword} does not match @font-face rule`);

        element.setAttribute("style", `font-family: "${keyword}";`);
        assert_equals(element.offsetWidth, ahem_expected_width, `quoted ${keyword} matches  @font-face rule`);
      }, `@font-face matching for quoted and unquoted ${keyword}`);
    });
    done();
  }
</script>
</body>
