bug 879963 - reftests for regressions caused when multiple rules refer to the same proxy. r=jdaggett

This commit is contained in:
Jonathan Kew 2013-07-26 16:48:35 +01:00
parent 77becfce0e
commit 30cfe09d1d
5 changed files with 249 additions and 0 deletions

View File

@ -0,0 +1,35 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<style type="text/css" id="style1">
@font-face {
font-family: foo;
src: local("Arial"),
local("DejaVu Sans"),
local("Free Sans"),
local("Open Sans"),
local("Droid Sans"),
local("Roboto");
}
</style>
<style type="text/css">
body {
font-family: serif;
}
.test {
font-family: foo;
}
</style>
</head>
<body>
<div>
foo <span class="test">bar</span> baz
</div>
</body>
</html>

View File

@ -0,0 +1,65 @@
<!DOCTYPE HTML>
<html class="reftest-wait">
<head>
<meta charset="utf-8">
<!-- Testcase for bug 879963 regression.
We have two <style> elements with identical @font-face rules, which will
share a common proxy font entry. When the entry is loaded, the references
in both rules must be updated, otherwise text may disappear if the "wrong"
(non-updated) rule is subsequently used.
By disabling the first style element after the document has loaded (and the
user font has been resolved to a real font entry), we can check that the
second rule also works as expected.
Note that if a platform doesn't have any of the local() fonts listed,
the testcase will "pass" harmlessly as a no-op. -->
<style type="text/css" id="style1">
@font-face {
font-family: foo;
src: local("Arial"),
local("DejaVu Sans"),
local("Free Sans"),
local("Open Sans"),
local("Droid Sans"),
local("Roboto");
}
</style>
<style type="text/css" id="style2">
@font-face {
font-family: foo;
src: local("Arial"),
local("DejaVu Sans"),
local("Free Sans"),
local("Open Sans"),
local("Droid Sans"),
local("Roboto");
}
</style>
<style type="text/css">
body {
font-family: serif;
}
.test {
font-family: foo;
}
</style>
<script type="application/javascript">
function run() {
document.getElementById("style1").disabled = true;
document.documentElement.removeAttribute("class");
}
</script>
</head>
<body onload="run()">
<div>
foo <span class="test">bar</span> baz
</div>
</body>
</html>

View File

@ -0,0 +1,59 @@
<!DOCTYPE HTML>
<html class="reftest-wait">
<head>
<meta charset="utf-8">
<!-- Testcase for bug 879963 regression.
Identical to dynamic-duplicate-rule-1a, except that we disable the
second rule (rather than the first), to allow for the possibility of
changes in how rules are ordered/searched. -->
<style type="text/css" id="style1">
@font-face {
font-family: foo;
src: local("Arial"),
local("DejaVu Sans"),
local("Free Sans"),
local("Open Sans"),
local("Droid Sans"),
local("Roboto");
}
</style>
<style type="text/css" id="style2">
@font-face {
font-family: foo;
src: local("Arial"),
local("DejaVu Sans"),
local("Free Sans"),
local("Open Sans"),
local("Droid Sans"),
local("Roboto");
}
</style>
<style type="text/css">
body {
font-family: serif;
}
.test {
font-family: foo;
}
</style>
<script type="application/javascript">
function run() {
document.getElementById("style2").disabled = true;
document.documentElement.removeAttribute("class");
}
</script>
</head>
<body onload="run()">
<div>
foo <span class="test">bar</span> baz
</div>
</body>
</html>

View File

@ -0,0 +1,85 @@
<!DOCTYPE HTML>
<html class="reftest-wait">
<head>
<meta charset="utf-8">
<!-- Testcase for bug 879963 regression.
This test is designed to hit the case where we were adding the same
proxy font entry to a family multiple times during user font set updates.
Note that if a platform doesn't have any of the local() fonts listed,
the testcase will "pass" harmlessly as a no-op. -->
<style type="text/css" id="style1">
@font-face {
font-family: foo;
src: local("Arial"),
local("DejaVu Sans"),
local("Free Sans"),
local("Open Sans"),
local("Droid Sans"),
local("Roboto");
}
</style>
<style type="text/css" id="style2">
@font-face {
font-family: foo;
src: local("Arial"),
local("DejaVu Sans"),
local("Free Sans"),
local("Open Sans"),
local("Droid Sans"),
local("Roboto");
}
</style>
<style type="text/css" id="style3">
@font-face {
font-family: foo;
src: local("Arial"),
local("DejaVu Sans"),
local("Free Sans"),
local("Open Sans"),
local("Droid Sans"),
local("Roboto");
}
</style>
<style type="text/css">
body {
font-family: serif;
}
.test {
font-family: foo;
}
</style>
<script type="application/javascript">
function run() {
// Disable one of our three identical style elements.
// This will trigger an update of the user font set,
// and there will still be two identical rules present.
document.getElementById("style3").disabled = true;
// Now we trigger the use of the 'foo' font family,
// so that font loading occurs.
// If there are duplicate proxy entries in the family,
// and only the first one gets replaced by the real face,
// blank text will result.
document.getElementById("test").className = "test";
document.documentElement.removeAttribute("class");
}
</script>
</head>
<body onload="run()">
<div>
foo <span id="test">bar</span> baz
</div>
</body>
</html>

View File

@ -153,3 +153,8 @@ HTTP(..) != font-error-404-1.html font-error-404-2.html # sanity-check that the
# Font load redirection
HTTP(..) == font-redirect.html order-1-ref.html
# Tests for potential regressions from bug 879963
== dynamic-duplicate-rule-1a.html dynamic-duplicate-rule-1-ref.html
== dynamic-duplicate-rule-1b.html dynamic-duplicate-rule-1-ref.html
== dynamic-duplicate-rule-1c.html dynamic-duplicate-rule-1-ref.html