summaryrefslogtreecommitdiffstats
path: root/layout/mathml/tests
diff options
context:
space:
mode:
Diffstat (limited to 'layout/mathml/tests')
-rw-r--r--layout/mathml/tests/chrome.ini6
-rw-r--r--layout/mathml/tests/mathml_example_test.html28
-rw-r--r--layout/mathml/tests/mochitest.ini17
-rw-r--r--layout/mathml/tests/stretchy-and-large-operators.html88
-rw-r--r--layout/mathml/tests/stretchy-and-large-operators.js2
-rw-r--r--layout/mathml/tests/test_bug330964.html98
-rw-r--r--layout/mathml/tests/test_bug553917.html171
-rw-r--r--layout/mathml/tests/test_bug706406.html71
-rw-r--r--layout/mathml/tests/test_bug827713-2.html152
-rw-r--r--layout/mathml/tests/test_bug827713.html61
-rw-r--r--layout/mathml/tests/test_bug975681.html118
-rw-r--r--layout/mathml/tests/test_disabled.html47
-rw-r--r--layout/mathml/tests/test_disabled_chrome.html55
-rw-r--r--layout/mathml/tests/test_opentype-axis-height.html60
-rw-r--r--layout/mathml/tests/test_opentype-fraction.html187
-rw-r--r--layout/mathml/tests/test_opentype-limits.html172
-rw-r--r--layout/mathml/tests/test_opentype-radical.html196
-rw-r--r--layout/mathml/tests/test_opentype-scripts.html292
-rw-r--r--layout/mathml/tests/test_opentype-stack.html137
19 files changed, 1958 insertions, 0 deletions
diff --git a/layout/mathml/tests/chrome.ini b/layout/mathml/tests/chrome.ini
new file mode 100644
index 000000000..0885f4c6b
--- /dev/null
+++ b/layout/mathml/tests/chrome.ini
@@ -0,0 +1,6 @@
+[DEFAULT]
+
+support-files =
+ mathml_example_test.html
+
+[test_disabled_chrome.html]
diff --git a/layout/mathml/tests/mathml_example_test.html b/layout/mathml/tests/mathml_example_test.html
new file mode 100644
index 000000000..6eee75d01
--- /dev/null
+++ b/layout/mathml/tests/mathml_example_test.html
@@ -0,0 +1,28 @@
+<math xmlns="http://www.w3.org/1998/Math/MathML">
+ <mstyle scriptsizemultiplier="2">
+ <msub>
+ <mtext>O</mtext>
+ <mtext>O</mtext>
+ </msub>
+ <msup>
+ <mtext>O</mtext>
+ <mtext>O</mtext>
+ </msup>
+ <msubsup>
+ <mtext>O</mtext>
+ <mtext>O</mtext>
+ <mtext>O</mtext>
+ </msubsup>
+ <mmultiscripts>
+ <mtext>O</mtext>
+ <mtext>O</mtext>
+ <mtext>O</mtext>
+ <mprescripts/>
+ <mtext>O</mtext>
+ <mtext>O</mtext>
+ </mmultiscripts>
+ </mstyle>
+</math>
+
+<svg id="svgel">
+</svg>
diff --git a/layout/mathml/tests/mochitest.ini b/layout/mathml/tests/mochitest.ini
new file mode 100644
index 000000000..6a6651509
--- /dev/null
+++ b/layout/mathml/tests/mochitest.ini
@@ -0,0 +1,17 @@
+[DEFAULT]
+
+[test_bug330964.html]
+[test_bug553917.html]
+[test_bug706406.html]
+[test_bug827713-2.html]
+[test_bug827713.html]
+[test_bug975681.html]
+[test_disabled.html]
+[test_opentype-axis-height.html]
+[test_opentype-fraction.html]
+[test_opentype-limits.html]
+skip-if = os == "win" # Fails on WinXP
+[test_opentype-radical.html]
+skip-if = os == "win" # Fails on WinXP
+[test_opentype-scripts.html]
+[test_opentype-stack.html]
diff --git a/layout/mathml/tests/stretchy-and-large-operators.html b/layout/mathml/tests/stretchy-and-large-operators.html
new file mode 100644
index 000000000..13fe14aa7
--- /dev/null
+++ b/layout/mathml/tests/stretchy-and-large-operators.html
@@ -0,0 +1,88 @@
+<!-- -*- mode: HTML; tab-width: 2; indent-tabs-mode: nil; -*- -->
+<!-- vim: set tabstop=2 expandtab shiftwidth=2 textwidth=80: -->
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>Test Stretchy and Large Operators</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+ <script type="text/javascript"
+ src="stretchy-and-large-operators.js"></script>
+ <script type="text/javascript">
+
+ var mathml = "http://www.w3.org/1998/Math/MathML";
+
+ function createMo(aOperator, aForm)
+ {
+ var mo = document.createElementNS(mathml, "mo");
+ mo.appendChild(document.createTextNode(aOperator));
+ mo.setAttribute("form", aForm);
+ return mo;
+ }
+
+ function createTest(aEntry)
+ {
+ var opname = aEntry[0];
+ var operator = aEntry[1];
+ var type = aEntry[2];
+ var form = aEntry[3];
+
+ var div = document.createElement("div");
+ div.appendChild(document.createTextNode(opname));
+
+ var math = document.createElementNS(mathml, "math");
+
+ switch (type)
+ {
+ case "l": // largeop
+ math.appendChild(createMo(operator, form));
+ var mstyle = document.createElementNS(mathml, "mstyle");
+ mstyle.setAttribute("displaystyle", "true");
+ mstyle.appendChild(createMo(operator, form));
+ math.appendChild(mstyle);
+ break;
+
+ case "v": // vertical
+ for (var i = 1; i < 10; i+=2) {
+ var mo = createMo(operator, form);
+ mo.setAttribute("minsize", (.5 * i) + "em");
+ math.appendChild(mo);
+ }
+ break;
+
+ case "h": // horizontal
+ for (var i = 1; i < 10; i+=2) {
+ var mo = createMo(operator, form);
+ var mspace = document.createElementNS(mathml, "mspace");
+ mspace.setAttribute("width", (.5 * i) + "em");
+ var mover = document.createElementNS(mathml, "mover");
+ mover.setAttribute("accent", "false");
+ mover.appendChild(mspace);
+ mover.appendChild(mo);
+ math.appendChild(mover);
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ div.appendChild(math);
+ document.body.appendChild(div);
+ }
+
+ function init()
+ {
+ for (var i in stretchy_and_large_operators) {
+ createTest(stretchy_and_large_operators[i]);
+ }
+ }
+ </script>
+ </head>
+
+ <body onload="init()">
+
+ </body>
+</html>
diff --git a/layout/mathml/tests/stretchy-and-large-operators.js b/layout/mathml/tests/stretchy-and-large-operators.js
new file mode 100644
index 000000000..775e02840
--- /dev/null
+++ b/layout/mathml/tests/stretchy-and-large-operators.js
@@ -0,0 +1,2 @@
+// This file is automatically generated. Do not edit.
+var stretchy_and_large_operators = [['\\u2194.infix: ', '\u2194','h','infix'],['\\u222E.prefix: ', '\u222E','l','prefix'],['\\u2A11.prefix: ', '\u2A11','l','prefix'],['\\u007E.infix: ', '\u007E','h','infix'],['\\u27F8.infix: ', '\u27F8','h','infix'],['\\u02CD.postfix: ', '\u02CD','h','postfix'],['\\u0028.prefix: ', '\u0028','v','prefix'],['\\u220F.prefix: ', '\u220F','l','prefix'],['\\u2225.postfix: ', '\u2225','v','postfix'],['\\u2A13.prefix: ', '\u2A13','l','prefix'],['\\u007C\u007C.infix: ', '\u007C\u007C','v','infix'],['\\u203E.postfix: ', '\u203E','h','postfix'],['\\u27EE.prefix: ', '\u27EE','v','prefix'],['\\u007C.prefix: ', '\u007C','v','prefix'],['\\u2A00.prefix: ', '\u2A00','l','prefix'],['\\u295A.infix: ', '\u295A','h','infix'],['\\u02C6.postfix: ', '\u02C6','h','postfix'],['\\u21E2.infix: ', '\u21E2','h','infix'],['\\u2961.infix: ', '\u2961','v','infix'],['\\u2998.postfix: ', '\u2998','v','postfix'],['\\u2197.infix: ', '\u2197','v','infix'],['\\u21BE.infix: ', '\u21BE','v','infix'],['\\u21A7.infix: ', '\u21A7','v','infix'],['\\u21C7.infix: ', '\u21C7','h','infix'],['\\u2A0D.prefix: ', '\u2A0D','l','prefix'],['\\u23E1.postfix: ', '\u23E1','h','postfix'],['\\u2A18.prefix: ', '\u2A18','l','prefix'],['\\u21A9.infix: ', '\u21A9','h','infix'],['\\u21F0.infix: ', '\u21F0','h','infix'],['\\u2016.prefix: ', '\u2016','v','prefix'],['\\u007D.postfix: ', '\u007D','v','postfix'],['\\u294E.infix: ', '\u294E','h','infix'],['\\u2A02.prefix: ', '\u2A02','l','prefix'],['\\u21D5.infix: ', '\u21D5','v','infix'],['\\u219E.infix: ', '\u219E','h','infix'],['\\u21EE.infix: ', '\u21EE','v','infix'],['\\u22C3.prefix: ', '\u22C3','l','prefix'],['\\u21C9.infix: ', '\u21C9','h','infix'],['\\u21A6.infix: ', '\u21A6','h','infix'],['\\u2044.infix: ', '\u2044','v','infix'],['\\u27F9.infix: ', '\u27F9','h','infix'],['\\u21A1.infix: ', '\u21A1','v','infix'],['\\u2953.infix: ', '\u2953','h','infix'],['\\u2195.infix: ', '\u2195','v','infix'],['\\u21E0.infix: ', '\u21E0','h','infix'],['\\u21E4.infix: ', '\u21E4','h','infix'],['\\u2987.prefix: ', '\u2987','v','prefix'],['\\u2A15.prefix: ', '\u2A15','l','prefix'],['\\u21FE.infix: ', '\u21FE','h','infix'],['\\u2225.prefix: ', '\u2225','v','prefix'],['\\u2233.prefix: ', '\u2233','l','prefix'],['\\u2772.prefix: ', '\u2772','v','prefix'],['\\u27FA.infix: ', '\u27FA','h','infix'],['\\u2230.prefix: ', '\u2230','l','prefix'],['\\u2960.infix: ', '\u2960','v','infix'],['\\u21AF.infix: ', '\u21AF','v','infix'],['\\u20E1.postfix: ', '\u20E1','h','postfix'],['\\u007C\u007C\u007C.postfix: ', '\u007C\u007C\u007C','v','postfix'],['\\u27FB.infix: ', '\u27FB','h','infix'],['\\u295C.infix: ', '\u295C','v','infix'],['\\u007C.postfix: ', '\u007C','v','postfix'],['\\u21D1.infix: ', '\u21D1','v','infix'],['\\u27F7.infix: ', '\u27F7','h','infix'],['\\u21B1.infix: ', '\u21B1','v','infix'],['\\u21EC.infix: ', '\u21EC','v','infix'],['\\u21CC.infix: ', '\u21CC','h','infix'],['\\u27E8.prefix: ', '\u27E8','v','prefix'],['\\u2990.postfix: ', '\u2990','v','postfix'],['\\u21B4.infix: ', '\u21B4','h','infix'],['\\u22C0.prefix: ', '\u22C0','l','prefix'],['\\u2951.infix: ', '\u2951','v','infix'],['\\u2AFF.prefix: ', '\u2AFF','l','prefix'],['\\u21B5.infix: ', '\u21B5','v','infix'],['\\u2215.infix: ', '\u2215','v','infix'],['\\u2988.postfix: ', '\u2988','v','postfix'],['\\u290D.infix: ', '\u290D','h','infix'],['\\u21C1.infix: ', '\u21C1','h','infix'],['\\u290B.infix: ', '\u290B','v','infix'],['\\u2A16.prefix: ', '\u2A16','l','prefix'],['\\u295E.infix: ', '\u295E','h','infix'],['\\u2950.infix: ', '\u2950','h','infix'],['\\u27EB.postfix: ', '\u27EB','v','postfix'],['\\u29FC.prefix: ', '\u29FC','v','prefix'],['\\u21A4.infix: ', '\u21A4','h','infix'],['\\u295D.infix: ', '\u295D','v','infix'],['\\u2A10.prefix: ', '\u2A10','l','prefix'],['\\u2199.infix: ', '\u2199','h','infix'],['\\u222C.prefix: ', '\u222C','l','prefix'],['\\u2959.infix: ', '\u2959','v','infix'],['\\u21EB.infix: ', '\u21EB','v','infix'],['\\u290C.infix: ', '\u290C','h','infix'],['\\u21E9.infix: ', '\u21E9','v','infix'],['\\u2A1A.prefix: ', '\u2A1A','l','prefix'],['\\u2913.infix: ', '\u2913','v','infix'],['\\u2910.infix: ', '\u2910','h','infix'],['\\uFE36.postfix: ', '\uFE36','h','postfix'],['\\u21B0.infix: ', '\u21B0','v','infix'],['\\u296E.infix: ', '\u296E','v','infix'],['\\u2500.infix: ', '\u2500','h','infix'],['\\u2308.prefix: ', '\u2308','v','prefix'],['\\u21A8.infix: ', '\u21A8','v','infix'],['\\u21C6.infix: ', '\u21C6','h','infix'],['\\u21DD.infix: ', '\u21DD','h','infix'],['\\u221A.prefix: ', '\u221A','v','prefix'],['\\u2994.postfix: ', '\u2994','v','postfix'],['\\u2296.prefix: ', '\u2296','l','prefix'],['\\u2985.prefix: ', '\u2985','v','prefix'],['\\u21F6.infix: ', '\u21F6','h','infix'],['\\u298B.prefix: ', '\u298B','v','prefix'],['\\u02C7.postfix: ', '\u02C7','h','postfix'],['\\u2223.prefix: ', '\u2223','v','prefix'],['\\u007C.infix: ', '\u007C','v','infix'],['\\u2A07.prefix: ', '\u2A07','l','prefix'],['\\u2A06.prefix: ', '\u2A06','l','prefix'],['\\u20D6.postfix: ', '\u20D6','h','postfix'],['\\u2A12.prefix: ', '\u2A12','l','prefix'],['\\u2223.postfix: ', '\u2223','v','postfix'],['\\u2958.infix: ', '\u2958','v','infix'],['\\u23DC.postfix: ', '\u23DC','h','postfix'],['\\u2986.postfix: ', '\u2986','v','postfix'],['\\u2B46.infix: ', '\u2B46','h','infix'],['\\u21FD.infix: ', '\u21FD','h','infix'],['\\u007C\u007C\u007C.prefix: ', '\u007C\u007C\u007C','v','prefix'],['\\u21D2.infix: ', '\u21D2','h','infix'],['\\u298C.postfix: ', '\u298C','v','postfix'],['\\u2912.infix: ', '\u2912','v','infix'],['\\u21EA.infix: ', '\u21EA','v','infix'],['\\u21BC.infix: ', '\u21BC','h','infix'],['\\u005B.prefix: ', '\u005B','v','prefix'],['\\u22C2.prefix: ', '\u22C2','l','prefix'],['\\u296F.infix: ', '\u296F','v','infix'],['\\u2B45.infix: ', '\u2B45','h','infix'],['\\u02F7.postfix: ', '\u02F7','h','postfix'],['\\u0332.postfix: ', '\u0332','h','postfix'],['\\u27FE.infix: ', '\u27FE','h','infix'],['\\u0029.postfix: ', '\u0029','v','postfix'],['\\u21C0.infix: ', '\u21C0','h','infix'],['\\u2A0F.prefix: ', '\u2A0F','l','prefix'],['\\u27E7.postfix: ', '\u27E7','v','postfix'],['\\u27ED.postfix: ', '\u27ED','v','postfix'],['\\u27E6.prefix: ', '\u27E6','v','prefix'],['\\u2995.prefix: ', '\u2995','v','prefix'],['\\u219F.infix: ', '\u219F','v','infix'],['\\u21AC.infix: ', '\u21AC','h','infix'],['\\u21A2.infix: ', '\u21A2','h','infix'],['\\u007B.prefix: ', '\u007B','v','prefix'],['\\u222D.prefix: ', '\u222D','l','prefix'],['\\u2A04.prefix: ', '\u2A04','l','prefix'],['\\u2A0C.prefix: ', '\u2A0C','l','prefix'],['\\u27FF.infix: ', '\u27FF','h','infix'],['\\uFE37.postfix: ', '\uFE37','h','postfix'],['\\u007C\u007C.prefix: ', '\u007C\u007C','v','prefix'],['\\u2A14.prefix: ', '\u2A14','l','prefix'],['\\u23DD.postfix: ', '\u23DD','h','postfix'],['\\u29FD.postfix: ', '\u29FD','v','postfix'],['\\u20D7.postfix: ', '\u20D7','h','postfix'],['\\u222F.prefix: ', '\u222F','l','prefix'],['\\u230A.prefix: ', '\u230A','v','prefix'],['\\u27FD.infix: ', '\u27FD','h','infix'],['\\u2AFC.prefix: ', '\u2AFC','l','prefix'],['\\u21E6.infix: ', '\u21E6','h','infix'],['\\u2210.prefix: ', '\u2210','l','prefix'],['\\u298E.postfix: ', '\u298E','v','postfix'],['\\u21E8.infix: ', '\u21E8','h','infix'],['\\u2A0B.prefix: ', '\u2A0B','l','prefix'],['\\u21D0.infix: ', '\u21D0','h','infix'],['\\u27EC.prefix: ', '\u27EC','v','prefix'],['\\u2996.postfix: ', '\u2996','v','postfix'],['\\u2A1C.prefix: ', '\u2A1C','l','prefix'],['\\uFE38.postfix: ', '\uFE38','h','postfix'],['\\u2A0E.prefix: ', '\u2A0E','l','prefix'],['\\u23DF.postfix: ', '\u23DF','h','postfix'],['\\u290F.infix: ', '\u290F','h','infix'],['\\u2954.infix: ', '\u2954','v','infix'],['\\u21DA.infix: ', '\u21DA','h','infix'],['\\u298A.postfix: ', '\u298A','v','postfix'],['\\u2232.prefix: ', '\u2232','l','prefix'],['\\u298D.prefix: ', '\u298D','v','prefix'],['\\u21F3.infix: ', '\u21F3','v','infix'],['\\u2980.postfix: ', '\u2980','v','postfix'],['\\u21B3.infix: ', '\u21B3','v','infix'],['\\u02DC.postfix: ', '\u02DC','h','postfix'],['\\u230B.postfix: ', '\u230B','v','postfix'],['\\u2A19.prefix: ', '\u2A19','l','prefix'],['\\u007C\u007C.postfix: ', '\u007C\u007C','v','postfix'],['\\u21CA.infix: ', '\u21CA','v','infix'],['\\u2231.prefix: ', '\u2231','l','prefix'],['\\u2A01.prefix: ', '\u2A01','l','prefix'],['\\u21E3.infix: ', '\u21E3','v','infix'],['\\u2192.infix: ', '\u2192','h','infix'],['\\u23E0.postfix: ', '\u23E0','h','postfix'],['\\u21A3.infix: ', '\u21A3','h','infix'],['\\u21D4.infix: ', '\u21D4','h','infix'],['\\u2957.infix: ', '\u2957','h','infix'],['\\u298F.prefix: ', '\u298F','v','prefix'],['\\u290A.infix: ', '\u290A','v','infix'],['\\u2989.prefix: ', '\u2989','v','prefix'],['\\u2297.prefix: ', '\u2297','l','prefix'],['\\u27EF.postfix: ', '\u27EF','v','postfix'],['\\u2991.prefix: ', '\u2991','v','prefix'],['\\u21B9.infix: ', '\u21B9','h','infix'],['\\u2295.prefix: ', '\u2295','l','prefix'],['\\u007E.postfix: ', '\u007E','h','postfix'],['\\u02C9.postfix: ', '\u02C9','h','postfix'],['\\u21C4.infix: ', '\u21C4','h','infix'],['\\u21BD.infix: ', '\u21BD','h','infix'],['\\u21D3.infix: ', '\u21D3','v','infix'],['\\u005F.infix: ', '\u005F','h','infix'],['\\u2A08.prefix: ', '\u2A08','l','prefix'],['\\u20D1.postfix: ', '\u20D1','h','postfix'],['\\u2196.infix: ', '\u2196','v','infix'],['\\u27E9.postfix: ', '\u27E9','v','postfix'],['\\u27F5.infix: ', '\u27F5','h','infix'],['\\u2980.prefix: ', '\u2980','v','prefix'],['\\u21B2.infix: ', '\u21B2','v','infix'],['\\u294F.infix: ', '\u294F','v','infix'],['\\u21C5.infix: ', '\u21C5','v','infix'],['\\u21DC.infix: ', '\u21DC','h','infix'],['\\u21E7.infix: ', '\u21E7','v','infix'],['\\u21ED.infix: ', '\u21ED','v','infix'],['\\u21C2.infix: ', '\u21C2','v','infix'],['\\u21E5.infix: ', '\u21E5','h','infix'],['\\u23B1.postfix: ', '\u23B1','v','postfix'],['\\u21C8.infix: ', '\u21C8','v','infix'],['\\u27FC.infix: ', '\u27FC','h','infix'],['\\u290E.infix: ', '\u290E','h','infix'],['\\u2955.infix: ', '\u2955','v','infix'],['\\u295B.infix: ', '\u295B','h','infix'],['\\u23DE.postfix: ', '\u23DE','h','postfix'],['\\u2997.prefix: ', '\u2997','v','prefix'],['\\u2983.prefix: ', '\u2983','v','prefix'],['\\u2309.postfix: ', '\u2309','v','postfix'],['\\u2A17.prefix: ', '\u2A17','l','prefix'],['\\u23B4.postfix: ', '\u23B4','h','postfix'],['\\u22C1.prefix: ', '\u22C1','l','prefix'],['\\u2190.infix: ', '\u2190','h','infix'],['\\u21F5.infix: ', '\u21F5','v','infix'],['\\u21BF.infix: ', '\u21BF','v','infix'],['\\u27F0.infix: ', '\u27F0','v','infix'],['\\uFE35.postfix: ', '\uFE35','h','postfix'],['\\u21A0.infix: ', '\u21A0','h','infix'],['\\u2211.prefix: ', '\u2211','l','prefix'],['\\u219D.infix: ', '\u219D','h','infix'],['\\u23B5.postfix: ', '\u23B5','h','postfix'],['\\u27F6.infix: ', '\u27F6','h','infix'],['\\u2299.prefix: ', '\u2299','l','prefix'],['\\u219C.infix: ', '\u219C','h','infix'],['\\u00AF.postfix: ', '\u00AF','h','postfix'],['\\u21EF.infix: ', '\u21EF','v','infix'],['\\u2191.infix: ', '\u2191','v','infix'],['\\u2A09.prefix: ', '\u2A09','l','prefix'],['\\u2A0A.prefix: ', '\u2A0A','l','prefix'],['\\u005F.postfix: ', '\u005F','h','postfix'],['\\u23B0.prefix: ', '\u23B0','v','prefix'],['\\u21C3.infix: ', '\u21C3','v','infix'],['\\u21A5.infix: ', '\u21A5','v','infix'],['\\u27EA.prefix: ', '\u27EA','v','prefix'],['\\u2773.postfix: ', '\u2773','v','postfix'],['\\u2016.infix: ', '\u2016','v','infix'],['\\u21CB.infix: ', '\u21CB','h','infix'],['\\u228E.prefix: ', '\u228E','l','prefix'],['\\u27F1.infix: ', '\u27F1','v','infix'],['\\u005E.postfix: ', '\u005E','h','postfix'],['\\u0302.postfix: ', '\u0302','h','postfix'],['\\u005D.postfix: ', '\u005D','v','postfix'],['\\u2952.infix: ', '\u2952','h','infix'],['\\u295F.infix: ', '\u295F','h','infix'],['\\u21AB.infix: ', '\u21AB','h','infix'],['\\u2992.postfix: ', '\u2992','v','postfix'],['\\u2016.postfix: ', '\u2016','v','postfix'],['\\u007C\u007C\u007C.infix: ', '\u007C\u007C\u007C','v','infix'],['\\u2A03.prefix: ', '\u2A03','l','prefix'],['\\u2193.infix: ', '\u2193','v','infix'],['\\u2956.infix: ', '\u2956','h','infix'],['\\u2984.postfix: ', '\u2984','v','postfix'],['\\u21AA.infix: ', '\u21AA','h','infix'],['\\u2A1B.prefix: ', '\u2A1B','l','prefix'],['\\u21E1.infix: ', '\u21E1','v','infix'],['\\u2198.infix: ', '\u2198','h','infix'],['\\u21AD.infix: ', '\u21AD','h','infix'],['\\u2A05.prefix: ', '\u2A05','l','prefix'],['\\u21DB.infix: ', '\u21DB','h','infix'],['\\u2993.prefix: ', '\u2993','v','prefix'],['\\u222B.prefix: ', '\u222B','l','prefix'],['\\u20D0.postfix: ', '\u20D0','h','postfix'],['\\u21FF.infix: ', '\u21FF','h','infix'],];
diff --git a/layout/mathml/tests/test_bug330964.html b/layout/mathml/tests/test_bug330964.html
new file mode 100644
index 000000000..d0599a97b
--- /dev/null
+++ b/layout/mathml/tests/test_bug330964.html
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=330964
+-->
+<head>
+ <title>Test for Bug 706406</title>
+ <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=330964">Mozilla Bug 330964</a>
+<p id="display"></p>
+
+<math>
+ <mtable framespacing="7px 20px" frame="solid" rowspacing="11px 27px" columnspacing="5px 16px"
+ style="border-width: 2px;" id="mtable0">
+ <mtr>
+ <mtd id="mtd0">
+ <mn>X</mn>
+ </mtd>
+ <mtd id="mtd1">
+ <mn>X</mn>
+ </mtd>
+ <mtd id="mtd2">
+ <mn>X</mn>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd id="mtd3">
+ <mn>X</mn>
+ </mtd>
+ <mtd id="mtd4">
+ <mn>X</mn>
+ </mtd>
+ <mtd id="mtd5">
+ <mn>X</mn>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd id="mtd6">
+ <mn>X</mn>
+ </mtd>
+ <mtd id="mtd7">
+ <mn>X</mn>
+ </mtd>
+ <mtd id="mtd8">
+ <mn>X</mn>
+ </mtd>
+ </mtr>
+ </mtable>
+</math>
+
+<pre id="test">
+<script type="application/javascript">
+
+ var epsilon = 2;
+ function almostEqual(x, y) { return Math.abs(x - y) < epsilon; }
+
+ rectTable = $("mtable0").getBoundingClientRect();
+ rect0 = $("mtd0").getBoundingClientRect();
+ rect1 = $("mtd1").getBoundingClientRect();
+ rect2 = $("mtd2").getBoundingClientRect();
+ rect3 = $("mtd3").getBoundingClientRect();
+ rect4 = $("mtd4").getBoundingClientRect();
+ rect5 = $("mtd5").getBoundingClientRect();
+ rect6 = $("mtd6").getBoundingClientRect();
+ rect7 = $("mtd7").getBoundingClientRect();
+ rect8 = $("mtd8").getBoundingClientRect();
+ ok(almostEqual(rect1.left - rect0.right, 5), "columnspacing wonky");
+ ok(almostEqual(rect2.left - rect1.right, 16), "columnspacing wonky");
+ ok(almostEqual(rect4.left - rect3.right, 5), "columnspacing wonky");
+ ok(almostEqual(rect5.left - rect4.right, 16), "columnspacing wonky");
+ ok(almostEqual(rect7.left - rect6.right, 5), "columnspacing wonky");
+ ok(almostEqual(rect8.left - rect7.right, 16), "columnspacing wonky");
+ ok(almostEqual(rect3.top - rect0.bottom, 11), "rowspacing wonky");
+ ok(almostEqual(rect4.top - rect1.bottom, 11), "rowspacing wonky");
+ ok(almostEqual(rect5.top - rect2.bottom, 11), "rowspacing wonky");
+ ok(almostEqual(rect6.top - rect3.bottom, 27), "rowspacing wonky");
+ ok(almostEqual(rect7.top - rect4.bottom, 27), "rowspacing wonky");
+ ok(almostEqual(rect8.top - rect5.bottom, 27), "rowspacing wonky");
+ // Remember to subtract border
+ ok(almostEqual(rect0.left - rectTable.left - 2, 7), "framespacing left wonky");
+ ok(almostEqual(rect3.left - rectTable.left - 2, 7), "framespacing left wonky");
+ ok(almostEqual(rect6.left - rectTable.left - 2, 7), "framespacing left wonky");
+ ok(almostEqual(rect0.top - rectTable.top - 2, 20), "framespacing top wonky");
+ ok(almostEqual(rect1.top - rectTable.top - 2, 20), "framespacing top wonky");
+ ok(almostEqual(rect2.top - rectTable.top - 2, 20), "framespacing top wonky");
+ ok(almostEqual(rectTable.bottom - rect6.bottom - 2, 20), "framespacing bottom wonky");
+ ok(almostEqual(rectTable.bottom - rect7.bottom - 2, 20), "framespacing bottom wonky");
+ ok(almostEqual(rectTable.bottom - rect8.bottom - 2, 20), "framespacing bottom wonky");
+ ok(almostEqual(rectTable.right - rect2.right - 2, 7), "framespacing right wonky");
+ ok(almostEqual(rectTable.right - rect5.right - 2, 7), "framespacing right wonky");
+ ok(almostEqual(rectTable.right - rect8.right - 2, 7), "framespacing right wonky");
+</script>
+</pre>
+</body>
+</html>
diff --git a/layout/mathml/tests/test_bug553917.html b/layout/mathml/tests/test_bug553917.html
new file mode 100644
index 000000000..439ddbdd6
--- /dev/null
+++ b/layout/mathml/tests/test_bug553917.html
@@ -0,0 +1,171 @@
+<!DOCTYPE HTML>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=553917
+-->
+<html>
+ <head>
+ <title>Test for Bug 553917</title>
+ <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
+ <script type="application/javascript">
+ var stringBundleService =
+ SpecialPowers.Cc["@mozilla.org/intl/stringbundle;1"]
+ .getService(SpecialPowers.Ci.nsIStringBundleService);
+ var g_bundl =
+ stringBundleService.createBundle("chrome://global/locale/mathml/mathml.properties");
+
+ var g_errorInfo = {
+ /*<math><mroot></mroot></math>
+ <math><msub></msub></math>
+ <math><msup></msup></math>
+ <math><mfrac></mfrac></math>
+ <math><msubsup></msubsup></math>
+ <math><munderover></munderover></math>*/
+ ChildCountIncorrect: {
+ status : [false, false, false, false, false, false],
+ args : [["mroot"], ["msub"], ["msup"], ["mfrac"], ["msubsup"], ["munderover"]] },
+ /*<math fontfamily="serif"></math>
+ <math color="#112233"></math>
+ <math background="#FFFFFF"></math>
+ <math fontsize="10"></math>
+ <math xlink:href="http://www.mozilla.org"></math>*/
+ DeprecatedSupersededBy: {
+ status: [false, false, false, false, false],
+ args: [["fontfamily","mathvariant"],["color","mathcolor"], ["background","mathbackground"],
+ ["fontsize","mathsize"], ["xlink:href","href"]] },
+ /*<math><mpadded width="BAD!"></mpadded></math>
+ <math><mpadded height="BAD!"></mpadded></math>
+ <math><mpadded voffset="BAD!"></mpadded></math>*/
+ AttributeParsingError: {
+ status: [false, false, false],
+ args: [["BAD!","width","mpadded"], ["BAD!","height","mpadded"], ["BAD!","voffset","mpadded"]]
+ },
+ /*<math scriptlevel="BAD!"></math>
+ <math scriptsizemultiplier="BAD!"></math>*/
+ AttributeParsingErrorNoTag: {
+ status: [false, false],
+ args: [["BAD!","scriptlevel"], ["BAD!","scriptsizemultiplier"]]
+ },
+ /* <math><mo rspace="2..0">+</mo></math>
+ <math><mo minsize="1.5notaunit">+</mo></math>
+ <math><mspace width="2"/></math>
+ <math><mo lspace="BADlspace">+</mo></math>
+ <math><mspace height="BADheight"/></math>
+ <math><mspace depth="BADdepth"/></math>*/
+ LengthParsingError : {
+ status: [false, false, false, false, false, false],
+ args: [["2..0"], ["1.5notaunit"], ["2"],["BADlspace"],["BADheight"],["BADdepth"]]
+ },
+ /*<math><mmultiscripts></mmultiscripts></math>
+ <math><mmultiscripts><mprescripts/><mprescripts/></mmultiscripts></math>
+ <math><mmultiscripts><mi>x</mi><mi>y</mi></mmultiscripts></math>*/
+ MMultiscriptsErrors: {
+ status: [false, false, false],
+ args: ["NoBase","DuplicateMprescripts", "SubSupMismatch"]
+ },
+ /*<math><mo minsize="2">+</mo></math>*/
+ UnitlessValuesAreDeprecated : {
+ status : [false],
+ args : [[]] }};
+
+ var g_errorTypes = ["ChildCountIncorrect","DeprecatedSupersededBy","AttributeParsingError",
+ "AttributeParsingErrorNoTag","LengthParsingError", "MMultiscriptsErrors",
+ "UnitlessValuesAreDeprecated"];
+
+ function getErrorMessage(name,idx)
+ {
+ if (name != "MMultiscriptsErrors") {
+ var formatParams = g_errorInfo[name].args[idx];
+ if (formatParams.length > 0) {
+ return g_bundl.formatStringFromName(name,formatParams,formatParams.length);
+ } else {
+ return g_bundl.GetStringFromName(name);
+ }
+ } else {
+ return g_bundl.GetStringFromName(g_errorInfo[name].args[idx]);
+ }
+ }
+
+ /** Checks the roll call to see if all expected error messages were present. */
+ function processRollCall()
+ {
+ for (var i=0; i<g_errorTypes.length;i++) {
+ for (var j = 0; j < g_errorInfo[g_errorTypes[i]].status.length; j++) {
+ ok(g_errorInfo[g_errorTypes[i]].status[j],
+ "\"" + getErrorMessage(g_errorTypes[i], j)
+ + "\" was expected to be in the error console.");
+ }
+ }
+ }
+
+ /** Tests a candidate to see if it is one of the expected messages and updates the
+ g_errorInfo structure if it is. */
+ function doRollCall(msg)
+ {
+ for (var i = 0; i < g_errorTypes.length; i++) {
+ for (var j = 0; j < g_errorInfo[g_errorTypes[i]].status.length; j++) {
+ if (msg == getErrorMessage(g_errorTypes[i], j))
+ {
+ g_errorInfo[g_errorTypes[i]].status[j] = true;
+ }
+ }
+ }
+ }
+
+ SpecialPowers.registerConsoleListener(
+ function (msg) {
+ if (msg.message == "SENTINEL") {
+ processRollCall();
+ SimpleTest.finish();
+ } else if (msg.isScriptError) {
+ doRollCall(msg.errorMessage);
+ }
+ });
+
+ SimpleTest.waitForExplicitFinish();
+ </script>
+ </head>
+ <body onload="SpecialPowers.postConsoleSentinel();">
+ <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=553917">Mozilla Bug 553917</a>
+ <!-- ChildCountIncorrect -->
+ <math><mroot></mroot></math>
+ <math><msub></msub></math>
+ <math><msup></msup></math>
+ <math><mfrac></mfrac></math>
+ <math><msubsup></msubsup></math>
+ <math><munderover></munderover></math>
+
+ <!-- DeprecatedSupersededBy -->
+ <math fontfamily="serif"></math>
+ <math color="#112233"></math>
+ <math background="#FFFFFF"></math>
+ <math fontsize="10"></math>
+ <math xlink:href="http://www.mozilla.org"></math>
+
+ <!-- AttributeParsingError -->
+ <math><mpadded width="BAD!"></mpadded></math>
+ <math><mpadded height="BAD!"></mpadded></math>
+ <math><mpadded voffset="BAD!"></mpadded></math>
+
+ <!-- AttributeParsingErrorNoTag -->
+ <math scriptlevel="BAD!"></math>
+ <math scriptsizemultiplier="BAD!"></math>
+
+ <!-- LengthParsingError -->
+ <math><mo rspace="2..0">+</mo></math>
+ <math><mo minsize="1.5notaunit">+</mo></math>
+ <math><mspace width="2"/></math>
+ <math><mo lspace="BADlspace">+</mo></math>
+ <math><mspace height="BADheight"/></math>
+ <math><mspace depth="BADdepth"/></math>
+
+ <!-- MMultiscriptsErrors -->
+ <math><mmultiscripts></mmultiscripts></math>
+ <math><mmultiscripts><mprescripts/><mprescripts/></mmultiscripts></math>
+ <math><mmultiscripts><mi>x</mi><mi>y</mi></mmultiscripts></math>
+
+ <!-- UnitlessValuesAreDeprecated -->
+ <math><mo minsize="2">+</mo></math>
+ </body>
+</html>
diff --git a/layout/mathml/tests/test_bug706406.html b/layout/mathml/tests/test_bug706406.html
new file mode 100644
index 000000000..76cfc6352
--- /dev/null
+++ b/layout/mathml/tests/test_bug706406.html
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=706406
+-->
+<head>
+ <title>Test for Bug 706406</title>
+ <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=706406">Mozilla Bug 706406</a>
+<p id="display"></p>
+<math xmlns="http://www.w3.org/1998/Math/MathML">
+ <maction actiontype="toggle" id="maction">
+ <mn>1</mn>
+ <mn>2</mn>
+ </maction>
+</math>
+<pre id="test">
+<script type="application/javascript">
+
+/** Test for Bug 706406 **/
+
+function doTest()
+{
+ function doStopPropagation(aEvent) {
+ aEvent.stopPropagation();
+ }
+
+ var maction = document.getElementById("maction");
+
+ synthesizeMouseAtCenter(maction, {});
+
+ is(maction.getAttribute("selection"), "2",
+ "maction's selection attribute isn't 2 by first click");
+
+ synthesizeMouseAtCenter(maction, {});
+
+ is(maction.getAttribute("selection"), "1",
+ "maction's selection attribute isn't 1 by second click");
+
+ window.addEventListener("mousedown", doStopPropagation, true);
+ window.addEventListener("mouseup", doStopPropagation, true);
+ window.addEventListener("click", doStopPropagation, true);
+
+ synthesizeMouseAtCenter(maction, {});
+
+ is(maction.getAttribute("selection"), "2",
+ "maction's selection attribute isn't 2 by first click called stopPropagation()");
+
+ synthesizeMouseAtCenter(maction, {});
+
+ is(maction.getAttribute("selection"), "1",
+ "maction's selection attribute isn't 1 by second click called stopPropagation()");
+
+ window.removeEventListener("mousedown", doStopPropagation, true);
+ window.removeEventListener("mouseup", doStopPropagation, true);
+ window.removeEventListener("click", doStopPropagation, true);
+
+ SimpleTest.finish();
+}
+
+SimpleTest.waitForExplicitFinish();
+SimpleTest.waitForFocus(doTest);
+
+</script>
+</pre>
+</body>
+</html>
diff --git a/layout/mathml/tests/test_bug827713-2.html b/layout/mathml/tests/test_bug827713-2.html
new file mode 100644
index 000000000..b7d27504d
--- /dev/null
+++ b/layout/mathml/tests/test_bug827713-2.html
@@ -0,0 +1,152 @@
+<!DOCTYPE HTML>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=553917
+-->
+<html>
+ <head>
+ <title>Test for error handling aspect of Bug 827713</title>
+ <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
+ <script type="application/javascript">
+
+ var stringBundleService =
+ SpecialPowers.Cc["@mozilla.org/intl/stringbundle;1"]
+ .getService(SpecialPowers.Ci.nsIStringBundleService);
+ var g_bundl =
+ stringBundleService.createBundle("chrome://global/locale/mathml/mathml.properties");
+
+ var g_errorInfo = {
+ InvalidChild: {
+ status : [false, false, false, false, false, false],
+ args : [["mprescripts", "msubsup"], ["mprescripts", "msubsup"],
+ ["mprescripts", "msub"], ["none", "msub"], ["none","msup"],
+ ["none","msubsup"]]
+ },
+
+ MMultiscriptsErrors: {
+ status: [false, false],
+ args: ["NoBase", "SubSupMismatch"]
+ }
+ };
+
+ var g_errorTypes = ["InvalidChild", "MMultiscriptsErrors"];
+
+ function getErrorMessage(name,idx)
+ {
+ if (name != "MMultiscriptsErrors") {
+ return g_bundl.formatStringFromName(name,g_errorInfo[name].args[idx],
+ g_errorInfo[name].args[idx].length);
+ }
+ else {
+ return g_bundl.GetStringFromName(g_errorInfo[name].args[idx]);
+ }
+ }
+
+ /** Checks the roll call to see if all expected error messages were present. */
+ function processRollCall()
+ {
+ for (var i=0; i<g_errorTypes.length;i++) {
+ for (var j = 0; j < g_errorInfo[g_errorTypes[i]].status.length; j++) {
+ ok(g_errorInfo[g_errorTypes[i]].status[j],
+ "\"" + getErrorMessage(g_errorTypes[i], j)
+ + "\" was expected to be in the error console.");
+ }
+ }
+ }
+
+ /** Tests a candidate to see if it is one of the expected messages and updates the
+ g_errorInfo structure if it is. */
+ function doRollCall(msg)
+ {
+ for (var i = 0; i < g_errorTypes.length; i++) {
+ for (var j = 0; j < g_errorInfo[g_errorTypes[i]].status.length; j++) {
+ if (msg == getErrorMessage(g_errorTypes[i], j))
+ {
+ g_errorInfo[g_errorTypes[i]].status[j] = true;
+ }
+ }
+ }
+ }
+
+ SpecialPowers.registerConsoleListener(
+ function (msg) {
+ if (msg.message == "SENTINEL") {
+ processRollCall();
+ SimpleTest.finish();
+ } else if (msg.isScriptError) {
+ doRollCall(msg.errorMessage);
+ }
+ });
+
+ SimpleTest.waitForExplicitFinish();
+ </script>
+ </head>
+ <body onload="SpecialPowers.postConsoleSentinel();">
+ <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=827713">Mozilla Bug 827713</a>
+
+ <!-- InvalidChild -->
+ <math>
+ <msubsup>
+ <mprescripts/>
+ </msubsup>
+ </math>
+
+ <math>
+ <msubsup>
+ <mprescripts/>
+ <mprescripts/>
+ </msubsup>
+ </math>
+
+ <math>
+ <msub>
+ <mtext>a</mtext>
+ <mprescripts/>
+ <mtext>a</mtext>
+ <mprescripts/>
+ </msub>
+ </math>
+
+ <math>
+ <msub>
+ <mtext>a</mtext>
+ <none/>
+ </msub>
+ </math>
+
+ <math>
+ <msup>
+ <mtext>a</mtext>
+ <none/>
+ </msup>
+ </math>
+
+ <math>
+ <msubsup>
+ <mtext>a</mtext>
+ <mtext>b</mtext>
+ <none/>
+ </msubsup>
+ </math>
+
+ <!-- NoBase -->
+ <math>
+ <mmultiscripts>
+ <none/>
+ <mtext>b</mtext>
+ <mtext>c</mtext>
+ </mmultiscripts>
+ </math>
+
+ <!-- SubSupMismatch -->
+ <math>
+ <mmultiscripts>
+ <mtext>b</mtext>
+ <mtext>c</mtext>
+ <mprescripts/>
+ <mtext>a</mtext>
+ </mmultiscripts>
+ </math>
+ </body>
+</html>
diff --git a/layout/mathml/tests/test_bug827713.html b/layout/mathml/tests/test_bug827713.html
new file mode 100644
index 000000000..ebc46d333
--- /dev/null
+++ b/layout/mathml/tests/test_bug827713.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=706406
+-->
+<head>
+ <title>Test for Bug 706406</title>
+ <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=827713">Mozilla Bug 827713</a>
+<p id="display"></p>
+ <p><math>
+ <msub subscriptshift="50px">
+ <mspace width="50px" height="25px" depth="25px" mathbackground="blue" id ="subbase"></mspace>
+ <mspace width="50px" height="25px" depth="25px" mathbackground="red" id="subsub"></mspace>
+ </msub>
+ </math></p>
+
+ <p><math>
+ <msup superscriptshift="50px">
+ <mspace width="50px" height="25px" depth="25px" mathbackground="blue" id="supbase"></mspace>
+ <mspace width="50px" height="25px" depth="25px" mathbackground="green" id="supsup"></mspace>
+ </msup>
+ </math></p>
+
+ <p><math>
+ <msubsup subscriptshift="50px" superscriptshift="50px">
+ <mspace width="50px" height="25px" depth="25px" mathbackground="blue" id="ssbase"></mspace>
+ <mspace width="50px" height="25px" depth="25px" mathbackground="red" id="sssub"></mspace>
+ <mspace width="50px" height="25px" depth="25px" mathbackground="green" id="sssup"></mspace>
+ </msubsup>
+ </math></p>
+<pre id="test">
+<script type="application/javascript">
+
+ /** Test for the scriptshift aspect of bug 827713 **/
+ SimpleTest.waitForExplicitFinish();
+
+ subBaseRect = $("subbase").getBoundingClientRect();
+ subSubRect = $("subsub").getBoundingClientRect();
+ is(subBaseRect.bottom, subSubRect.top, "Bad subscript shift for msub");
+
+ supBaseRect = $("supbase").getBoundingClientRect();
+ supSupRect = $("supsup").getBoundingClientRect();
+ is(supBaseRect.top, supSupRect.bottom, "Bad superscript shift for msup");
+
+ ssBaseRect = $("ssbase").getBoundingClientRect();
+ ssSubRect = $("sssub").getBoundingClientRect();
+ ssSupRect = $("sssup").getBoundingClientRect();
+ is(ssBaseRect.bottom, ssSubRect.top, "Bad subscript shift for msubusp");
+ is(ssBaseRect.top, ssSupRect.bottom, "Bad superscript shift for msubusp");
+
+
+ SimpleTest.finish();
+
+</script>
+</pre>
+</body>
+</html>
diff --git a/layout/mathml/tests/test_bug975681.html b/layout/mathml/tests/test_bug975681.html
new file mode 100644
index 000000000..854693ead
--- /dev/null
+++ b/layout/mathml/tests/test_bug975681.html
@@ -0,0 +1,118 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=975681
+-->
+ <head>
+ <meta charset="utf-8">
+ <title> Test for Bug 975681 </title>
+ <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"> </script>
+ <script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"> </script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+ </head>
+ <body>
+ <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=975681"> Mozilla Bug 975681 </a>
+ <p id="display"></p>
+
+ <p>
+ <math>
+ <mfrac id="test_mfrac">
+ <mspace width="100px" height="20px" mathbackground="red"></mspace>
+ <mspace width="100px" height="20px" mathbackground="red"></mspace>
+ </mfrac>
+ </math>
+ </p>
+
+ <p>
+ <math>
+ <mfrac linethickness="30px" id="mfrac_linethickness">
+ <mspace width="100px" height="20px" mathbackground="red"></mspace>
+ <mspace width="100px" height="20px" mathbackground="red"></mspace>
+ </mfrac>
+ </math>
+ </p>
+
+ <p>
+ <math>
+ <mfrac numalign="left" id="mfrac_numalign">
+ <mspace width="50px" height="20px" mathbackground="red"></mspace>
+ <mspace width="100px" height="20px" mathbackground="red"></mspace>
+ </mfrac>
+ </math>
+ </p>
+
+ <p>
+ <math>
+ <mfrac denomalign="right" id="mfrac_denomalign">
+ <mspace width="100px" height="20px" mathbackground="red"></mspace>
+ <mspace width="50px" height="20px" mathbackground="red"></mspace>
+ </mfrac>
+ </math>
+ </p>
+
+ <p>
+ <math>
+ <mfrac bevelled="true" id="mfrac_bevelled">
+ <mspace width="100px" height="20px" mathbackground="red"></mspace>
+ <mspace width="100px" height="20px" mathbackground="red"></mspace>
+ </mfrac>
+ </math>
+ </p>
+
+ <pre id="test">
+ <script type="application/javascript">
+
+ /** Test for Bug 975681 **/
+ SimpleTest.waitForExplicitFinish();
+
+ var epsilon = 1; // allow a small relative error
+ var delta = .25; // used to indicate a small shift
+
+ function almostEqualAbs(x, y) {
+ var e = Math.abs(x - y);
+ return (e <= epsilon);
+ }
+
+ function almostLessThanAbs(x, y) {
+ var e = x - y;
+ return (e <= epsilon);
+ }
+
+ // test: mfrac
+ var mfracNum = document.getElementById("test_mfrac").firstElementChild.getBoundingClientRect();
+ var mfracDenom = document.getElementById("test_mfrac").lastElementChild.getBoundingClientRect();
+
+ ok(almostEqualAbs(mfracNum.left, mfracDenom.left) &&
+ almostEqualAbs(mfracNum.right, mfracDenom.right), "Numerator and denominator should be vertical aligned");
+
+ ok(almostLessThanAbs(mfracNum.bottom, mfracDenom.top), "Numerator should be above denominator");
+
+ // test: mfrac attributes
+ var mfrac = document.getElementById("mfrac_linethickness").getBoundingClientRect();
+ var num = document.getElementById("mfrac_linethickness").firstElementChild.getBoundingClientRect();
+ var denom = document.getElementById("mfrac_linethickness").lastElementChild.getBoundingClientRect();
+
+ ok(almostLessThanAbs(num.height + 30 + denom.height, mfrac.height) &&
+ almostLessThanAbs(num.bottom + 30, denom.top), "numerator and denominator should be separated by linethickness");
+
+ num = document.getElementById("mfrac_numalign").firstElementChild.getBoundingClientRect();
+ mfrac = document.getElementById("mfrac_numalign").getBoundingClientRect();
+
+ ok(almostEqualAbs(num.left, mfrac.left), "numerator should be aligned left");
+
+ mfrac = document.getElementById("mfrac_denomalign").getBoundingClientRect();
+ denom = document.getElementById("mfrac_denomalign").lastElementChild.getBoundingClientRect();
+
+ ok(almostEqualAbs(mfrac.right, denom.right), "denominator should be aligned right");
+
+ num = document.getElementById("mfrac_bevelled").firstElementChild.getBoundingClientRect();
+ denom = document.getElementById("mfrac_bevelled").lastElementChild.getBoundingClientRect();
+
+ ok(almostLessThanAbs(num.right, denom.left) &&
+ almostLessThanAbs(num.top*(1-delta)+num.bottom*delta, denom.top), "incorrect position of mfrac children");
+
+ SimpleTest.finish();
+
+ </script>
+ </body>
+</html>
diff --git a/layout/mathml/tests/test_disabled.html b/layout/mathml/tests/test_disabled.html
new file mode 100644
index 000000000..9b649d0f9
--- /dev/null
+++ b/layout/mathml/tests/test_disabled.html
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+Copied from
+https://bugzilla.mozilla.org/show_bug.cgi?id=744830
+-->
+<head>
+ <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=166235">Mozilla Bug 166235</a>
+<div id="testnodes"><span>hi</span> there <!-- mon ami --></div>
+<pre id="test">
+<script type="application/javascript">
+ SimpleTest.waitForExplicitFinish();
+ SpecialPowers.pushPrefEnv({"set": [["mathml.disabled", true]]}, doTest);
+ function doTest() {
+ let t = document.getElementById('testnodes');
+ t.innerHTML = null;
+ t.appendChild(document.createElementNS("http://www.w3.org/1998/Math/MathML", "math:math"));
+ t.firstChild.textContent = "<foo>";
+ is(t.innerHTML, "<math:math>&lt;foo&gt;</math:math>");
+
+ t.innerHTML = null;
+ t.appendChild(document.createElementNS("http://www.w3.org/1998/Math/MathML", "math"));
+ is(t.firstChild.namespaceURI, "http://www.w3.org/1998/Math/MathML");
+ t.firstChild.appendChild(document.createElementNS("http://www.w3.org/1998/Math/MathML", "script"));
+ is(t.firstChild.firstChild.namespaceURI, "http://www.w3.org/1998/Math/MathML");
+ t.firstChild.firstChild.textContent = "1&2<3>4\xA0";
+ is(t.innerHTML, '<math><script>1&amp;2&lt;3&gt;4&nbsp;\u003C/script></math>');
+
+ t.innerHTML = null;
+ t.appendChild(document.createElementNS("http://www.w3.org/1998/Math/MathML", "math"));
+ is(t.firstChild.namespaceURI, "http://www.w3.org/1998/Math/MathML");
+ t.firstChild.appendChild(document.createElementNS("http://www.w3.org/1998/Math/MathML", "style"));
+ is(t.firstChild.firstChild.namespaceURI, "http://www.w3.org/1998/Math/MathML");
+ t.firstChild.firstChild.textContent = "1&2<3>4\xA0";
+ is(t.innerHTML, '<math><style>1&amp;2&lt;3&gt;4&nbsp;\u003C/style></math>');
+
+ SimpleTest.finish();
+ }
+</script>
+</pre>
+</body>
+</html>
+
diff --git a/layout/mathml/tests/test_disabled_chrome.html b/layout/mathml/tests/test_disabled_chrome.html
new file mode 100644
index 000000000..dff4011bb
--- /dev/null
+++ b/layout/mathml/tests/test_disabled_chrome.html
@@ -0,0 +1,55 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=744830
+-->
+<head>
+ <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+<!--
+ <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
+-->
+ <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SpawnTask.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=166235">Mozilla Bug 166235</a>
+<div id="testnodes"><span>hi</span> there <!-- mon ami --></div>
+<pre id="test">
+<script type="application/javascript">
+ add_task(function* () {
+ const initialPrefValue = SpecialPowers.getBoolPref("mathml.disabled");
+ SpecialPowers.setBoolPref("mathml.disabled", true);
+ const Cu = SpecialPowers.Components.utils;
+ const { ContentTaskUtils } = Cu.import("resource://testing-common/ContentTaskUtils.jsm", {});
+ let t = document.getElementById('testnodes');
+
+ let url = 'chrome://mochitests/content/chrome/layout/mathml/tests/mathml_example_test.html'
+ const chromeIframeEl = document.createElement('iframe');
+ let chromeLoadPromise = ContentTaskUtils.waitForEvent(chromeIframeEl, 'load', false);
+ chromeIframeEl.src = url;
+ t.appendChild(chromeIframeEl);
+
+ yield chromeLoadPromise;
+ const chromeBR = chromeIframeEl.contentDocument.body.getBoundingClientRect();
+
+ url = "http://mochi.test:8888/chrome/layout/mathml/tests/mathml_example_test.html";
+ const iframeEl = document.createElement('iframe');
+ iframeEl.src = url;
+ let loadPromise = ContentTaskUtils.waitForEvent(iframeEl, 'load', false);
+ t.appendChild(iframeEl);
+ yield loadPromise;
+
+ const contentBR = iframeEl.contentDocument.body.getBoundingClientRect();
+
+ ok(chromeBR.height > contentBR.height, "Chrome content height should be bigger than content due to layout");
+
+ ok(!iframeEl.contentDocument.getElementById('svgel').hasExtension("http://www.w3.org/1998/Math/MathML"), 'SVG namespace support is disabled in content iframe');
+ ok(chromeIframeEl.contentDocument.getElementById('svgel').hasExtension("http://www.w3.org/1998/Math/MathML"), 'SVG namespace support is enabled in chrome iframe');
+
+ SpecialPowers.setBoolPref("mathml.disabled", initialPrefValue);
+ });
+</script>
+</pre>
+</body>
+</html>
+
diff --git a/layout/mathml/tests/test_opentype-axis-height.html b/layout/mathml/tests/test_opentype-axis-height.html
new file mode 100644
index 000000000..cfab51d40
--- /dev/null
+++ b/layout/mathml/tests/test_opentype-axis-height.html
@@ -0,0 +1,60 @@
+<!doctype html>
+<html>
+ <head>
+ <title>Open Type MATH - axis-height</title>
+ <script type="application/javascript"
+ src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script type="application/javascript"
+ src="/tests/SimpleTest/EventUtils.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+ <meta charset="utf-8"/>
+ <style type="text/css">
+ math {
+ font-size: 10px;
+ }
+ @font-face {
+ font-family: axis-height-1;
+ src: url(/tests/fonts/math/axis-height-1.otf);
+ }
+ @font-face {
+ font-family: axis-height-2;
+ src: url(/tests/fonts/math/axis-height-2.otf);
+ }
+ </style>
+ <script type="application/javascript">
+ SimpleTest.waitForExplicitFinish();
+
+ var epsilon = 5;
+ function almostEqual(x, y) { return Math.abs(x - y) < epsilon; }
+
+ function getBox(aId) {
+ return document.getElementById(aId).getBoundingClientRect();
+ }
+
+ function doTest() {
+ ok(almostEqual(getBox("plus1").top - getBox("plus2").top, 10 * 20),
+ "Bad AxisHeight");
+
+ SimpleTest.finish();
+ }
+ </script>
+ </head>
+ <body onload="doTest()">
+ <a target="_blank"
+ href="https://bugzilla.mozilla.org/show_bug.cgi?id=961365">
+ Mozilla Bug 961365
+ </a>
+
+ <p id="display"></p>
+
+ <p>
+ <math style="font-family: axis-height-1;">
+ <mo id="plus1">+</mo>
+ </math>
+ <math style="font-family: axis-height-2;">
+ <mo id="plus2">+</mo>
+ </math>
+ </p>
+
+ </body>
+</html>
diff --git a/layout/mathml/tests/test_opentype-fraction.html b/layout/mathml/tests/test_opentype-fraction.html
new file mode 100644
index 000000000..ad25b2e4d
--- /dev/null
+++ b/layout/mathml/tests/test_opentype-fraction.html
@@ -0,0 +1,187 @@
+<!doctype html>
+<html>
+ <head>
+ <title>Open Type MATH - fraction</title>
+ <script type="application/javascript"
+ src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script type="application/javascript"
+ src="/tests/SimpleTest/EventUtils.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+ <meta charset="utf-8"/>
+ <style type="text/css">
+ math {
+ font-size: 10px;
+ }
+ @font-face {
+ font-family: fraction-1;
+ src: url(/tests/fonts/math/fraction-1.otf);
+ }
+ @font-face {
+ font-family: fraction-2;
+ src: url(/tests/fonts/math/fraction-2.otf);
+ }
+ @font-face {
+ font-family: fraction-3;
+ src: url(/tests/fonts/math/fraction-3.otf);
+ }
+ @font-face {
+ font-family: fraction-4;
+ src: url(/tests/fonts/math/fraction-4.otf);
+ }
+ @font-face {
+ font-family: fraction-5;
+ src: url(/tests/fonts/math/fraction-5.otf);
+ }
+ @font-face {
+ font-family: fraction-6;
+ src: url(/tests/fonts/math/fraction-6.otf);
+ }
+ @font-face {
+ font-family: fraction-7;
+ src: url(/tests/fonts/math/fraction-7.otf);
+ }
+ @font-face {
+ font-family: fraction-8;
+ src: url(/tests/fonts/math/fraction-8.otf);
+ }
+ @font-face {
+ font-family: fraction-9;
+ src: url(/tests/fonts/math/fraction-9.otf);
+ }
+ </style>
+ <script type="text/javascript">
+ var epsilon = 5;
+ function almostEqual(x, y) { return Math.abs(x - y) < epsilon; }
+
+ function getBox(aId) {
+ return document.getElementById(aId).getBoundingClientRect();
+ }
+
+ function doTest() {
+ /* inline style */
+ var ref = getBox("ref").height;
+
+ ok(almostEqual(getBox("d1").top - getBox("n1").bottom, ref * 20),
+ "Bad FractionRuleThickness");
+
+ ok(almostEqual(getBox("n1").top, getBox("n2").top) &&
+ almostEqual(getBox("d2").top - getBox("n2").bottom, ref * 10.5),
+ "Bad FractionNumeratorGapMin");
+
+ ok(almostEqual(getBox("d1").bottom, getBox("d3").bottom) &&
+ almostEqual(getBox("d3").top - getBox("n3").bottom, ref * 10.5),
+ "Bad FractionDenominatorGapMin");
+
+ ok(almostEqual(getBox("ref").top - getBox("n4").top, ref*3),
+ "Bad FractionNumeratorShiftUp");
+
+ ok(almostEqual(getBox("d5").bottom - getBox("ref").bottom, ref*3),
+ "Bad FractionDenominatorShiftDown");
+
+ /* display style */
+ ref = getBox("dref").height;
+
+ ok(almostEqual(getBox("dd1").top - getBox("dn1").bottom, ref * 20),
+ "Bad FractionRuleThickness");
+
+ ok(almostEqual(getBox("dn1").top, getBox("n6").top) &&
+ almostEqual(getBox("d6").top - getBox("n6").bottom, ref * 10.5),
+ "Bad FractionNumeratorDisplayStyleGapMin");
+
+ ok(almostEqual(getBox("dd1").bottom, getBox("d7").bottom) &&
+ almostEqual(getBox("d7").top - getBox("n7").bottom, ref * 10.5),
+ "Bad FractionDenominatorDisplayStyleGapMin");
+
+ ok(almostEqual(getBox("dref").top - getBox("n8").top, ref*3),
+ "Bad FractionNumeratorDisplayStyleShiftUp");
+
+ ok(almostEqual(getBox("d9").bottom - getBox("dref").bottom, ref*3),
+ "Bad FractionDenominatorDisplayStyleShiftDown");
+
+ SimpleTest.finish();
+ }
+ </script>
+ </head>
+ <body onload="doTest()">
+
+ <a target="_blank"
+ href="https://bugzilla.mozilla.org/show_bug.cgi?id=961365">
+ Mozilla Bug 961365
+ </a>
+
+ <p id="display"></p>
+
+ <p>
+ <math>
+ <mspace id="ref" height="1em" width="1em" mathbackground="green"/>
+ </math>
+ <math style="font-family: fraction-1;">
+ <mfrac>
+ <mspace id="n1" height="1em" width="1em" mathbackground="red"/>
+ <mspace id="d1" height="1em" width="1em" mathbackground="red"/>
+ </mfrac>
+ </math>
+ <math style="font-family: fraction-2;">
+ <mfrac>
+ <mspace id="n2" height="1em" width="1em" mathbackground="red"/>
+ <mspace id="d2" height="1em" width="1em" mathbackground="red"/>
+ </mfrac>
+ </math>
+ <math style="font-family: fraction-3;">
+ <mfrac>
+ <mspace id="n3" height="1em" width="1em" mathbackground="red"/>
+ <mspace id="d3" height="1em" width="1em" mathbackground="red"/>
+ </mfrac>
+ </math>
+ <math style="font-family: fraction-4;">
+ <mfrac>
+ <mspace id="n4" height="1em" width="1em" mathbackground="red"/>
+ <mspace id="d4" height="1em" width="1em" mathbackground="red"/>
+ </mfrac>
+ </math>
+ <math style="font-family: fraction-5;">
+ <mfrac>
+ <mspace id="n5" height="1em" width="1em" mathbackground="red"/>
+ <mspace id="d5" height="1em" width="1em" mathbackground="red"/>
+ </mfrac>
+ </math>
+ </p>
+
+ <p>
+ <math displaystyle="true">
+ <mspace id="dref" height="1em" width="1em" mathbackground="green"/>
+ </math>
+ <math displaystyle="true" style="font-family: fraction-1;">
+ <mfrac>
+ <mspace id="dn1" height="1em" width="1em" mathbackground="red"/>
+ <mspace id="dd1" height="1em" width="1em" mathbackground="red"/>
+ </mfrac>
+ </math>
+ <math displaystyle="true" style="font-family: fraction-6;">
+ <mfrac>
+ <mspace id="n6" height="1em" width="1em" mathbackground="red"/>
+ <mspace id="d6" height="1em" width="1em" mathbackground="red"/>
+ </mfrac>
+ </math>
+ <math displaystyle="true" style="font-family: fraction-7;">
+ <mfrac>
+ <mspace id="n7" height="1em" width="1em" mathbackground="red"/>
+ <mspace id="d7" height="1em" width="1em" mathbackground="red"/>
+ </mfrac>
+ </math>
+ <math displaystyle="true" style="font-family: fraction-8;">
+ <mfrac>
+ <mspace id="n8" height="1em" width="1em" mathbackground="red"/>
+ <mspace id="d8" height="1em" width="1em" mathbackground="red"/>
+ </mfrac>
+ </math>
+ <math displaystyle="true" style="font-family: fraction-9;">
+ <mfrac>
+ <mspace id="n9" height="1em" width="1em" mathbackground="red"/>
+ <mspace id="d9" height="1em" width="1em" mathbackground="red"/>
+ </mfrac>
+ </math>
+ </p>
+
+ </body>
+</html>
diff --git a/layout/mathml/tests/test_opentype-limits.html b/layout/mathml/tests/test_opentype-limits.html
new file mode 100644
index 000000000..596838789
--- /dev/null
+++ b/layout/mathml/tests/test_opentype-limits.html
@@ -0,0 +1,172 @@
+<!doctype html>
+<html>
+ <head>
+ <title>Open Type MATH - limits</title>
+ <script type="application/javascript"
+ src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script type="application/javascript"
+ src="/tests/SimpleTest/EventUtils.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+ <meta charset="utf-8"/>
+ <style type="text/css">
+ math {
+ font-size: 10px;
+ }
+ @font-face {
+ font-family: limits-1;
+ src: url(/tests/fonts/math/limits-1.otf);
+ }
+ @font-face {
+ font-family: limits-2;
+ src: url(/tests/fonts/math/limits-2.otf);
+ }
+ @font-face {
+ font-family: limits-3;
+ src: url(/tests/fonts/math/limits-3.otf);
+ }
+ @font-face {
+ font-family: limits-4;
+ src: url(/tests/fonts/math/limits-4.otf);
+ }
+ @font-face {
+ font-family: limits-5;
+ src: url(/tests/fonts/math/limits-5.otf);
+ }
+ </style>
+ <script type="text/javascript">
+ SimpleTest.waitForExplicitFinish();
+
+ var epsilon = 5;
+ function almostEqual(x, y) { return Math.abs(x - y) < epsilon; }
+
+ function getBox(aId) {
+ return document.getElementById(aId).getBoundingClientRect();
+ }
+
+ function doTest() {
+ ok(almostEqual(getBox("base1").top - getBox("over1").bottom, 7 * 10) &&
+ almostEqual(getBox("base2").top - getBox("over2").bottom, 7 * 10),
+ "Bad UpperLimitGapMin");
+
+ ok(almostEqual(getBox("under3").top - getBox("base3").bottom, 5 * 10) &&
+ almostEqual(getBox("under4").top - getBox("base4").bottom, 5 * 10),
+ "Bad LowerLimitGapMin");
+
+ ok(almostEqual(getBox("ref3").top - getBox("over5").bottom, 9 * 10) &&
+ almostEqual(getBox("ref3").top - getBox("over6").bottom, 9 * 10),
+ "UpperLimitBaselineRiseMin");
+
+ ok(almostEqual(getBox("under7").top - getBox("ref4").bottom, 2 * 10) &&
+ almostEqual(getBox("under8").top - getBox("ref4").bottom, 2 * 10),
+ "LowerLimitBaselineDropMin");
+
+ ok(almostEqual(getBox("base9").top - getBox("over9").bottom,
+ (6 - 2) * 10) &&
+ almostEqual(getBox("base10").top - getBox("over10").bottom,
+ (6 - 2) * 10),
+ "Bad AccentBaseHeight");
+
+ SimpleTest.finish();
+ }
+ </script>
+ </head>
+ <body onload="doTest()">
+
+ <a target="_blank"
+ href="https://bugzilla.mozilla.org/show_bug.cgi?id=961365">
+ Mozilla Bug 961365
+ </a>
+
+ <p id="display"></p>
+
+ <p>
+ <math style="font-family: limits-1;" displaystyle="true">
+ <mover>
+ <mo id="base1">∑</mo>
+ <mspace id="over1" height="1em" width="1em" mathbackground="red"/>
+ </mover>
+ </math>
+ <math style="font-family: limits-1;" displaystyle="true">
+ <munderover>
+ <mo id="base2">∑</mo>
+ <mspace id="under2" height="1em" width="1em" mathbackground="red"/>
+ <mspace id="over2" height="1em" width="1em" mathbackground="red"/>
+ </munderover>
+ </math>
+ </p>
+
+ <p>
+ <math style="font-family: limits-2;" displaystyle="true">
+ <munder>
+ <mo id="base3">∑</mo>
+ <mspace id="under3" height="1em" width="1em" mathbackground="red"/>
+ </munder>
+ </math>
+ <math style="font-family: limits-2;" displaystyle="true">
+ <munderover>
+ <mo id="base4">∑</mo>
+ <mspace id="under4" height="1em" width="1em" mathbackground="red"/>
+ <mspace id="over4" height="1em" width="1em" mathbackground="red"/>
+ </munderover>
+ </math>
+ </p>
+
+ <p>
+ <math style="font-family: limits-3;" displaystyle="true">
+ <mspace id="ref3" height="1em" width="1em" mathbackground="green"/>
+ </math>
+ <math style="font-family: limits-3;" displaystyle="true">
+ <mover>
+ <mo id="base5">∑</mo>
+ <mspace id="over5" height="1em" width="1em" mathbackground="red"/>
+ </mover>
+ </math>
+ <math style="font-family: limits-3;" displaystyle="true">
+ <munderover>
+ <mo id="base6">∑</mo>
+ <mspace id="under6" height="1em" width="1em" mathbackground="red"/>
+ <mspace id="over6" height="1em" width="1em" mathbackground="red"/>
+ </munderover>
+ </math>
+ </p>
+
+ <p>
+ <math style="font-family: limits-4;" displaystyle="true">
+ <mspace id="ref4" height="1em" width="1em" mathbackground="green"/>
+ </math>
+ <math style="font-family: limits-4;" displaystyle="true">
+ <munder>
+ <mo id="base7">∑</mo>
+ <mspace id="under7" height="1em" width="1em" mathbackground="red"/>
+ </munder>
+ </math>
+ <math style="font-family: limits-4;" displaystyle="true">
+ <munderover>
+ <mo id="base8">∑</mo>
+ <mspace id="under8" height="1em" width="1em" mathbackground="red"/>
+ <mspace id="over8" height="1em" width="1em" mathbackground="red"/>
+ </munderover>
+ </math>
+ </p>
+
+ <p>
+ <math style="font-family: limits-5;" displaystyle="true">
+ <mspace id="ref5" height="1em" width="1em" mathbackground="green"/>
+ </math>
+ <math style="font-family: limits-5;" displaystyle="true">
+ <mover>
+ <mspace id="base9" height="2em" width="2em" mathbackground="blue"/>
+ <mo id="over9" stretchy="false">~</mo>
+ </mover>
+ </math>
+ <math style="font-family: limits-5;" displaystyle="true">
+ <munderover>
+ <mspace id="base10" height="2em" width="2em" mathbackground="blue"/>
+ <mspace id="under10" height="1em" width="1em" mathbackground="red"/>
+ <mo id="over10" stretchy="false">~</mo>
+ </munderover>
+ </math>
+ </p>
+
+ </body>
+</html>
diff --git a/layout/mathml/tests/test_opentype-radical.html b/layout/mathml/tests/test_opentype-radical.html
new file mode 100644
index 000000000..b073eb358
--- /dev/null
+++ b/layout/mathml/tests/test_opentype-radical.html
@@ -0,0 +1,196 @@
+<!doctype html>
+<html>
+ <head>
+ <title>Open Type MATH - radical</title>
+ <script type="application/javascript"
+ src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script type="application/javascript"
+ src="/tests/SimpleTest/EventUtils.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+ <meta charset="utf-8"/>
+ <style type="text/css">
+ math {
+ font-size: 10px;
+ }
+ @font-face {
+ font-family: radical-1;
+ src: url(/tests/fonts/math/radical-1.otf);
+ }
+ @font-face {
+ font-family: radical-2;
+ src: url(/tests/fonts/math/radical-2.otf);
+ }
+ @font-face {
+ font-family: radical-3;
+ src: url(/tests/fonts/math/radical-3.otf);
+ }
+ @font-face {
+ font-family: radical-4;
+ src: url(/tests/fonts/math/radical-4.otf);
+ }
+ @font-face {
+ font-family: radical-5;
+ src: url(/tests/fonts/math/radical-5.otf);
+ }
+ @font-face {
+ font-family: radical-6;
+ src: url(/tests/fonts/math/radical-6.otf);
+ }
+ @font-face {
+ font-family: radical-7;
+ src: url(/tests/fonts/math/radical-7.otf);
+ }
+ </style>
+ <script type="text/javascript">
+ SimpleTest.waitForExplicitFinish();
+
+ var epsilon = 5;
+ function almostEqual(x, y) { return Math.abs(x - y) < epsilon; }
+
+ function getBox(aId) {
+ return document.getElementById(aId).getBoundingClientRect();
+ }
+
+ function doTest() {
+ ok(almostEqual(getBox("inner1").top -
+ getBox("outer1").top, 5*10) &&
+ almostEqual(getBox("inner2").top -
+ getBox("outer2").top, 5*10) &&
+ almostEqual(getBox("inner3").top -
+ getBox("outer3").top, 5*10),
+ "Bad RadicalRuleThickness");
+
+ ok(almostEqual(getBox("inner4").top -
+ getBox("outer4").top, (7+1)*10) &&
+ almostEqual(getBox("inner5").top -
+ getBox("outer5").top, (7+1)*10) &&
+ almostEqual(getBox("inner6").top -
+ getBox("outer6").top, (7+1)*10),
+ "Bad RadicalExtraAscender");
+
+ ok(almostEqual(getBox("inner7").top -
+ getBox("outer7").top, (3+1)*10) &&
+ almostEqual(getBox("inner7").top -
+ getBox("outer8").top, (3+1)*10) &&
+ almostEqual(getBox("inner8").top -
+ getBox("outer9").top, (3+1)*10),
+ "Bad RadicalVerticalGap");
+
+ ok(almostEqual(getBox("inner10").top -
+ getBox("outer10").top, (9+1)*10) &&
+ almostEqual(getBox("inner11").top -
+ getBox("outer11").top, (9+1)*10) &&
+ almostEqual(getBox("inner12").top -
+ getBox("outer12").top, (9+1)*10),
+ "Bad RadicalDisplayStyleVerticalGap");
+
+ ok(almostEqual(getBox("base5").bottom - getBox("index5").bottom,
+ (getBox("base5").bottom - getBox("root5").top) * .25),
+ "Bad RadicalDegreeBottomRaisePercent")
+
+ ok(almostEqual(getBox("index6").left - getBox("root6").left, 10 * 5),
+ "Bad RadicalKernBeforeDegree")
+
+ ok(almostEqual(getBox("base7").left -
+ getBox("index7").right, 10 * (7+1)),
+ "Bad RadicalKernAfterDegree")
+
+ SimpleTest.finish();
+ }
+ </script>
+ </head>
+ <body onload="doTest()">
+
+ <a target="_blank"
+ href="https://bugzilla.mozilla.org/show_bug.cgi?id=961365">
+ Mozilla Bug 961365
+ </a>
+
+ <p id="display"></p>
+
+ <p>
+ <math style="font-family: radical-1;">
+ <msqrt id="outer1" mathbackground="green">
+ <mspace id="inner1" width="1em" height="1em" mathbackground="red"/>
+ </msqrt>
+ <menclose id="outer2" notation="radical" mathbackground="green">
+ <mspace id="inner2" width="1em" height="1em" mathbackground="red"/>
+ </menclose>
+ <mroot id="outer3" mathbackground="green">
+ <mspace id="inner3" width="1em" height="1em" mathbackground="red"/>
+ <mspace/>
+ </mroot>
+ </math>
+ </p>
+ <p>
+ <math style="font-family: radical-2;">
+ <msqrt id="outer4" mathbackground="green">
+ <mspace id="inner4" width="1em" height="1em" mathbackground="red"/>
+ </msqrt>
+ <menclose id="outer5" notation="radical" mathbackground="green">
+ <mspace id="inner5" width="1em" height="1em" mathbackground="red"/>
+ </menclose>
+ <mroot id="outer6" mathbackground="green">
+ <mspace id="inner6" width="1em" height="1em" mathbackground="red"/>
+ <mspace/>
+ </mroot>
+ </math>
+ </p>
+ <p>
+ <math style="font-family: radical-3;">
+ <msqrt id="outer7" mathbackground="green">
+ <mspace id="inner7" width="1em" height="1em" mathbackground="red"/>
+ </msqrt>
+ <menclose id="outer8" notation="radical" mathbackground="green">
+ <mspace id="inner8" width="1em" height="1em" mathbackground="red"/>
+ </menclose>
+ <mroot id="outer9" mathbackground="green">
+ <mspace id="inner9" width="1em" height="1em" mathbackground="red"/>
+ <mspace/>
+ </mroot>
+ </math>
+ </p>
+ <p>
+ <math style="font-family: radical-4;" displaystyle="true">
+ <msqrt id="outer10" mathbackground="green">
+ <mspace id="inner10" width="1em" height="1em" mathbackground="red"/>
+ </msqrt>
+ <menclose id="outer11" notation="radical" mathbackground="green">
+ <mspace id="inner11" width="1em" height="1em" mathbackground="red"/>
+ </menclose>
+ <mroot id="outer12" mathbackground="green">
+ <mspace id="inner12" width="1em" height="1em" mathbackground="red"/>
+ <mspace/>
+ </mroot>
+ </math>
+ </p>
+
+ <p>
+ <math style="font-family: radical-5;">
+ <mroot id="root5" mathbackground="green">
+ <mspace id="base5" width="1em" height="10em" mathbackground="red"/>
+ <mspace id="index5" width="1em" height="1em" mathbackground="blue"/>
+ </mroot>
+ </math>
+ </p>
+
+ <p>
+ <math style="font-family: radical-6;">
+ <mroot id="root6" mathbackground="green">
+ <mspace id="base6" width="1em" height="10em" mathbackground="red"/>
+ <mspace id="index6" width="1em" height="1em" mathbackground="blue"/>
+ </mroot>
+ </math>
+ </p>
+
+ <p>
+ <math style="font-family: radical-7;">
+ <mroot id="root7" mathbackground="green">
+ <mspace id="base7" width="1em" height="10em" mathbackground="red"/>
+ <mspace id="index7" width="1em" height="1em" mathbackground="blue"/>
+ </mroot>
+ </math>
+ </p>
+
+ </body>
+</html>
diff --git a/layout/mathml/tests/test_opentype-scripts.html b/layout/mathml/tests/test_opentype-scripts.html
new file mode 100644
index 000000000..7ad0e90ab
--- /dev/null
+++ b/layout/mathml/tests/test_opentype-scripts.html
@@ -0,0 +1,292 @@
+<!doctype html>
+<html>
+ <head>
+ <title>Open Type MATH - scripts</title>
+ <script type="application/javascript"
+ src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script type="application/javascript"
+ src="/tests/SimpleTest/EventUtils.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+ <meta charset="utf-8"/>
+ <style type="text/css">
+ math, mspace {
+ font-size: 10px;
+ }
+ @font-face {
+ font-family: scripts-1;
+ src: url(/tests/fonts/math/scripts-1.otf);
+ }
+ @font-face {
+ font-family: scripts-2;
+ src: url(/tests/fonts/math/scripts-2.otf);
+ }
+ @font-face {
+ font-family: scripts-3;
+ src: url(/tests/fonts/math/scripts-3.otf);
+ }
+ @font-face {
+ font-family: scripts-4;
+ src: url(/tests/fonts/math/scripts-4.otf);
+ }
+ @font-face {
+ font-family: scripts-5;
+ src: url(/tests/fonts/math/scripts-5.otf);
+ }
+ @font-face {
+ font-family: scripts-6;
+ src: url(/tests/fonts/math/scripts-6.otf);
+ }
+ @font-face {
+ font-family: scripts-7;
+ src: url(/tests/fonts/math/scripts-7.otf);
+ }
+ @font-face {
+ font-family: scripts-8;
+ src: url(/tests/fonts/math/scripts-8.otf);
+ }
+ @font-face {
+ font-family: scripts-9;
+ src: url(/tests/fonts/math/scripts-9.otf);
+ }
+ </style>
+ <script type="text/javascript">
+ SimpleTest.waitForExplicitFinish();
+
+ function doTest() {
+ var epsilon = 5;
+ function almostEqual(x, y) { return Math.abs(x - y) < epsilon; }
+
+ function getBox(aId) {
+ return document.getElementById(aId).getBoundingClientRect();
+ }
+
+ ok(almostEqual(getBox("ref1").left - getBox("sub1").right, 3*10) &&
+ almostEqual(getBox("ref2").left - getBox("sup2").right, 3*10) &&
+ almostEqual(getBox("sup32").left - getBox("sup31").right, 3*10) &&
+ almostEqual(getBox("ref3").left - getBox("sup32").right, 3*10),
+ "SpaceAfterScript");
+
+ ok(almostEqual(getBox("ref4").bottom -
+ getBox("sup41").bottom, 7 * 10) &&
+ almostEqual(getBox("ref4").bottom -
+ getBox("sup42").bottom, 7 * 10) &&
+ almostEqual(getBox("ref4").bottom -
+ getBox("sup43").bottom, 7 * 10) &&
+ almostEqual(getBox("ref4").bottom -
+ getBox("sup44").bottom, 7 * 10),
+ "Bad SuperscriptShiftUp")
+ ok(almostEqual(getBox("ref5").bottom -
+ getBox("sup51").bottom, 5 * 10) &&
+ almostEqual(getBox("ref5").bottom -
+ getBox("sup52").bottom, 5 * 10) &&
+ almostEqual(getBox("ref5").bottom -
+ getBox("sup53").bottom, 5 * 10) &&
+ almostEqual(getBox("ref5").bottom -
+ getBox("sup54").bottom, 5 * 10),
+ "Bad SuperscriptShiftUpCramped")
+
+ ok(almostEqual(getBox("ref6").bottom -
+ getBox("sub61").bottom, -6 * 10) &&
+ almostEqual(getBox("ref6").bottom -
+ getBox("sub62").bottom, -6 * 10) &&
+ almostEqual(getBox("ref6").bottom -
+ getBox("sub63").bottom, -6 * 10) &&
+ almostEqual(getBox("ref6").bottom -
+ getBox("sub64").bottom, -6 * 10),
+ "Bad SubscriptShiftDown")
+
+ ok(almostEqual(getBox("sub7").top -
+ getBox("sup7").bottom, 11 * 10),
+ "Bad SubSuperscriptGapMin");
+
+ ok(almostEqual(getBox("sub8").top -
+ getBox("sup8").bottom, 11 * 10) &&
+ almostEqual(getBox("ref8").bottom -
+ getBox("sup8").bottom, 3 * 10),
+ "Bad SuperscriptBottomMaxWithSubscript");
+
+ ok(almostEqual(getBox("ref9").top, getBox("sub9").top),
+ "Bad SubscriptTopMax");
+
+ ok(almostEqual(getBox("ref10").bottom - getBox("sup10").bottom, 9 * 10),
+ "Bad SuperscriptBottomMin");
+
+ ok(almostEqual(getBox("base11").bottom + 3 * 10,
+ getBox("sub11").top),
+ "Bad SubscriptBaselineDrop");
+
+ ok(almostEqual(getBox("base11").top + 5 * 10,
+ getBox("sup11").bottom),
+ "Bad SuperscriptBaselineDrop");
+
+ SimpleTest.finish();
+ }
+ </script>
+ </head>
+ <body onload="doTest()">
+
+ <a target="_blank"
+ href="https://bugzilla.mozilla.org/show_bug.cgi?id=961365">
+ Mozilla Bug 961365
+ </a>
+
+ <p id="display"></p>
+
+ <p>
+ <math style="font-family: scripts-1;">
+ <msub>
+ <mspace height="2em" width="2em" mathbackground="blue"/>
+ <mspace id="sub1" height="1em" width="1em" mathbackground="red"/>
+ </msub>
+ <mspace id="ref1" height="1em" width="1em" mathbackground="green"/>
+ </math>
+ <math style="font-family: scripts-1;">
+ <msup>
+ <mspace height="2em" width="2em" mathbackground="blue"/>
+ <mspace id="sup2" height="1em" width="1em" mathbackground="red"/>
+ </msup>
+ <mspace id="ref2" height="1em" width="1em" mathbackground="green"/>
+ </math>
+ <math style="font-family: scripts-1;">
+ <mmultiscripts>
+ <mspace height="2em" width="2em" mathbackground="blue"/>
+ <none/>
+ <mspace id="sup31" height="1em" width="1em" mathbackground="red"/>
+ <none/>
+ <mspace id="sup32" height="1em" width="1em" mathbackground="red"/>
+ </mmultiscripts>
+ <mspace id="ref3" height="1em" width="1em" mathbackground="green"/>
+ </math>
+ </p>
+
+ <p>
+ <math style="font-family: scripts-2;">
+ <mspace id="ref4" height="1em" width="1em" mathbackground="green"/>
+ <msup>
+ <mspace height="2em" width="2em" mathbackground="blue"/>
+ <mspace id="sup41" height="1em" width="1em" mathbackground="red"/>
+ </msup>
+ <msubsup>
+ <mspace height="2em" width="2em" mathbackground="blue"/>
+ <mspace height="1em" width="1em" mathbackground="red"/>
+ <mspace id="sup42" height="1em" width="1em" mathbackground="red"/>
+ </msubsup>
+ <mmultiscripts>
+ <mspace height="2em" width="2em" mathbackground="blue"/>
+ <none/>
+ <mspace id="sup43" height="1em" width="1em" mathbackground="red"/>
+ <none/>
+ <mspace id="sup44" height="1em" width="1em" mathbackground="red"/>
+ </mmultiscripts>
+ </math>
+ </p>
+
+ <p>
+ <math style="font-family: scripts-3;">
+ <msqrt>
+ <mspace id="ref5" height="1em" width="1em" mathbackground="green"/>
+ <msup>
+ <mspace height="2em" width="2em" mathbackground="blue"/>
+ <mspace id="sup51" height="1em" width="1em" mathbackground="red"/>
+ </msup>
+ <msubsup>
+ <mspace height="2em" width="2em" mathbackground="blue"/>
+ <mspace height="1em" width="1em" mathbackground="red"/>
+ <mspace id="sup52" height="1em" width="1em" mathbackground="red"/>
+ </msubsup>
+ <mmultiscripts>
+ <mspace height="2em" width="2em" mathbackground="blue"/>
+ <mspace height="1em" width="1em" mathbackground="red"/>
+ <mspace id="sup53" height="1em" width="1em" mathbackground="red"/>
+ <mspace height="1em" width="1em" mathbackground="red"/>
+ <mspace id="sup54" height="1em" width="1em" mathbackground="red"/>
+ </mmultiscripts>
+ </msqrt>
+ </math>
+ </p>
+
+ <p>
+ <math style="font-family: scripts-4;">
+ <mspace id="ref6" height="1em" width="1em" mathbackground="green"/>
+ <msub>
+ <mspace height="2em" width="2em" mathbackground="blue"/>
+ <mspace id="sub61" height="1em" width="1em" mathbackground="red"/>
+ </msub>
+ <msubsup>
+ <mspace height="2em" width="2em" mathbackground="blue"/>
+ <mspace id="sub62" height="1em" width="1em" mathbackground="red"/>
+ <mspace height="1em" width="1em" mathbackground="red"/>
+ </msubsup>
+ <mmultiscripts>
+ <mspace height="2em" width="2em" mathbackground="blue"/>
+ <mspace id="sub63" height="1em" width="1em" mathbackground="red"/>
+ <mspace height="1em" width="1em" mathbackground="red"/>
+ <mspace id="sub64" height="1em" width="1em" mathbackground="red"/>
+ <mspace height="1em" width="1em" mathbackground="red"/>
+ </mmultiscripts>
+ </math>
+ </p>
+
+ <p>
+ <math style="font-family: scripts-5;">
+ <msubsup>
+ <mspace height="2em" width="2em" mathbackground="blue"/>
+ <mspace id="sub7" height="1em" width="1em" mathbackground="red"/>
+ <mspace id="sup7" height="1em" width="1em" mathbackground="red"/>
+ </msubsup>
+ </math>
+ </p>
+
+ <p>
+ <math style="font-family: scripts-6;">
+ <mspace id="ref8" height="1em" width="1em" mathbackground="green"/>
+ <msubsup>
+ <mspace height="2em" width="2em" mathbackground="blue"/>
+ <mspace id="sub8" height="1em" width="1em" mathbackground="red"/>
+ <mspace id="sup8" height="1em" width="1em" mathbackground="red"/>
+ </msubsup>
+ </math>
+ </p>
+
+ <p>
+ <math style="font-family: scripts-7;">
+ <msub>
+ <mspace height="2em" width="2em" mathbackground="blue"/>
+ <mspace id="ref9" height="5em"
+ width="1em" mathbackground="green"/>
+ </msub>
+ <msub>
+ <mspace height="2em" width="2em" mathbackground="blue"/>
+ <mspace id="sub9" height="9em"
+ width="1em" mathbackground="red"/>
+ </msub>
+ </math>
+ </p>
+
+ <p>
+ <math style="font-family: scripts-8;">
+ <mspace id="ref10" height="1em"
+ width="1em" mathbackground="green"/>
+ <msup>
+ <mspace id="base10" height="2em"
+ width="2em" mathbackground="blue"/>
+ <mspace id="sup10" height="1em"
+ width="1em" mathbackground="red"/>
+ </msup>
+ </math>
+ </p>
+
+ <p>
+ <math style="font-family: scripts-9;">
+ <msubsup>
+ <mspace id="base11" height="10em" depth="10em"
+ width="1em" mathbackground="red"/>
+ <mspace id="sub11"
+ height="0em" depth="1em" width="1em" mathbackground="green"/>
+ <mspace id="sup11"
+ height="1em" depth="0em" width="1em" mathbackground="blue"/>
+ </msubsup>
+ </math>
+ </p>
+ </body>
+</html>
diff --git a/layout/mathml/tests/test_opentype-stack.html b/layout/mathml/tests/test_opentype-stack.html
new file mode 100644
index 000000000..0cbaabb97
--- /dev/null
+++ b/layout/mathml/tests/test_opentype-stack.html
@@ -0,0 +1,137 @@
+<!doctype html>
+<html>
+ <head>
+ <title>Open Type MATH - stack</title>
+ <script type="application/javascript"
+ src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script type="application/javascript"
+ src="/tests/SimpleTest/EventUtils.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+ <meta charset="utf-8"/>
+ <style type="text/css">
+ math {
+ font-size: 10px;
+ }
+ @font-face {
+ font-family: stack-1;
+ src: url(/tests/fonts/math/stack-1.otf);
+ }
+ @font-face {
+ font-family: stack-2;
+ src: url(/tests/fonts/math/stack-2.otf);
+ }
+ @font-face {
+ font-family: stack-3;
+ src: url(/tests/fonts/math/stack-3.otf);
+ }
+ @font-face {
+ font-family: stack-4;
+ src: url(/tests/fonts/math/stack-4.otf);
+ }
+ @font-face {
+ font-family: stack-5;
+ src: url(/tests/fonts/math/stack-5.otf);
+ }
+ @font-face {
+ font-family: stack-6;
+ src: url(/tests/fonts/math/stack-6.otf);
+ }
+ </style>
+ <script type="text/javascript">
+ SimpleTest.waitForExplicitFinish();
+
+ function doTest() {
+ var epsilon = 5;
+ function almostEqual(x, y) { return Math.abs(x - y) < epsilon; }
+
+ function getBox(aId) {
+ return document.getElementById(aId).getBoundingClientRect();
+ }
+
+ /* inline style */
+ var ref = getBox("ref").height;
+
+ ok(almostEqual(getBox("d1").top - getBox("n1").bottom, ref * 20),
+ "Bad StackGapMin");
+
+ ok(almostEqual(getBox("ref").top - getBox("n2").top, ref*3),
+ "Bad StackTopShiftMin");
+
+ ok(almostEqual(getBox("d3").bottom - getBox("ref").bottom, ref*3),
+ "Bad StackBottomShiftDown");
+
+ /* display style */
+ ref = getBox("ref").height;
+
+ ok(almostEqual(getBox("d4").top - getBox("n4").bottom, ref * 20),
+ "Bad StackGapDisplayStyleMin");
+
+ ok(almostEqual(getBox("dref").top - getBox("n5").top, ref*3),
+ "Bad StackTopDisplayStyleShiftMin");
+
+ ok(almostEqual(getBox("d6").bottom - getBox("dref").bottom, ref*3),
+ "Bad StackDisplayStyleBottomShiftDown");
+
+ SimpleTest.finish();
+ }
+ </script>
+ </head>
+ <body onload="doTest()">
+
+ <a target="_blank"
+ href="https://bugzilla.mozilla.org/show_bug.cgi?id=961365">
+ Mozilla Bug 961365
+ </a>
+
+ <p id="display"></p>
+
+ <p>
+ <math>
+ <mspace id="ref" height="1em" width="1em" mathbackground="green"/>
+ </math>
+ <math style="font-family: stack-1;">
+ <mfrac linethickness="0">
+ <mspace id="n1" height="1em" width="1em" mathbackground="red"/>
+ <mspace id="d1" height="1em" width="1em" mathbackground="red"/>
+ </mfrac>
+ </math>
+ <math style="font-family: stack-2;">
+ <mfrac linethickness="0">
+ <mspace id="n2" height="1em" width="1em" mathbackground="red"/>
+ <mspace id="d2" height="1em" width="1em" mathbackground="red"/>
+ </mfrac>
+ </math>
+ <math style="font-family: stack-3;">
+ <mfrac linethickness="0">
+ <mspace id="n3" height="1em" width="1em" mathbackground="red"/>
+ <mspace id="d3" height="1em" width="1em" mathbackground="red"/>
+ </mfrac>
+ </math>
+ </p>
+
+ <p>
+ <math displaystyle="true">
+ <mspace id="dref" height="1em" width="1em" mathbackground="green"/>
+ </math>
+ <math displaystyle="true" style="font-family: stack-4;">
+ <mfrac linethickness="0">
+ <mspace id="n4" height="1em" width="1em" mathbackground="red"/>
+ <mspace id="d4" height="1em" width="1em" mathbackground="red"/>
+ </mfrac>
+ </math>
+ <math displaystyle="true" style="font-family: stack-5;">
+ <mfrac linethickness="0">
+ <mspace id="n5" height="1em" width="1em" mathbackground="red"/>
+ <mspace id="d5" height="1em" width="1em" mathbackground="red"/>
+ </mfrac>
+ </math>
+ <math displaystyle="true" style="font-family: stack-6;">
+ <mfrac linethickness="0">
+ <mspace id="n6" height="1em" width="1em" mathbackground="red"/>
+ <mspace id="d6" height="1em" width="1em" mathbackground="red"/>
+ </mfrac>
+ </math>
+ </p>
+
+ </body>
+</html>