summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/infrastructure/assumptions
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/infrastructure/assumptions')
-rw-r--r--testing/web-platform/tests/infrastructure/assumptions/README.md1
-rw-r--r--testing/web-platform/tests/infrastructure/assumptions/ahem-notref.html316
-rw-r--r--testing/web-platform/tests/infrastructure/assumptions/ahem-ref.html320
-rw-r--r--testing/web-platform/tests/infrastructure/assumptions/ahem.html316
-rw-r--r--testing/web-platform/tests/infrastructure/assumptions/allowed-to-play.html23
-rw-r--r--testing/web-platform/tests/infrastructure/assumptions/blank.html2
-rw-r--r--testing/web-platform/tests/infrastructure/assumptions/canvas-background-ref.html8
-rw-r--r--testing/web-platform/tests/infrastructure/assumptions/canvas-background.html4
-rw-r--r--testing/web-platform/tests/infrastructure/assumptions/cookie.html18
-rw-r--r--testing/web-platform/tests/infrastructure/assumptions/document-fonts-ready.html32
-rw-r--r--testing/web-platform/tests/infrastructure/assumptions/html-elements.html133
-rw-r--r--testing/web-platform/tests/infrastructure/assumptions/initial-color-ref.html12
-rw-r--r--testing/web-platform/tests/infrastructure/assumptions/initial-color.html9
-rw-r--r--testing/web-platform/tests/infrastructure/assumptions/medium-font-size-ref.html8
-rw-r--r--testing/web-platform/tests/infrastructure/assumptions/medium-font-size.html9
-rw-r--r--testing/web-platform/tests/infrastructure/assumptions/min-font-size-ref.html8
-rw-r--r--testing/web-platform/tests/infrastructure/assumptions/min-font-size.html9
-rw-r--r--testing/web-platform/tests/infrastructure/assumptions/non-local-ports.sub.window.js111
-rw-r--r--testing/web-platform/tests/infrastructure/assumptions/non-secure-context.any.js9
-rw-r--r--testing/web-platform/tests/infrastructure/assumptions/resources/fetch-and-post-result.html12
-rw-r--r--testing/web-platform/tests/infrastructure/assumptions/tools/ahem-generate-table.py127
21 files changed, 1487 insertions, 0 deletions
diff --git a/testing/web-platform/tests/infrastructure/assumptions/README.md b/testing/web-platform/tests/infrastructure/assumptions/README.md
new file mode 100644
index 0000000000..51902b8899
--- /dev/null
+++ b/testing/web-platform/tests/infrastructure/assumptions/README.md
@@ -0,0 +1 @@
+To update the generated tests, run `wpt update-built --include infrastructure`.
diff --git a/testing/web-platform/tests/infrastructure/assumptions/ahem-notref.html b/testing/web-platform/tests/infrastructure/assumptions/ahem-notref.html
new file mode 100644
index 0000000000..51767c26ea
--- /dev/null
+++ b/testing/web-platform/tests/infrastructure/assumptions/ahem-notref.html
@@ -0,0 +1,316 @@
+<!doctype html>
+<title>Ahem checker</title>
+<style>
+* {
+ padding: 0;
+ margin: 0;
+ border: none;
+}
+td {
+ width: 34px;
+}
+table {
+ font-size: 15px;
+ line-height: 1;
+ border-collapse: separate;
+ border-spacing: 1px;
+ table-layout: fixed;
+}
+</style>
+<table>
+ <tr>
+ <td>&#x0020;x <!-- U+0020: SPACE -->
+ <td>&#x0021;x <!-- U+0021: EXCLAMATION MARK -->
+ <td>&#x0022;x <!-- U+0022: QUOTATION MARK -->
+ <td>&#x0023;x <!-- U+0023: NUMBER SIGN -->
+ <td>&#x0024;x <!-- U+0024: DOLLAR SIGN -->
+ <td>&#x0025;x <!-- U+0025: PERCENT SIGN -->
+ <td>&#x0026;x <!-- U+0026: AMPERSAND -->
+ <td>&#x0028;x <!-- U+0028: LEFT PARENTHESIS -->
+ <td>&#x0029;x <!-- U+0029: RIGHT PARENTHESIS -->
+ <td>&#x002A;x <!-- U+002A: ASTERISK -->
+ <td>&#x002B;x <!-- U+002B: PLUS SIGN -->
+ <td>&#x002C;x <!-- U+002C: COMMA -->
+ <td>&#x002D;x <!-- U+002D: HYPHEN-MINUS -->
+ <td>&#x002E;x <!-- U+002E: FULL STOP -->
+ <td>&#x002F;x <!-- U+002F: SOLIDUS -->
+ <td>&#x0030;x <!-- U+0030: DIGIT ZERO -->
+ <td>&#x0031;x <!-- U+0031: DIGIT ONE -->
+ <tr>
+ <td>&#x0032;x <!-- U+0032: DIGIT TWO -->
+ <td>&#x0033;x <!-- U+0033: DIGIT THREE -->
+ <td>&#x0034;x <!-- U+0034: DIGIT FOUR -->
+ <td>&#x0035;x <!-- U+0035: DIGIT FIVE -->
+ <td>&#x0036;x <!-- U+0036: DIGIT SIX -->
+ <td>&#x0037;x <!-- U+0037: DIGIT SEVEN -->
+ <td>&#x0038;x <!-- U+0038: DIGIT EIGHT -->
+ <td>&#x0039;x <!-- U+0039: DIGIT NINE -->
+ <td>&#x003A;x <!-- U+003A: COLON -->
+ <td>&#x003B;x <!-- U+003B: SEMICOLON -->
+ <td>&#x003C;x <!-- U+003C: LESS-THAN SIGN -->
+ <td>&#x003D;x <!-- U+003D: EQUALS SIGN -->
+ <td>&#x003E;x <!-- U+003E: GREATER-THAN SIGN -->
+ <td>&#x003F;x <!-- U+003F: QUESTION MARK -->
+ <td>&#x0040;x <!-- U+0040: COMMERCIAL AT -->
+ <td>&#x0041;x <!-- U+0041: LATIN CAPITAL LETTER A -->
+ <td>&#x0042;x <!-- U+0042: LATIN CAPITAL LETTER B -->
+ <tr>
+ <td>&#x0043;x <!-- U+0043: LATIN CAPITAL LETTER C -->
+ <td>&#x0044;x <!-- U+0044: LATIN CAPITAL LETTER D -->
+ <td>&#x0045;x <!-- U+0045: LATIN CAPITAL LETTER E -->
+ <td>&#x0046;x <!-- U+0046: LATIN CAPITAL LETTER F -->
+ <td>&#x0047;x <!-- U+0047: LATIN CAPITAL LETTER G -->
+ <td>&#x0048;x <!-- U+0048: LATIN CAPITAL LETTER H -->
+ <td>&#x0049;x <!-- U+0049: LATIN CAPITAL LETTER I -->
+ <td>&#x004A;x <!-- U+004A: LATIN CAPITAL LETTER J -->
+ <td>&#x004B;x <!-- U+004B: LATIN CAPITAL LETTER K -->
+ <td>&#x004C;x <!-- U+004C: LATIN CAPITAL LETTER L -->
+ <td>&#x004D;x <!-- U+004D: LATIN CAPITAL LETTER M -->
+ <td>&#x004E;x <!-- U+004E: LATIN CAPITAL LETTER N -->
+ <td>&#x004F;x <!-- U+004F: LATIN CAPITAL LETTER O -->
+ <td>&#x0050;x <!-- U+0050: LATIN CAPITAL LETTER P -->
+ <td>&#x0051;x <!-- U+0051: LATIN CAPITAL LETTER Q -->
+ <td>&#x0052;x <!-- U+0052: LATIN CAPITAL LETTER R -->
+ <td>&#x0053;x <!-- U+0053: LATIN CAPITAL LETTER S -->
+ <tr>
+ <td>&#x0054;x <!-- U+0054: LATIN CAPITAL LETTER T -->
+ <td>&#x0055;x <!-- U+0055: LATIN CAPITAL LETTER U -->
+ <td>&#x0056;x <!-- U+0056: LATIN CAPITAL LETTER V -->
+ <td>&#x0057;x <!-- U+0057: LATIN CAPITAL LETTER W -->
+ <td>&#x0058;x <!-- U+0058: LATIN CAPITAL LETTER X -->
+ <td>&#x0059;x <!-- U+0059: LATIN CAPITAL LETTER Y -->
+ <td>&#x005A;x <!-- U+005A: LATIN CAPITAL LETTER Z -->
+ <td>&#x005B;x <!-- U+005B: LEFT SQUARE BRACKET -->
+ <td>&#x005C;x <!-- U+005C: REVERSE SOLIDUS -->
+ <td>&#x005D;x <!-- U+005D: RIGHT SQUARE BRACKET -->
+ <td>&#x005E;x <!-- U+005E: CIRCUMFLEX ACCENT -->
+ <td>&#x005F;x <!-- U+005F: LOW LINE -->
+ <td>&#x0060;x <!-- U+0060: GRAVE ACCENT -->
+ <td>&#x0061;x <!-- U+0061: LATIN SMALL LETTER A -->
+ <td>&#x0062;x <!-- U+0062: LATIN SMALL LETTER B -->
+ <td>&#x0063;x <!-- U+0063: LATIN SMALL LETTER C -->
+ <td>&#x0064;x <!-- U+0064: LATIN SMALL LETTER D -->
+ <tr>
+ <td>&#x0065;x <!-- U+0065: LATIN SMALL LETTER E -->
+ <td>&#x0066;x <!-- U+0066: LATIN SMALL LETTER F -->
+ <td>&#x0067;x <!-- U+0067: LATIN SMALL LETTER G -->
+ <td>&#x0068;x <!-- U+0068: LATIN SMALL LETTER H -->
+ <td>&#x0069;x <!-- U+0069: LATIN SMALL LETTER I -->
+ <td>&#x006A;x <!-- U+006A: LATIN SMALL LETTER J -->
+ <td>&#x006B;x <!-- U+006B: LATIN SMALL LETTER K -->
+ <td>&#x006C;x <!-- U+006C: LATIN SMALL LETTER L -->
+ <td>&#x006D;x <!-- U+006D: LATIN SMALL LETTER M -->
+ <td>&#x006E;x <!-- U+006E: LATIN SMALL LETTER N -->
+ <td>&#x006F;x <!-- U+006F: LATIN SMALL LETTER O -->
+ <td>&#x0070;x <!-- U+0070: LATIN SMALL LETTER P -->
+ <td>&#x0071;x <!-- U+0071: LATIN SMALL LETTER Q -->
+ <td>&#x0072;x <!-- U+0072: LATIN SMALL LETTER R -->
+ <td>&#x0073;x <!-- U+0073: LATIN SMALL LETTER S -->
+ <td>&#x0074;x <!-- U+0074: LATIN SMALL LETTER T -->
+ <td>&#x0075;x <!-- U+0075: LATIN SMALL LETTER U -->
+ <tr>
+ <td>&#x0076;x <!-- U+0076: LATIN SMALL LETTER V -->
+ <td>&#x0077;x <!-- U+0077: LATIN SMALL LETTER W -->
+ <td>&#x0078;x <!-- U+0078: LATIN SMALL LETTER X -->
+ <td>&#x0079;x <!-- U+0079: LATIN SMALL LETTER Y -->
+ <td>&#x007A;x <!-- U+007A: LATIN SMALL LETTER Z -->
+ <td>&#x007B;x <!-- U+007B: LEFT CURLY BRACKET -->
+ <td>&#x007C;x <!-- U+007C: VERTICAL LINE -->
+ <td>&#x007D;x <!-- U+007D: RIGHT CURLY BRACKET -->
+ <td>&#x007E;x <!-- U+007E: TILDE -->
+ <td>&#x00A0;x <!-- U+00A0: NO-BREAK SPACE -->
+ <td>&#x00A1;x <!-- U+00A1: INVERTED EXCLAMATION MARK -->
+ <td>&#x00A2;x <!-- U+00A2: CENT SIGN -->
+ <td>&#x00A3;x <!-- U+00A3: POUND SIGN -->
+ <td>&#x00A4;x <!-- U+00A4: CURRENCY SIGN -->
+ <td>&#x00A5;x <!-- U+00A5: YEN SIGN -->
+ <td>&#x00A6;x <!-- U+00A6: BROKEN BAR -->
+ <td>&#x00A7;x <!-- U+00A7: SECTION SIGN -->
+ <tr>
+ <td>&#x00A8;x <!-- U+00A8: DIAERESIS -->
+ <td>&#x00A9;x <!-- U+00A9: COPYRIGHT SIGN -->
+ <td>&#x00AA;x <!-- U+00AA: FEMININE ORDINAL INDICATOR -->
+ <td>&#x00AB;x <!-- U+00AB: LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -->
+ <td>&#x00AC;x <!-- U+00AC: NOT SIGN -->
+ <td>&#x00AD;x <!-- U+00AD: SOFT HYPHEN -->
+ <td>&#x00AE;x <!-- U+00AE: REGISTERED SIGN -->
+ <td>&#x00AF;x <!-- U+00AF: MACRON -->
+ <td>&#x00B0;x <!-- U+00B0: DEGREE SIGN -->
+ <td>&#x00B1;x <!-- U+00B1: PLUS-MINUS SIGN -->
+ <td>&#x00B2;x <!-- U+00B2: SUPERSCRIPT TWO -->
+ <td>&#x00B3;x <!-- U+00B3: SUPERSCRIPT THREE -->
+ <td>&#x00B4;x <!-- U+00B4: ACUTE ACCENT -->
+ <td>&#x00B5;x <!-- U+00B5: MICRO SIGN -->
+ <td>&#x00B6;x <!-- U+00B6: PILCROW SIGN -->
+ <td>&#x00B7;x <!-- U+00B7: MIDDLE DOT -->
+ <td>&#x00B8;x <!-- U+00B8: CEDILLA -->
+ <tr>
+ <td>&#x00B9;x <!-- U+00B9: SUPERSCRIPT ONE -->
+ <td>&#x00BA;x <!-- U+00BA: MASCULINE ORDINAL INDICATOR -->
+ <td>&#x00BB;x <!-- U+00BB: RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -->
+ <td>&#x00BC;x <!-- U+00BC: VULGAR FRACTION ONE QUARTER -->
+ <td>&#x00BD;x <!-- U+00BD: VULGAR FRACTION ONE HALF -->
+ <td>&#x00BE;x <!-- U+00BE: VULGAR FRACTION THREE QUARTERS -->
+ <td>&#x00BF;x <!-- U+00BF: INVERTED QUESTION MARK -->
+ <td>&#x00C0;x <!-- U+00C0: LATIN CAPITAL LETTER A WITH GRAVE -->
+ <td>&#x00C1;x <!-- U+00C1: LATIN CAPITAL LETTER A WITH ACUTE -->
+ <td>&#x00C2;x <!-- U+00C2: LATIN CAPITAL LETTER A WITH CIRCUMFLEX -->
+ <td>&#x00C3;x <!-- U+00C3: LATIN CAPITAL LETTER A WITH TILDE -->
+ <td>&#x00C4;x <!-- U+00C4: LATIN CAPITAL LETTER A WITH DIAERESIS -->
+ <td>&#x00C5;x <!-- U+00C5: LATIN CAPITAL LETTER A WITH RING ABOVE -->
+ <td>&#x00C6;x <!-- U+00C6: LATIN CAPITAL LETTER AE -->
+ <td>&#x00C7;x <!-- U+00C7: LATIN CAPITAL LETTER C WITH CEDILLA -->
+ <td>&#x00C8;x <!-- U+00C8: LATIN CAPITAL LETTER E WITH GRAVE -->
+ <td>&#x00C9;x <!-- U+00C9: LATIN CAPITAL LETTER E WITH ACUTE -->
+ <tr>
+ <td>&#x00CA;x <!-- U+00CA: LATIN CAPITAL LETTER E WITH CIRCUMFLEX -->
+ <td>&#x00CB;x <!-- U+00CB: LATIN CAPITAL LETTER E WITH DIAERESIS -->
+ <td>&#x00CC;x <!-- U+00CC: LATIN CAPITAL LETTER I WITH GRAVE -->
+ <td>&#x00CD;x <!-- U+00CD: LATIN CAPITAL LETTER I WITH ACUTE -->
+ <td>&#x00CE;x <!-- U+00CE: LATIN CAPITAL LETTER I WITH CIRCUMFLEX -->
+ <td>&#x00CF;x <!-- U+00CF: LATIN CAPITAL LETTER I WITH DIAERESIS -->
+ <td>&#x00D0;x <!-- U+00D0: LATIN CAPITAL LETTER ETH -->
+ <td>&#x00D1;x <!-- U+00D1: LATIN CAPITAL LETTER N WITH TILDE -->
+ <td>&#x00D2;x <!-- U+00D2: LATIN CAPITAL LETTER O WITH GRAVE -->
+ <td>&#x00D3;x <!-- U+00D3: LATIN CAPITAL LETTER O WITH ACUTE -->
+ <td>&#x00D4;x <!-- U+00D4: LATIN CAPITAL LETTER O WITH CIRCUMFLEX -->
+ <td>&#x00D5;x <!-- U+00D5: LATIN CAPITAL LETTER O WITH TILDE -->
+ <td>&#x00D6;x <!-- U+00D6: LATIN CAPITAL LETTER O WITH DIAERESIS -->
+ <td>&#x00D7;x <!-- U+00D7: MULTIPLICATION SIGN -->
+ <td>&#x00D8;x <!-- U+00D8: LATIN CAPITAL LETTER O WITH STROKE -->
+ <td>&#x00D9;x <!-- U+00D9: LATIN CAPITAL LETTER U WITH GRAVE -->
+ <td>&#x00DA;x <!-- U+00DA: LATIN CAPITAL LETTER U WITH ACUTE -->
+ <tr>
+ <td>&#x00DB;x <!-- U+00DB: LATIN CAPITAL LETTER U WITH CIRCUMFLEX -->
+ <td>&#x00DC;x <!-- U+00DC: LATIN CAPITAL LETTER U WITH DIAERESIS -->
+ <td>&#x00DD;x <!-- U+00DD: LATIN CAPITAL LETTER Y WITH ACUTE -->
+ <td>&#x00DE;x <!-- U+00DE: LATIN CAPITAL LETTER THORN -->
+ <td>&#x00DF;x <!-- U+00DF: LATIN SMALL LETTER SHARP S -->
+ <td>&#x00E0;x <!-- U+00E0: LATIN SMALL LETTER A WITH GRAVE -->
+ <td>&#x00E1;x <!-- U+00E1: LATIN SMALL LETTER A WITH ACUTE -->
+ <td>&#x00E2;x <!-- U+00E2: LATIN SMALL LETTER A WITH CIRCUMFLEX -->
+ <td>&#x00E3;x <!-- U+00E3: LATIN SMALL LETTER A WITH TILDE -->
+ <td>&#x00E4;x <!-- U+00E4: LATIN SMALL LETTER A WITH DIAERESIS -->
+ <td>&#x00E5;x <!-- U+00E5: LATIN SMALL LETTER A WITH RING ABOVE -->
+ <td>&#x00E6;x <!-- U+00E6: LATIN SMALL LETTER AE -->
+ <td>&#x00E7;x <!-- U+00E7: LATIN SMALL LETTER C WITH CEDILLA -->
+ <td>&#x00E8;x <!-- U+00E8: LATIN SMALL LETTER E WITH GRAVE -->
+ <td>&#x00E9;x <!-- U+00E9: LATIN SMALL LETTER E WITH ACUTE -->
+ <td>&#x00EA;x <!-- U+00EA: LATIN SMALL LETTER E WITH CIRCUMFLEX -->
+ <td>&#x00EB;x <!-- U+00EB: LATIN SMALL LETTER E WITH DIAERESIS -->
+ <tr>
+ <td>&#x00EC;x <!-- U+00EC: LATIN SMALL LETTER I WITH GRAVE -->
+ <td>&#x00ED;x <!-- U+00ED: LATIN SMALL LETTER I WITH ACUTE -->
+ <td>&#x00EE;x <!-- U+00EE: LATIN SMALL LETTER I WITH CIRCUMFLEX -->
+ <td>&#x00EF;x <!-- U+00EF: LATIN SMALL LETTER I WITH DIAERESIS -->
+ <td>&#x00F0;x <!-- U+00F0: LATIN SMALL LETTER ETH -->
+ <td>&#x00F1;x <!-- U+00F1: LATIN SMALL LETTER N WITH TILDE -->
+ <td>&#x00F2;x <!-- U+00F2: LATIN SMALL LETTER O WITH GRAVE -->
+ <td>&#x00F3;x <!-- U+00F3: LATIN SMALL LETTER O WITH ACUTE -->
+ <td>&#x00F4;x <!-- U+00F4: LATIN SMALL LETTER O WITH CIRCUMFLEX -->
+ <td>&#x00F5;x <!-- U+00F5: LATIN SMALL LETTER O WITH TILDE -->
+ <td>&#x00F6;x <!-- U+00F6: LATIN SMALL LETTER O WITH DIAERESIS -->
+ <td>&#x00F7;x <!-- U+00F7: DIVISION SIGN -->
+ <td>&#x00F8;x <!-- U+00F8: LATIN SMALL LETTER O WITH STROKE -->
+ <td>&#x00F9;x <!-- U+00F9: LATIN SMALL LETTER U WITH GRAVE -->
+ <td>&#x00FA;x <!-- U+00FA: LATIN SMALL LETTER U WITH ACUTE -->
+ <td>&#x00FB;x <!-- U+00FB: LATIN SMALL LETTER U WITH CIRCUMFLEX -->
+ <td>&#x00FC;x <!-- U+00FC: LATIN SMALL LETTER U WITH DIAERESIS -->
+ <tr>
+ <td>&#x00FD;x <!-- U+00FD: LATIN SMALL LETTER Y WITH ACUTE -->
+ <td>&#x00FE;x <!-- U+00FE: LATIN SMALL LETTER THORN -->
+ <td>&#x00FF;x <!-- U+00FF: LATIN SMALL LETTER Y WITH DIAERESIS -->
+ <td>&#x0131;x <!-- U+0131: LATIN SMALL LETTER DOTLESS I -->
+ <td>&#x0152;x <!-- U+0152: LATIN CAPITAL LIGATURE OE -->
+ <td>&#x0153;x <!-- U+0153: LATIN SMALL LIGATURE OE -->
+ <td>&#x0178;x <!-- U+0178: LATIN CAPITAL LETTER Y WITH DIAERESIS -->
+ <td>&#x0192;x <!-- U+0192: LATIN SMALL LETTER F WITH HOOK -->
+ <td>&#x02C6;x <!-- U+02C6: MODIFIER LETTER CIRCUMFLEX ACCENT -->
+ <td>&#x02C7;x <!-- U+02C7: CARON -->
+ <td>&#x02C9;x <!-- U+02C9: MODIFIER LETTER MACRON -->
+ <td>&#x02D8;x <!-- U+02D8: BREVE -->
+ <td>&#x02D9;x <!-- U+02D9: DOT ABOVE -->
+ <td>&#x02DA;x <!-- U+02DA: RING ABOVE -->
+ <td>&#x02DB;x <!-- U+02DB: OGONEK -->
+ <td>&#x02DC;x <!-- U+02DC: SMALL TILDE -->
+ <td>&#x02DD;x <!-- U+02DD: DOUBLE ACUTE ACCENT -->
+ <tr>
+ <td>&#x0394;x <!-- U+0394: GREEK CAPITAL LETTER DELTA -->
+ <td>&#x03A5;x <!-- U+03A5: GREEK CAPITAL LETTER UPSILON -->
+ <td>&#x03A7;x <!-- U+03A7: GREEK CAPITAL LETTER CHI -->
+ <td>&#x03A9;x <!-- U+03A9: GREEK CAPITAL LETTER OMEGA -->
+ <td>&#x03BC;x <!-- U+03BC: GREEK SMALL LETTER MU -->
+ <td>&#x03C0;x <!-- U+03C0: GREEK SMALL LETTER PI -->
+ <td>&#x2002;x <!-- U+2002: EN SPACE -->
+ <td>&#x2003;x <!-- U+2003: EM SPACE -->
+ <td>&#x2004;x <!-- U+2004: THREE-PER-EM SPACE -->
+ <td>&#x2005;x <!-- U+2005: FOUR-PER-EM SPACE -->
+ <td>&#x2006;x <!-- U+2006: SIX-PER-EM SPACE -->
+ <td>&#x2009;x <!-- U+2009: THIN SPACE -->
+ <td>&#x200A;x <!-- U+200A: HAIR SPACE -->
+ <td>&#x200B;x <!-- U+200B: ZERO WIDTH SPACE -->
+ <td>&#x200C;x <!-- U+200C: ZERO WIDTH NON-JOINER -->
+ <td>&#x200D;x <!-- U+200D: ZERO WIDTH JOINER -->
+ <td>&#x2010;x <!-- U+2010: HYPHEN -->
+ <tr>
+ <td>&#x2013;x <!-- U+2013: EN DASH -->
+ <td>&#x2014;x <!-- U+2014: EM DASH -->
+ <td>&#x2018;x <!-- U+2018: LEFT SINGLE QUOTATION MARK -->
+ <td>&#x2019;x <!-- U+2019: RIGHT SINGLE QUOTATION MARK -->
+ <td>&#x201A;x <!-- U+201A: SINGLE LOW-9 QUOTATION MARK -->
+ <td>&#x201C;x <!-- U+201C: LEFT DOUBLE QUOTATION MARK -->
+ <td>&#x201D;x <!-- U+201D: RIGHT DOUBLE QUOTATION MARK -->
+ <td>&#x201E;x <!-- U+201E: DOUBLE LOW-9 QUOTATION MARK -->
+ <td>&#x2020;x <!-- U+2020: DAGGER -->
+ <td>&#x2021;x <!-- U+2021: DOUBLE DAGGER -->
+ <td>&#x2022;x <!-- U+2022: BULLET -->
+ <td>&#x2026;x <!-- U+2026: HORIZONTAL ELLIPSIS -->
+ <td>&#x2030;x <!-- U+2030: PER MILLE SIGN -->
+ <td>&#x2039;x <!-- U+2039: SINGLE LEFT-POINTING ANGLE QUOTATION MARK -->
+ <td>&#x203A;x <!-- U+203A: SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -->
+ <td>&#x2044;x <!-- U+2044: FRACTION SLASH -->
+ <td>&#x2122;x <!-- U+2122: TRADE MARK SIGN -->
+ <tr>
+ <td>&#x2126;x <!-- U+2126: OHM SIGN -->
+ <td>&#x2202;x <!-- U+2202: PARTIAL DIFFERENTIAL -->
+ <td>&#x2206;x <!-- U+2206: INCREMENT -->
+ <td>&#x220F;x <!-- U+220F: N-ARY PRODUCT -->
+ <td>&#x2211;x <!-- U+2211: N-ARY SUMMATION -->
+ <td>&#x2212;x <!-- U+2212: MINUS SIGN -->
+ <td>&#x2219;x <!-- U+2219: BULLET OPERATOR -->
+ <td>&#x221A;x <!-- U+221A: SQUARE ROOT -->
+ <td>&#x221E;x <!-- U+221E: INFINITY -->
+ <td>&#x222B;x <!-- U+222B: INTEGRAL -->
+ <td>&#x2248;x <!-- U+2248: ALMOST EQUAL TO -->
+ <td>&#x2260;x <!-- U+2260: NOT EQUAL TO -->
+ <td>&#x2264;x <!-- U+2264: LESS-THAN OR EQUAL TO -->
+ <td>&#x2265;x <!-- U+2265: GREATER-THAN OR EQUAL TO -->
+ <td>&#x22F2;x <!-- U+22F2: ELEMENT OF WITH LONG HORIZONTAL STROKE -->
+ <td>&#x25CA;x <!-- U+25CA: LOZENGE -->
+ <td>&#x3000;x <!-- U+3000: IDEOGRAPHIC SPACE -->
+ <tr>
+ <td>&#x3007;x <!-- U+3007: IDEOGRAPHIC NUMBER ZERO -->
+ <td>&#x4E00;x <!-- U+4E00: CJK UNIFIED IDEOGRAPH-4E00 -->
+ <td>&#x4E03;x <!-- U+4E03: CJK UNIFIED IDEOGRAPH-4E03 -->
+ <td>&#x4E09;x <!-- U+4E09: CJK UNIFIED IDEOGRAPH-4E09 -->
+ <td>&#x4E5D;x <!-- U+4E5D: CJK UNIFIED IDEOGRAPH-4E5D -->
+ <td>&#x4E8C;x <!-- U+4E8C: CJK UNIFIED IDEOGRAPH-4E8C -->
+ <td>&#x4E94;x <!-- U+4E94: CJK UNIFIED IDEOGRAPH-4E94 -->
+ <td>&#x516B;x <!-- U+516B: CJK UNIFIED IDEOGRAPH-516B -->
+ <td>&#x516D;x <!-- U+516D: CJK UNIFIED IDEOGRAPH-516D -->
+ <td>&#x5341;x <!-- U+5341: CJK UNIFIED IDEOGRAPH-5341 -->
+ <td>&#x56D7;x <!-- U+56D7: CJK UNIFIED IDEOGRAPH-56D7 -->
+ <td>&#x56DB;x <!-- U+56DB: CJK UNIFIED IDEOGRAPH-56DB -->
+ <td>&#x571F;x <!-- U+571F: CJK UNIFIED IDEOGRAPH-571F -->
+ <td>&#x6728;x <!-- U+6728: CJK UNIFIED IDEOGRAPH-6728 -->
+ <td>&#x6A2A;x <!-- U+6A2A: CJK UNIFIED IDEOGRAPH-6A2A -->
+ <td>&#x6C34;x <!-- U+6C34: CJK UNIFIED IDEOGRAPH-6C34 -->
+ <td>&#x706B;x <!-- U+706B: CJK UNIFIED IDEOGRAPH-706B -->
+ <tr>
+ <td>&#x7EB5;x <!-- U+7EB5: CJK UNIFIED IDEOGRAPH-7EB5 -->
+ <td>&#x91D1;x <!-- U+91D1: CJK UNIFIED IDEOGRAPH-91D1 -->
+ <td>&#xF000;x <!-- U+F000 -->
+ <td>&#xF001;x <!-- U+F001 -->
+ <td>&#xF002;x <!-- U+F002 -->
+ <td>&#xFEFF;x <!-- U+FEFF: ZERO WIDTH NO-BREAK SPACE -->
+</table>
diff --git a/testing/web-platform/tests/infrastructure/assumptions/ahem-ref.html b/testing/web-platform/tests/infrastructure/assumptions/ahem-ref.html
new file mode 100644
index 0000000000..9116232620
--- /dev/null
+++ b/testing/web-platform/tests/infrastructure/assumptions/ahem-ref.html
@@ -0,0 +1,320 @@
+<!doctype html>
+<title>Ahem checker</title>
+<link rel="mismatch" href="ahem-notref.html">
+<style>
+* {
+ padding: 0;
+ margin: 0;
+ border: none;
+}
+td {
+ width: 34px;
+}
+@font-face {
+ font-family: Ahem;
+ src: url("../../fonts/Ahem.ttf");
+}
+table {
+ font: 15px/1 Ahem;
+ border-collapse: separate;
+ border-spacing: 1px;
+ table-layout: fixed;
+}
+</style>
+<table>
+ <tr>
+ <td>&#x0020;x <!-- U+0020: SPACE -->
+ <td>&#x0021;x <!-- U+0021: EXCLAMATION MARK -->
+ <td>&#x0022;x <!-- U+0022: QUOTATION MARK -->
+ <td>&#x0023;x <!-- U+0023: NUMBER SIGN -->
+ <td>&#x0024;x <!-- U+0024: DOLLAR SIGN -->
+ <td>&#x0025;x <!-- U+0025: PERCENT SIGN -->
+ <td>&#x0026;x <!-- U+0026: AMPERSAND -->
+ <td>&#x0028;x <!-- U+0028: LEFT PARENTHESIS -->
+ <td>&#x0029;x <!-- U+0029: RIGHT PARENTHESIS -->
+ <td>&#x002A;x <!-- U+002A: ASTERISK -->
+ <td>&#x002B;x <!-- U+002B: PLUS SIGN -->
+ <td>&#x002C;x <!-- U+002C: COMMA -->
+ <td>&#x002D;x <!-- U+002D: HYPHEN-MINUS -->
+ <td>&#x002E;x <!-- U+002E: FULL STOP -->
+ <td>&#x002F;x <!-- U+002F: SOLIDUS -->
+ <td>&#x0030;x <!-- U+0030: DIGIT ZERO -->
+ <td>&#x0031;x <!-- U+0031: DIGIT ONE -->
+ <tr>
+ <td>&#x0032;x <!-- U+0032: DIGIT TWO -->
+ <td>&#x0033;x <!-- U+0033: DIGIT THREE -->
+ <td>&#x0034;x <!-- U+0034: DIGIT FOUR -->
+ <td>&#x0035;x <!-- U+0035: DIGIT FIVE -->
+ <td>&#x0036;x <!-- U+0036: DIGIT SIX -->
+ <td>&#x0037;x <!-- U+0037: DIGIT SEVEN -->
+ <td>&#x0038;x <!-- U+0038: DIGIT EIGHT -->
+ <td>&#x0039;x <!-- U+0039: DIGIT NINE -->
+ <td>&#x003A;x <!-- U+003A: COLON -->
+ <td>&#x003B;x <!-- U+003B: SEMICOLON -->
+ <td>&#x003C;x <!-- U+003C: LESS-THAN SIGN -->
+ <td>&#x003D;x <!-- U+003D: EQUALS SIGN -->
+ <td>&#x003E;x <!-- U+003E: GREATER-THAN SIGN -->
+ <td>&#x003F;x <!-- U+003F: QUESTION MARK -->
+ <td>&#x0040;x <!-- U+0040: COMMERCIAL AT -->
+ <td>&#x0041;x <!-- U+0041: LATIN CAPITAL LETTER A -->
+ <td>&#x0042;x <!-- U+0042: LATIN CAPITAL LETTER B -->
+ <tr>
+ <td>&#x0043;x <!-- U+0043: LATIN CAPITAL LETTER C -->
+ <td>&#x0044;x <!-- U+0044: LATIN CAPITAL LETTER D -->
+ <td>&#x0045;x <!-- U+0045: LATIN CAPITAL LETTER E -->
+ <td>&#x0046;x <!-- U+0046: LATIN CAPITAL LETTER F -->
+ <td>&#x0047;x <!-- U+0047: LATIN CAPITAL LETTER G -->
+ <td>&#x0048;x <!-- U+0048: LATIN CAPITAL LETTER H -->
+ <td>&#x0049;x <!-- U+0049: LATIN CAPITAL LETTER I -->
+ <td>&#x004A;x <!-- U+004A: LATIN CAPITAL LETTER J -->
+ <td>&#x004B;x <!-- U+004B: LATIN CAPITAL LETTER K -->
+ <td>&#x004C;x <!-- U+004C: LATIN CAPITAL LETTER L -->
+ <td>&#x004D;x <!-- U+004D: LATIN CAPITAL LETTER M -->
+ <td>&#x004E;x <!-- U+004E: LATIN CAPITAL LETTER N -->
+ <td>&#x004F;x <!-- U+004F: LATIN CAPITAL LETTER O -->
+ <td>&#x0050;x <!-- U+0050: LATIN CAPITAL LETTER P -->
+ <td>&#x0051;x <!-- U+0051: LATIN CAPITAL LETTER Q -->
+ <td>&#x0052;x <!-- U+0052: LATIN CAPITAL LETTER R -->
+ <td>&#x0053;x <!-- U+0053: LATIN CAPITAL LETTER S -->
+ <tr>
+ <td>&#x0054;x <!-- U+0054: LATIN CAPITAL LETTER T -->
+ <td>&#x0055;x <!-- U+0055: LATIN CAPITAL LETTER U -->
+ <td>&#x0056;x <!-- U+0056: LATIN CAPITAL LETTER V -->
+ <td>&#x0057;x <!-- U+0057: LATIN CAPITAL LETTER W -->
+ <td>&#x0058;x <!-- U+0058: LATIN CAPITAL LETTER X -->
+ <td>&#x0059;x <!-- U+0059: LATIN CAPITAL LETTER Y -->
+ <td>&#x005A;x <!-- U+005A: LATIN CAPITAL LETTER Z -->
+ <td>&#x005B;x <!-- U+005B: LEFT SQUARE BRACKET -->
+ <td>&#x005C;x <!-- U+005C: REVERSE SOLIDUS -->
+ <td>&#x005D;x <!-- U+005D: RIGHT SQUARE BRACKET -->
+ <td>&#x005E;x <!-- U+005E: CIRCUMFLEX ACCENT -->
+ <td>&#x005F;x <!-- U+005F: LOW LINE -->
+ <td>&#x0060;x <!-- U+0060: GRAVE ACCENT -->
+ <td>&#x0061;x <!-- U+0061: LATIN SMALL LETTER A -->
+ <td>&#x0062;x <!-- U+0062: LATIN SMALL LETTER B -->
+ <td>&#x0063;x <!-- U+0063: LATIN SMALL LETTER C -->
+ <td>&#x0064;x <!-- U+0064: LATIN SMALL LETTER D -->
+ <tr>
+ <td>&#x0065;x <!-- U+0065: LATIN SMALL LETTER E -->
+ <td>&#x0066;x <!-- U+0066: LATIN SMALL LETTER F -->
+ <td>&#x0067;x <!-- U+0067: LATIN SMALL LETTER G -->
+ <td>&#x0068;x <!-- U+0068: LATIN SMALL LETTER H -->
+ <td>&#x0069;x <!-- U+0069: LATIN SMALL LETTER I -->
+ <td>&#x006A;x <!-- U+006A: LATIN SMALL LETTER J -->
+ <td>&#x006B;x <!-- U+006B: LATIN SMALL LETTER K -->
+ <td>&#x006C;x <!-- U+006C: LATIN SMALL LETTER L -->
+ <td>&#x006D;x <!-- U+006D: LATIN SMALL LETTER M -->
+ <td>&#x006E;x <!-- U+006E: LATIN SMALL LETTER N -->
+ <td>&#x006F;x <!-- U+006F: LATIN SMALL LETTER O -->
+ <td>&#x0070;x <!-- U+0070: LATIN SMALL LETTER P -->
+ <td>&#x0071;x <!-- U+0071: LATIN SMALL LETTER Q -->
+ <td>&#x0072;x <!-- U+0072: LATIN SMALL LETTER R -->
+ <td>&#x0073;x <!-- U+0073: LATIN SMALL LETTER S -->
+ <td>&#x0074;x <!-- U+0074: LATIN SMALL LETTER T -->
+ <td>&#x0075;x <!-- U+0075: LATIN SMALL LETTER U -->
+ <tr>
+ <td>&#x0076;x <!-- U+0076: LATIN SMALL LETTER V -->
+ <td>&#x0077;x <!-- U+0077: LATIN SMALL LETTER W -->
+ <td>&#x0078;x <!-- U+0078: LATIN SMALL LETTER X -->
+ <td>&#x0079;x <!-- U+0079: LATIN SMALL LETTER Y -->
+ <td>&#x007A;x <!-- U+007A: LATIN SMALL LETTER Z -->
+ <td>&#x007B;x <!-- U+007B: LEFT CURLY BRACKET -->
+ <td>&#x007C;x <!-- U+007C: VERTICAL LINE -->
+ <td>&#x007D;x <!-- U+007D: RIGHT CURLY BRACKET -->
+ <td>&#x007E;x <!-- U+007E: TILDE -->
+ <td>&#x00A0;x <!-- U+00A0: NO-BREAK SPACE -->
+ <td>&#x00A1;x <!-- U+00A1: INVERTED EXCLAMATION MARK -->
+ <td>&#x00A2;x <!-- U+00A2: CENT SIGN -->
+ <td>&#x00A3;x <!-- U+00A3: POUND SIGN -->
+ <td>&#x00A4;x <!-- U+00A4: CURRENCY SIGN -->
+ <td>&#x00A5;x <!-- U+00A5: YEN SIGN -->
+ <td>&#x00A6;x <!-- U+00A6: BROKEN BAR -->
+ <td>&#x00A7;x <!-- U+00A7: SECTION SIGN -->
+ <tr>
+ <td>&#x00A8;x <!-- U+00A8: DIAERESIS -->
+ <td>&#x00A9;x <!-- U+00A9: COPYRIGHT SIGN -->
+ <td>&#x00AA;x <!-- U+00AA: FEMININE ORDINAL INDICATOR -->
+ <td>&#x00AB;x <!-- U+00AB: LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -->
+ <td>&#x00AC;x <!-- U+00AC: NOT SIGN -->
+ <td>&#x00AD;x <!-- U+00AD: SOFT HYPHEN -->
+ <td>&#x00AE;x <!-- U+00AE: REGISTERED SIGN -->
+ <td>&#x00AF;x <!-- U+00AF: MACRON -->
+ <td>&#x00B0;x <!-- U+00B0: DEGREE SIGN -->
+ <td>&#x00B1;x <!-- U+00B1: PLUS-MINUS SIGN -->
+ <td>&#x00B2;x <!-- U+00B2: SUPERSCRIPT TWO -->
+ <td>&#x00B3;x <!-- U+00B3: SUPERSCRIPT THREE -->
+ <td>&#x00B4;x <!-- U+00B4: ACUTE ACCENT -->
+ <td>&#x00B5;x <!-- U+00B5: MICRO SIGN -->
+ <td>&#x00B6;x <!-- U+00B6: PILCROW SIGN -->
+ <td>&#x00B7;x <!-- U+00B7: MIDDLE DOT -->
+ <td>&#x00B8;x <!-- U+00B8: CEDILLA -->
+ <tr>
+ <td>&#x00B9;x <!-- U+00B9: SUPERSCRIPT ONE -->
+ <td>&#x00BA;x <!-- U+00BA: MASCULINE ORDINAL INDICATOR -->
+ <td>&#x00BB;x <!-- U+00BB: RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -->
+ <td>&#x00BC;x <!-- U+00BC: VULGAR FRACTION ONE QUARTER -->
+ <td>&#x00BD;x <!-- U+00BD: VULGAR FRACTION ONE HALF -->
+ <td>&#x00BE;x <!-- U+00BE: VULGAR FRACTION THREE QUARTERS -->
+ <td>&#x00BF;x <!-- U+00BF: INVERTED QUESTION MARK -->
+ <td>&#x00C0;x <!-- U+00C0: LATIN CAPITAL LETTER A WITH GRAVE -->
+ <td>&#x00C1;x <!-- U+00C1: LATIN CAPITAL LETTER A WITH ACUTE -->
+ <td>&#x00C2;x <!-- U+00C2: LATIN CAPITAL LETTER A WITH CIRCUMFLEX -->
+ <td>&#x00C3;x <!-- U+00C3: LATIN CAPITAL LETTER A WITH TILDE -->
+ <td>&#x00C4;x <!-- U+00C4: LATIN CAPITAL LETTER A WITH DIAERESIS -->
+ <td>&#x00C5;x <!-- U+00C5: LATIN CAPITAL LETTER A WITH RING ABOVE -->
+ <td>&#x00C6;x <!-- U+00C6: LATIN CAPITAL LETTER AE -->
+ <td>&#x00C7;x <!-- U+00C7: LATIN CAPITAL LETTER C WITH CEDILLA -->
+ <td>&#x00C8;x <!-- U+00C8: LATIN CAPITAL LETTER E WITH GRAVE -->
+ <td>&#x00C9;x <!-- U+00C9: LATIN CAPITAL LETTER E WITH ACUTE -->
+ <tr>
+ <td>&#x00CA;x <!-- U+00CA: LATIN CAPITAL LETTER E WITH CIRCUMFLEX -->
+ <td>&#x00CB;x <!-- U+00CB: LATIN CAPITAL LETTER E WITH DIAERESIS -->
+ <td>&#x00CC;x <!-- U+00CC: LATIN CAPITAL LETTER I WITH GRAVE -->
+ <td>&#x00CD;x <!-- U+00CD: LATIN CAPITAL LETTER I WITH ACUTE -->
+ <td>&#x00CE;x <!-- U+00CE: LATIN CAPITAL LETTER I WITH CIRCUMFLEX -->
+ <td>&#x00CF;x <!-- U+00CF: LATIN CAPITAL LETTER I WITH DIAERESIS -->
+ <td>&#x00D0;x <!-- U+00D0: LATIN CAPITAL LETTER ETH -->
+ <td>&#x00D1;x <!-- U+00D1: LATIN CAPITAL LETTER N WITH TILDE -->
+ <td>&#x00D2;x <!-- U+00D2: LATIN CAPITAL LETTER O WITH GRAVE -->
+ <td>&#x00D3;x <!-- U+00D3: LATIN CAPITAL LETTER O WITH ACUTE -->
+ <td>&#x00D4;x <!-- U+00D4: LATIN CAPITAL LETTER O WITH CIRCUMFLEX -->
+ <td>&#x00D5;x <!-- U+00D5: LATIN CAPITAL LETTER O WITH TILDE -->
+ <td>&#x00D6;x <!-- U+00D6: LATIN CAPITAL LETTER O WITH DIAERESIS -->
+ <td>&#x00D7;x <!-- U+00D7: MULTIPLICATION SIGN -->
+ <td>&#x00D8;x <!-- U+00D8: LATIN CAPITAL LETTER O WITH STROKE -->
+ <td>&#x00D9;x <!-- U+00D9: LATIN CAPITAL LETTER U WITH GRAVE -->
+ <td>&#x00DA;x <!-- U+00DA: LATIN CAPITAL LETTER U WITH ACUTE -->
+ <tr>
+ <td>&#x00DB;x <!-- U+00DB: LATIN CAPITAL LETTER U WITH CIRCUMFLEX -->
+ <td>&#x00DC;x <!-- U+00DC: LATIN CAPITAL LETTER U WITH DIAERESIS -->
+ <td>&#x00DD;x <!-- U+00DD: LATIN CAPITAL LETTER Y WITH ACUTE -->
+ <td>&#x00DE;x <!-- U+00DE: LATIN CAPITAL LETTER THORN -->
+ <td>&#x00DF;x <!-- U+00DF: LATIN SMALL LETTER SHARP S -->
+ <td>&#x00E0;x <!-- U+00E0: LATIN SMALL LETTER A WITH GRAVE -->
+ <td>&#x00E1;x <!-- U+00E1: LATIN SMALL LETTER A WITH ACUTE -->
+ <td>&#x00E2;x <!-- U+00E2: LATIN SMALL LETTER A WITH CIRCUMFLEX -->
+ <td>&#x00E3;x <!-- U+00E3: LATIN SMALL LETTER A WITH TILDE -->
+ <td>&#x00E4;x <!-- U+00E4: LATIN SMALL LETTER A WITH DIAERESIS -->
+ <td>&#x00E5;x <!-- U+00E5: LATIN SMALL LETTER A WITH RING ABOVE -->
+ <td>&#x00E6;x <!-- U+00E6: LATIN SMALL LETTER AE -->
+ <td>&#x00E7;x <!-- U+00E7: LATIN SMALL LETTER C WITH CEDILLA -->
+ <td>&#x00E8;x <!-- U+00E8: LATIN SMALL LETTER E WITH GRAVE -->
+ <td>&#x00E9;x <!-- U+00E9: LATIN SMALL LETTER E WITH ACUTE -->
+ <td>&#x00EA;x <!-- U+00EA: LATIN SMALL LETTER E WITH CIRCUMFLEX -->
+ <td>&#x00EB;x <!-- U+00EB: LATIN SMALL LETTER E WITH DIAERESIS -->
+ <tr>
+ <td>&#x00EC;x <!-- U+00EC: LATIN SMALL LETTER I WITH GRAVE -->
+ <td>&#x00ED;x <!-- U+00ED: LATIN SMALL LETTER I WITH ACUTE -->
+ <td>&#x00EE;x <!-- U+00EE: LATIN SMALL LETTER I WITH CIRCUMFLEX -->
+ <td>&#x00EF;x <!-- U+00EF: LATIN SMALL LETTER I WITH DIAERESIS -->
+ <td>&#x00F0;x <!-- U+00F0: LATIN SMALL LETTER ETH -->
+ <td>&#x00F1;x <!-- U+00F1: LATIN SMALL LETTER N WITH TILDE -->
+ <td>&#x00F2;x <!-- U+00F2: LATIN SMALL LETTER O WITH GRAVE -->
+ <td>&#x00F3;x <!-- U+00F3: LATIN SMALL LETTER O WITH ACUTE -->
+ <td>&#x00F4;x <!-- U+00F4: LATIN SMALL LETTER O WITH CIRCUMFLEX -->
+ <td>&#x00F5;x <!-- U+00F5: LATIN SMALL LETTER O WITH TILDE -->
+ <td>&#x00F6;x <!-- U+00F6: LATIN SMALL LETTER O WITH DIAERESIS -->
+ <td>&#x00F7;x <!-- U+00F7: DIVISION SIGN -->
+ <td>&#x00F8;x <!-- U+00F8: LATIN SMALL LETTER O WITH STROKE -->
+ <td>&#x00F9;x <!-- U+00F9: LATIN SMALL LETTER U WITH GRAVE -->
+ <td>&#x00FA;x <!-- U+00FA: LATIN SMALL LETTER U WITH ACUTE -->
+ <td>&#x00FB;x <!-- U+00FB: LATIN SMALL LETTER U WITH CIRCUMFLEX -->
+ <td>&#x00FC;x <!-- U+00FC: LATIN SMALL LETTER U WITH DIAERESIS -->
+ <tr>
+ <td>&#x00FD;x <!-- U+00FD: LATIN SMALL LETTER Y WITH ACUTE -->
+ <td>&#x00FE;x <!-- U+00FE: LATIN SMALL LETTER THORN -->
+ <td>&#x00FF;x <!-- U+00FF: LATIN SMALL LETTER Y WITH DIAERESIS -->
+ <td>&#x0131;x <!-- U+0131: LATIN SMALL LETTER DOTLESS I -->
+ <td>&#x0152;x <!-- U+0152: LATIN CAPITAL LIGATURE OE -->
+ <td>&#x0153;x <!-- U+0153: LATIN SMALL LIGATURE OE -->
+ <td>&#x0178;x <!-- U+0178: LATIN CAPITAL LETTER Y WITH DIAERESIS -->
+ <td>&#x0192;x <!-- U+0192: LATIN SMALL LETTER F WITH HOOK -->
+ <td>&#x02C6;x <!-- U+02C6: MODIFIER LETTER CIRCUMFLEX ACCENT -->
+ <td>&#x02C7;x <!-- U+02C7: CARON -->
+ <td>&#x02C9;x <!-- U+02C9: MODIFIER LETTER MACRON -->
+ <td>&#x02D8;x <!-- U+02D8: BREVE -->
+ <td>&#x02D9;x <!-- U+02D9: DOT ABOVE -->
+ <td>&#x02DA;x <!-- U+02DA: RING ABOVE -->
+ <td>&#x02DB;x <!-- U+02DB: OGONEK -->
+ <td>&#x02DC;x <!-- U+02DC: SMALL TILDE -->
+ <td>&#x02DD;x <!-- U+02DD: DOUBLE ACUTE ACCENT -->
+ <tr>
+ <td>&#x0394;x <!-- U+0394: GREEK CAPITAL LETTER DELTA -->
+ <td>&#x03A5;x <!-- U+03A5: GREEK CAPITAL LETTER UPSILON -->
+ <td>&#x03A7;x <!-- U+03A7: GREEK CAPITAL LETTER CHI -->
+ <td>&#x03A9;x <!-- U+03A9: GREEK CAPITAL LETTER OMEGA -->
+ <td>&#x03BC;x <!-- U+03BC: GREEK SMALL LETTER MU -->
+ <td>&#x03C0;x <!-- U+03C0: GREEK SMALL LETTER PI -->
+ <td>&#x2002;x <!-- U+2002: EN SPACE -->
+ <td>&#x2003;x <!-- U+2003: EM SPACE -->
+ <td>&#x2004;x <!-- U+2004: THREE-PER-EM SPACE -->
+ <td>&#x2005;x <!-- U+2005: FOUR-PER-EM SPACE -->
+ <td>&#x2006;x <!-- U+2006: SIX-PER-EM SPACE -->
+ <td>&#x2009;x <!-- U+2009: THIN SPACE -->
+ <td>&#x200A;x <!-- U+200A: HAIR SPACE -->
+ <td>&#x200B;x <!-- U+200B: ZERO WIDTH SPACE -->
+ <td>&#x200C;x <!-- U+200C: ZERO WIDTH NON-JOINER -->
+ <td>&#x200D;x <!-- U+200D: ZERO WIDTH JOINER -->
+ <td>&#x2010;x <!-- U+2010: HYPHEN -->
+ <tr>
+ <td>&#x2013;x <!-- U+2013: EN DASH -->
+ <td>&#x2014;x <!-- U+2014: EM DASH -->
+ <td>&#x2018;x <!-- U+2018: LEFT SINGLE QUOTATION MARK -->
+ <td>&#x2019;x <!-- U+2019: RIGHT SINGLE QUOTATION MARK -->
+ <td>&#x201A;x <!-- U+201A: SINGLE LOW-9 QUOTATION MARK -->
+ <td>&#x201C;x <!-- U+201C: LEFT DOUBLE QUOTATION MARK -->
+ <td>&#x201D;x <!-- U+201D: RIGHT DOUBLE QUOTATION MARK -->
+ <td>&#x201E;x <!-- U+201E: DOUBLE LOW-9 QUOTATION MARK -->
+ <td>&#x2020;x <!-- U+2020: DAGGER -->
+ <td>&#x2021;x <!-- U+2021: DOUBLE DAGGER -->
+ <td>&#x2022;x <!-- U+2022: BULLET -->
+ <td>&#x2026;x <!-- U+2026: HORIZONTAL ELLIPSIS -->
+ <td>&#x2030;x <!-- U+2030: PER MILLE SIGN -->
+ <td>&#x2039;x <!-- U+2039: SINGLE LEFT-POINTING ANGLE QUOTATION MARK -->
+ <td>&#x203A;x <!-- U+203A: SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -->
+ <td>&#x2044;x <!-- U+2044: FRACTION SLASH -->
+ <td>&#x2122;x <!-- U+2122: TRADE MARK SIGN -->
+ <tr>
+ <td>&#x2126;x <!-- U+2126: OHM SIGN -->
+ <td>&#x2202;x <!-- U+2202: PARTIAL DIFFERENTIAL -->
+ <td>&#x2206;x <!-- U+2206: INCREMENT -->
+ <td>&#x220F;x <!-- U+220F: N-ARY PRODUCT -->
+ <td>&#x2211;x <!-- U+2211: N-ARY SUMMATION -->
+ <td>&#x2212;x <!-- U+2212: MINUS SIGN -->
+ <td>&#x2219;x <!-- U+2219: BULLET OPERATOR -->
+ <td>&#x221A;x <!-- U+221A: SQUARE ROOT -->
+ <td>&#x221E;x <!-- U+221E: INFINITY -->
+ <td>&#x222B;x <!-- U+222B: INTEGRAL -->
+ <td>&#x2248;x <!-- U+2248: ALMOST EQUAL TO -->
+ <td>&#x2260;x <!-- U+2260: NOT EQUAL TO -->
+ <td>&#x2264;x <!-- U+2264: LESS-THAN OR EQUAL TO -->
+ <td>&#x2265;x <!-- U+2265: GREATER-THAN OR EQUAL TO -->
+ <td>&#x22F2;x <!-- U+22F2: ELEMENT OF WITH LONG HORIZONTAL STROKE -->
+ <td>&#x25CA;x <!-- U+25CA: LOZENGE -->
+ <td>&#x3000;x <!-- U+3000: IDEOGRAPHIC SPACE -->
+ <tr>
+ <td>&#x3007;x <!-- U+3007: IDEOGRAPHIC NUMBER ZERO -->
+ <td>&#x4E00;x <!-- U+4E00: CJK UNIFIED IDEOGRAPH-4E00 -->
+ <td>&#x4E03;x <!-- U+4E03: CJK UNIFIED IDEOGRAPH-4E03 -->
+ <td>&#x4E09;x <!-- U+4E09: CJK UNIFIED IDEOGRAPH-4E09 -->
+ <td>&#x4E5D;x <!-- U+4E5D: CJK UNIFIED IDEOGRAPH-4E5D -->
+ <td>&#x4E8C;x <!-- U+4E8C: CJK UNIFIED IDEOGRAPH-4E8C -->
+ <td>&#x4E94;x <!-- U+4E94: CJK UNIFIED IDEOGRAPH-4E94 -->
+ <td>&#x516B;x <!-- U+516B: CJK UNIFIED IDEOGRAPH-516B -->
+ <td>&#x516D;x <!-- U+516D: CJK UNIFIED IDEOGRAPH-516D -->
+ <td>&#x5341;x <!-- U+5341: CJK UNIFIED IDEOGRAPH-5341 -->
+ <td>&#x56D7;x <!-- U+56D7: CJK UNIFIED IDEOGRAPH-56D7 -->
+ <td>&#x56DB;x <!-- U+56DB: CJK UNIFIED IDEOGRAPH-56DB -->
+ <td>&#x571F;x <!-- U+571F: CJK UNIFIED IDEOGRAPH-571F -->
+ <td>&#x6728;x <!-- U+6728: CJK UNIFIED IDEOGRAPH-6728 -->
+ <td>&#x6A2A;x <!-- U+6A2A: CJK UNIFIED IDEOGRAPH-6A2A -->
+ <td>&#x6C34;x <!-- U+6C34: CJK UNIFIED IDEOGRAPH-6C34 -->
+ <td>&#x706B;x <!-- U+706B: CJK UNIFIED IDEOGRAPH-706B -->
+ <tr>
+ <td>&#x7EB5;x <!-- U+7EB5: CJK UNIFIED IDEOGRAPH-7EB5 -->
+ <td>&#x91D1;x <!-- U+91D1: CJK UNIFIED IDEOGRAPH-91D1 -->
+ <td>&#xF000;x <!-- U+F000 -->
+ <td>&#xF001;x <!-- U+F001 -->
+ <td>&#xF002;x <!-- U+F002 -->
+ <td>&#xFEFF;x <!-- U+FEFF: ZERO WIDTH NO-BREAK SPACE -->
+</table>
diff --git a/testing/web-platform/tests/infrastructure/assumptions/ahem.html b/testing/web-platform/tests/infrastructure/assumptions/ahem.html
new file mode 100644
index 0000000000..068c1d4dee
--- /dev/null
+++ b/testing/web-platform/tests/infrastructure/assumptions/ahem.html
@@ -0,0 +1,316 @@
+<!doctype html>
+<title>Ahem checker</title>
+<link rel="match" href="ahem-ref.html">
+<style>
+* {
+ padding: 0;
+ margin: 0;
+ border: none;
+}
+td {
+ width: 34px;
+}
+table {
+ font: 15px/1 Ahem;
+ border-collapse: separate;
+ border-spacing: 1px;
+ table-layout: fixed;
+}
+</style>
+<table>
+ <tr>
+ <td>&#x0020;x <!-- U+0020: SPACE -->
+ <td>&#x0021;x <!-- U+0021: EXCLAMATION MARK -->
+ <td>&#x0022;x <!-- U+0022: QUOTATION MARK -->
+ <td>&#x0023;x <!-- U+0023: NUMBER SIGN -->
+ <td>&#x0024;x <!-- U+0024: DOLLAR SIGN -->
+ <td>&#x0025;x <!-- U+0025: PERCENT SIGN -->
+ <td>&#x0026;x <!-- U+0026: AMPERSAND -->
+ <td>&#x0028;x <!-- U+0028: LEFT PARENTHESIS -->
+ <td>&#x0029;x <!-- U+0029: RIGHT PARENTHESIS -->
+ <td>&#x002A;x <!-- U+002A: ASTERISK -->
+ <td>&#x002B;x <!-- U+002B: PLUS SIGN -->
+ <td>&#x002C;x <!-- U+002C: COMMA -->
+ <td>&#x002D;x <!-- U+002D: HYPHEN-MINUS -->
+ <td>&#x002E;x <!-- U+002E: FULL STOP -->
+ <td>&#x002F;x <!-- U+002F: SOLIDUS -->
+ <td>&#x0030;x <!-- U+0030: DIGIT ZERO -->
+ <td>&#x0031;x <!-- U+0031: DIGIT ONE -->
+ <tr>
+ <td>&#x0032;x <!-- U+0032: DIGIT TWO -->
+ <td>&#x0033;x <!-- U+0033: DIGIT THREE -->
+ <td>&#x0034;x <!-- U+0034: DIGIT FOUR -->
+ <td>&#x0035;x <!-- U+0035: DIGIT FIVE -->
+ <td>&#x0036;x <!-- U+0036: DIGIT SIX -->
+ <td>&#x0037;x <!-- U+0037: DIGIT SEVEN -->
+ <td>&#x0038;x <!-- U+0038: DIGIT EIGHT -->
+ <td>&#x0039;x <!-- U+0039: DIGIT NINE -->
+ <td>&#x003A;x <!-- U+003A: COLON -->
+ <td>&#x003B;x <!-- U+003B: SEMICOLON -->
+ <td>&#x003C;x <!-- U+003C: LESS-THAN SIGN -->
+ <td>&#x003D;x <!-- U+003D: EQUALS SIGN -->
+ <td>&#x003E;x <!-- U+003E: GREATER-THAN SIGN -->
+ <td>&#x003F;x <!-- U+003F: QUESTION MARK -->
+ <td>&#x0040;x <!-- U+0040: COMMERCIAL AT -->
+ <td>&#x0041;x <!-- U+0041: LATIN CAPITAL LETTER A -->
+ <td>&#x0042;x <!-- U+0042: LATIN CAPITAL LETTER B -->
+ <tr>
+ <td>&#x0043;x <!-- U+0043: LATIN CAPITAL LETTER C -->
+ <td>&#x0044;x <!-- U+0044: LATIN CAPITAL LETTER D -->
+ <td>&#x0045;x <!-- U+0045: LATIN CAPITAL LETTER E -->
+ <td>&#x0046;x <!-- U+0046: LATIN CAPITAL LETTER F -->
+ <td>&#x0047;x <!-- U+0047: LATIN CAPITAL LETTER G -->
+ <td>&#x0048;x <!-- U+0048: LATIN CAPITAL LETTER H -->
+ <td>&#x0049;x <!-- U+0049: LATIN CAPITAL LETTER I -->
+ <td>&#x004A;x <!-- U+004A: LATIN CAPITAL LETTER J -->
+ <td>&#x004B;x <!-- U+004B: LATIN CAPITAL LETTER K -->
+ <td>&#x004C;x <!-- U+004C: LATIN CAPITAL LETTER L -->
+ <td>&#x004D;x <!-- U+004D: LATIN CAPITAL LETTER M -->
+ <td>&#x004E;x <!-- U+004E: LATIN CAPITAL LETTER N -->
+ <td>&#x004F;x <!-- U+004F: LATIN CAPITAL LETTER O -->
+ <td>&#x0050;x <!-- U+0050: LATIN CAPITAL LETTER P -->
+ <td>&#x0051;x <!-- U+0051: LATIN CAPITAL LETTER Q -->
+ <td>&#x0052;x <!-- U+0052: LATIN CAPITAL LETTER R -->
+ <td>&#x0053;x <!-- U+0053: LATIN CAPITAL LETTER S -->
+ <tr>
+ <td>&#x0054;x <!-- U+0054: LATIN CAPITAL LETTER T -->
+ <td>&#x0055;x <!-- U+0055: LATIN CAPITAL LETTER U -->
+ <td>&#x0056;x <!-- U+0056: LATIN CAPITAL LETTER V -->
+ <td>&#x0057;x <!-- U+0057: LATIN CAPITAL LETTER W -->
+ <td>&#x0058;x <!-- U+0058: LATIN CAPITAL LETTER X -->
+ <td>&#x0059;x <!-- U+0059: LATIN CAPITAL LETTER Y -->
+ <td>&#x005A;x <!-- U+005A: LATIN CAPITAL LETTER Z -->
+ <td>&#x005B;x <!-- U+005B: LEFT SQUARE BRACKET -->
+ <td>&#x005C;x <!-- U+005C: REVERSE SOLIDUS -->
+ <td>&#x005D;x <!-- U+005D: RIGHT SQUARE BRACKET -->
+ <td>&#x005E;x <!-- U+005E: CIRCUMFLEX ACCENT -->
+ <td>&#x005F;x <!-- U+005F: LOW LINE -->
+ <td>&#x0060;x <!-- U+0060: GRAVE ACCENT -->
+ <td>&#x0061;x <!-- U+0061: LATIN SMALL LETTER A -->
+ <td>&#x0062;x <!-- U+0062: LATIN SMALL LETTER B -->
+ <td>&#x0063;x <!-- U+0063: LATIN SMALL LETTER C -->
+ <td>&#x0064;x <!-- U+0064: LATIN SMALL LETTER D -->
+ <tr>
+ <td>&#x0065;x <!-- U+0065: LATIN SMALL LETTER E -->
+ <td>&#x0066;x <!-- U+0066: LATIN SMALL LETTER F -->
+ <td>&#x0067;x <!-- U+0067: LATIN SMALL LETTER G -->
+ <td>&#x0068;x <!-- U+0068: LATIN SMALL LETTER H -->
+ <td>&#x0069;x <!-- U+0069: LATIN SMALL LETTER I -->
+ <td>&#x006A;x <!-- U+006A: LATIN SMALL LETTER J -->
+ <td>&#x006B;x <!-- U+006B: LATIN SMALL LETTER K -->
+ <td>&#x006C;x <!-- U+006C: LATIN SMALL LETTER L -->
+ <td>&#x006D;x <!-- U+006D: LATIN SMALL LETTER M -->
+ <td>&#x006E;x <!-- U+006E: LATIN SMALL LETTER N -->
+ <td>&#x006F;x <!-- U+006F: LATIN SMALL LETTER O -->
+ <td>&#x0070;x <!-- U+0070: LATIN SMALL LETTER P -->
+ <td>&#x0071;x <!-- U+0071: LATIN SMALL LETTER Q -->
+ <td>&#x0072;x <!-- U+0072: LATIN SMALL LETTER R -->
+ <td>&#x0073;x <!-- U+0073: LATIN SMALL LETTER S -->
+ <td>&#x0074;x <!-- U+0074: LATIN SMALL LETTER T -->
+ <td>&#x0075;x <!-- U+0075: LATIN SMALL LETTER U -->
+ <tr>
+ <td>&#x0076;x <!-- U+0076: LATIN SMALL LETTER V -->
+ <td>&#x0077;x <!-- U+0077: LATIN SMALL LETTER W -->
+ <td>&#x0078;x <!-- U+0078: LATIN SMALL LETTER X -->
+ <td>&#x0079;x <!-- U+0079: LATIN SMALL LETTER Y -->
+ <td>&#x007A;x <!-- U+007A: LATIN SMALL LETTER Z -->
+ <td>&#x007B;x <!-- U+007B: LEFT CURLY BRACKET -->
+ <td>&#x007C;x <!-- U+007C: VERTICAL LINE -->
+ <td>&#x007D;x <!-- U+007D: RIGHT CURLY BRACKET -->
+ <td>&#x007E;x <!-- U+007E: TILDE -->
+ <td>&#x00A0;x <!-- U+00A0: NO-BREAK SPACE -->
+ <td>&#x00A1;x <!-- U+00A1: INVERTED EXCLAMATION MARK -->
+ <td>&#x00A2;x <!-- U+00A2: CENT SIGN -->
+ <td>&#x00A3;x <!-- U+00A3: POUND SIGN -->
+ <td>&#x00A4;x <!-- U+00A4: CURRENCY SIGN -->
+ <td>&#x00A5;x <!-- U+00A5: YEN SIGN -->
+ <td>&#x00A6;x <!-- U+00A6: BROKEN BAR -->
+ <td>&#x00A7;x <!-- U+00A7: SECTION SIGN -->
+ <tr>
+ <td>&#x00A8;x <!-- U+00A8: DIAERESIS -->
+ <td>&#x00A9;x <!-- U+00A9: COPYRIGHT SIGN -->
+ <td>&#x00AA;x <!-- U+00AA: FEMININE ORDINAL INDICATOR -->
+ <td>&#x00AB;x <!-- U+00AB: LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -->
+ <td>&#x00AC;x <!-- U+00AC: NOT SIGN -->
+ <td>&#x00AD;x <!-- U+00AD: SOFT HYPHEN -->
+ <td>&#x00AE;x <!-- U+00AE: REGISTERED SIGN -->
+ <td>&#x00AF;x <!-- U+00AF: MACRON -->
+ <td>&#x00B0;x <!-- U+00B0: DEGREE SIGN -->
+ <td>&#x00B1;x <!-- U+00B1: PLUS-MINUS SIGN -->
+ <td>&#x00B2;x <!-- U+00B2: SUPERSCRIPT TWO -->
+ <td>&#x00B3;x <!-- U+00B3: SUPERSCRIPT THREE -->
+ <td>&#x00B4;x <!-- U+00B4: ACUTE ACCENT -->
+ <td>&#x00B5;x <!-- U+00B5: MICRO SIGN -->
+ <td>&#x00B6;x <!-- U+00B6: PILCROW SIGN -->
+ <td>&#x00B7;x <!-- U+00B7: MIDDLE DOT -->
+ <td>&#x00B8;x <!-- U+00B8: CEDILLA -->
+ <tr>
+ <td>&#x00B9;x <!-- U+00B9: SUPERSCRIPT ONE -->
+ <td>&#x00BA;x <!-- U+00BA: MASCULINE ORDINAL INDICATOR -->
+ <td>&#x00BB;x <!-- U+00BB: RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -->
+ <td>&#x00BC;x <!-- U+00BC: VULGAR FRACTION ONE QUARTER -->
+ <td>&#x00BD;x <!-- U+00BD: VULGAR FRACTION ONE HALF -->
+ <td>&#x00BE;x <!-- U+00BE: VULGAR FRACTION THREE QUARTERS -->
+ <td>&#x00BF;x <!-- U+00BF: INVERTED QUESTION MARK -->
+ <td>&#x00C0;x <!-- U+00C0: LATIN CAPITAL LETTER A WITH GRAVE -->
+ <td>&#x00C1;x <!-- U+00C1: LATIN CAPITAL LETTER A WITH ACUTE -->
+ <td>&#x00C2;x <!-- U+00C2: LATIN CAPITAL LETTER A WITH CIRCUMFLEX -->
+ <td>&#x00C3;x <!-- U+00C3: LATIN CAPITAL LETTER A WITH TILDE -->
+ <td>&#x00C4;x <!-- U+00C4: LATIN CAPITAL LETTER A WITH DIAERESIS -->
+ <td>&#x00C5;x <!-- U+00C5: LATIN CAPITAL LETTER A WITH RING ABOVE -->
+ <td>&#x00C6;x <!-- U+00C6: LATIN CAPITAL LETTER AE -->
+ <td>&#x00C7;x <!-- U+00C7: LATIN CAPITAL LETTER C WITH CEDILLA -->
+ <td>&#x00C8;x <!-- U+00C8: LATIN CAPITAL LETTER E WITH GRAVE -->
+ <td>&#x00C9;x <!-- U+00C9: LATIN CAPITAL LETTER E WITH ACUTE -->
+ <tr>
+ <td>&#x00CA;x <!-- U+00CA: LATIN CAPITAL LETTER E WITH CIRCUMFLEX -->
+ <td>&#x00CB;x <!-- U+00CB: LATIN CAPITAL LETTER E WITH DIAERESIS -->
+ <td>&#x00CC;x <!-- U+00CC: LATIN CAPITAL LETTER I WITH GRAVE -->
+ <td>&#x00CD;x <!-- U+00CD: LATIN CAPITAL LETTER I WITH ACUTE -->
+ <td>&#x00CE;x <!-- U+00CE: LATIN CAPITAL LETTER I WITH CIRCUMFLEX -->
+ <td>&#x00CF;x <!-- U+00CF: LATIN CAPITAL LETTER I WITH DIAERESIS -->
+ <td>&#x00D0;x <!-- U+00D0: LATIN CAPITAL LETTER ETH -->
+ <td>&#x00D1;x <!-- U+00D1: LATIN CAPITAL LETTER N WITH TILDE -->
+ <td>&#x00D2;x <!-- U+00D2: LATIN CAPITAL LETTER O WITH GRAVE -->
+ <td>&#x00D3;x <!-- U+00D3: LATIN CAPITAL LETTER O WITH ACUTE -->
+ <td>&#x00D4;x <!-- U+00D4: LATIN CAPITAL LETTER O WITH CIRCUMFLEX -->
+ <td>&#x00D5;x <!-- U+00D5: LATIN CAPITAL LETTER O WITH TILDE -->
+ <td>&#x00D6;x <!-- U+00D6: LATIN CAPITAL LETTER O WITH DIAERESIS -->
+ <td>&#x00D7;x <!-- U+00D7: MULTIPLICATION SIGN -->
+ <td>&#x00D8;x <!-- U+00D8: LATIN CAPITAL LETTER O WITH STROKE -->
+ <td>&#x00D9;x <!-- U+00D9: LATIN CAPITAL LETTER U WITH GRAVE -->
+ <td>&#x00DA;x <!-- U+00DA: LATIN CAPITAL LETTER U WITH ACUTE -->
+ <tr>
+ <td>&#x00DB;x <!-- U+00DB: LATIN CAPITAL LETTER U WITH CIRCUMFLEX -->
+ <td>&#x00DC;x <!-- U+00DC: LATIN CAPITAL LETTER U WITH DIAERESIS -->
+ <td>&#x00DD;x <!-- U+00DD: LATIN CAPITAL LETTER Y WITH ACUTE -->
+ <td>&#x00DE;x <!-- U+00DE: LATIN CAPITAL LETTER THORN -->
+ <td>&#x00DF;x <!-- U+00DF: LATIN SMALL LETTER SHARP S -->
+ <td>&#x00E0;x <!-- U+00E0: LATIN SMALL LETTER A WITH GRAVE -->
+ <td>&#x00E1;x <!-- U+00E1: LATIN SMALL LETTER A WITH ACUTE -->
+ <td>&#x00E2;x <!-- U+00E2: LATIN SMALL LETTER A WITH CIRCUMFLEX -->
+ <td>&#x00E3;x <!-- U+00E3: LATIN SMALL LETTER A WITH TILDE -->
+ <td>&#x00E4;x <!-- U+00E4: LATIN SMALL LETTER A WITH DIAERESIS -->
+ <td>&#x00E5;x <!-- U+00E5: LATIN SMALL LETTER A WITH RING ABOVE -->
+ <td>&#x00E6;x <!-- U+00E6: LATIN SMALL LETTER AE -->
+ <td>&#x00E7;x <!-- U+00E7: LATIN SMALL LETTER C WITH CEDILLA -->
+ <td>&#x00E8;x <!-- U+00E8: LATIN SMALL LETTER E WITH GRAVE -->
+ <td>&#x00E9;x <!-- U+00E9: LATIN SMALL LETTER E WITH ACUTE -->
+ <td>&#x00EA;x <!-- U+00EA: LATIN SMALL LETTER E WITH CIRCUMFLEX -->
+ <td>&#x00EB;x <!-- U+00EB: LATIN SMALL LETTER E WITH DIAERESIS -->
+ <tr>
+ <td>&#x00EC;x <!-- U+00EC: LATIN SMALL LETTER I WITH GRAVE -->
+ <td>&#x00ED;x <!-- U+00ED: LATIN SMALL LETTER I WITH ACUTE -->
+ <td>&#x00EE;x <!-- U+00EE: LATIN SMALL LETTER I WITH CIRCUMFLEX -->
+ <td>&#x00EF;x <!-- U+00EF: LATIN SMALL LETTER I WITH DIAERESIS -->
+ <td>&#x00F0;x <!-- U+00F0: LATIN SMALL LETTER ETH -->
+ <td>&#x00F1;x <!-- U+00F1: LATIN SMALL LETTER N WITH TILDE -->
+ <td>&#x00F2;x <!-- U+00F2: LATIN SMALL LETTER O WITH GRAVE -->
+ <td>&#x00F3;x <!-- U+00F3: LATIN SMALL LETTER O WITH ACUTE -->
+ <td>&#x00F4;x <!-- U+00F4: LATIN SMALL LETTER O WITH CIRCUMFLEX -->
+ <td>&#x00F5;x <!-- U+00F5: LATIN SMALL LETTER O WITH TILDE -->
+ <td>&#x00F6;x <!-- U+00F6: LATIN SMALL LETTER O WITH DIAERESIS -->
+ <td>&#x00F7;x <!-- U+00F7: DIVISION SIGN -->
+ <td>&#x00F8;x <!-- U+00F8: LATIN SMALL LETTER O WITH STROKE -->
+ <td>&#x00F9;x <!-- U+00F9: LATIN SMALL LETTER U WITH GRAVE -->
+ <td>&#x00FA;x <!-- U+00FA: LATIN SMALL LETTER U WITH ACUTE -->
+ <td>&#x00FB;x <!-- U+00FB: LATIN SMALL LETTER U WITH CIRCUMFLEX -->
+ <td>&#x00FC;x <!-- U+00FC: LATIN SMALL LETTER U WITH DIAERESIS -->
+ <tr>
+ <td>&#x00FD;x <!-- U+00FD: LATIN SMALL LETTER Y WITH ACUTE -->
+ <td>&#x00FE;x <!-- U+00FE: LATIN SMALL LETTER THORN -->
+ <td>&#x00FF;x <!-- U+00FF: LATIN SMALL LETTER Y WITH DIAERESIS -->
+ <td>&#x0131;x <!-- U+0131: LATIN SMALL LETTER DOTLESS I -->
+ <td>&#x0152;x <!-- U+0152: LATIN CAPITAL LIGATURE OE -->
+ <td>&#x0153;x <!-- U+0153: LATIN SMALL LIGATURE OE -->
+ <td>&#x0178;x <!-- U+0178: LATIN CAPITAL LETTER Y WITH DIAERESIS -->
+ <td>&#x0192;x <!-- U+0192: LATIN SMALL LETTER F WITH HOOK -->
+ <td>&#x02C6;x <!-- U+02C6: MODIFIER LETTER CIRCUMFLEX ACCENT -->
+ <td>&#x02C7;x <!-- U+02C7: CARON -->
+ <td>&#x02C9;x <!-- U+02C9: MODIFIER LETTER MACRON -->
+ <td>&#x02D8;x <!-- U+02D8: BREVE -->
+ <td>&#x02D9;x <!-- U+02D9: DOT ABOVE -->
+ <td>&#x02DA;x <!-- U+02DA: RING ABOVE -->
+ <td>&#x02DB;x <!-- U+02DB: OGONEK -->
+ <td>&#x02DC;x <!-- U+02DC: SMALL TILDE -->
+ <td>&#x02DD;x <!-- U+02DD: DOUBLE ACUTE ACCENT -->
+ <tr>
+ <td>&#x0394;x <!-- U+0394: GREEK CAPITAL LETTER DELTA -->
+ <td>&#x03A5;x <!-- U+03A5: GREEK CAPITAL LETTER UPSILON -->
+ <td>&#x03A7;x <!-- U+03A7: GREEK CAPITAL LETTER CHI -->
+ <td>&#x03A9;x <!-- U+03A9: GREEK CAPITAL LETTER OMEGA -->
+ <td>&#x03BC;x <!-- U+03BC: GREEK SMALL LETTER MU -->
+ <td>&#x03C0;x <!-- U+03C0: GREEK SMALL LETTER PI -->
+ <td>&#x2002;x <!-- U+2002: EN SPACE -->
+ <td>&#x2003;x <!-- U+2003: EM SPACE -->
+ <td>&#x2004;x <!-- U+2004: THREE-PER-EM SPACE -->
+ <td>&#x2005;x <!-- U+2005: FOUR-PER-EM SPACE -->
+ <td>&#x2006;x <!-- U+2006: SIX-PER-EM SPACE -->
+ <td>&#x2009;x <!-- U+2009: THIN SPACE -->
+ <td>&#x200A;x <!-- U+200A: HAIR SPACE -->
+ <td>&#x200B;x <!-- U+200B: ZERO WIDTH SPACE -->
+ <td>&#x200C;x <!-- U+200C: ZERO WIDTH NON-JOINER -->
+ <td>&#x200D;x <!-- U+200D: ZERO WIDTH JOINER -->
+ <td>&#x2010;x <!-- U+2010: HYPHEN -->
+ <tr>
+ <td>&#x2013;x <!-- U+2013: EN DASH -->
+ <td>&#x2014;x <!-- U+2014: EM DASH -->
+ <td>&#x2018;x <!-- U+2018: LEFT SINGLE QUOTATION MARK -->
+ <td>&#x2019;x <!-- U+2019: RIGHT SINGLE QUOTATION MARK -->
+ <td>&#x201A;x <!-- U+201A: SINGLE LOW-9 QUOTATION MARK -->
+ <td>&#x201C;x <!-- U+201C: LEFT DOUBLE QUOTATION MARK -->
+ <td>&#x201D;x <!-- U+201D: RIGHT DOUBLE QUOTATION MARK -->
+ <td>&#x201E;x <!-- U+201E: DOUBLE LOW-9 QUOTATION MARK -->
+ <td>&#x2020;x <!-- U+2020: DAGGER -->
+ <td>&#x2021;x <!-- U+2021: DOUBLE DAGGER -->
+ <td>&#x2022;x <!-- U+2022: BULLET -->
+ <td>&#x2026;x <!-- U+2026: HORIZONTAL ELLIPSIS -->
+ <td>&#x2030;x <!-- U+2030: PER MILLE SIGN -->
+ <td>&#x2039;x <!-- U+2039: SINGLE LEFT-POINTING ANGLE QUOTATION MARK -->
+ <td>&#x203A;x <!-- U+203A: SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -->
+ <td>&#x2044;x <!-- U+2044: FRACTION SLASH -->
+ <td>&#x2122;x <!-- U+2122: TRADE MARK SIGN -->
+ <tr>
+ <td>&#x2126;x <!-- U+2126: OHM SIGN -->
+ <td>&#x2202;x <!-- U+2202: PARTIAL DIFFERENTIAL -->
+ <td>&#x2206;x <!-- U+2206: INCREMENT -->
+ <td>&#x220F;x <!-- U+220F: N-ARY PRODUCT -->
+ <td>&#x2211;x <!-- U+2211: N-ARY SUMMATION -->
+ <td>&#x2212;x <!-- U+2212: MINUS SIGN -->
+ <td>&#x2219;x <!-- U+2219: BULLET OPERATOR -->
+ <td>&#x221A;x <!-- U+221A: SQUARE ROOT -->
+ <td>&#x221E;x <!-- U+221E: INFINITY -->
+ <td>&#x222B;x <!-- U+222B: INTEGRAL -->
+ <td>&#x2248;x <!-- U+2248: ALMOST EQUAL TO -->
+ <td>&#x2260;x <!-- U+2260: NOT EQUAL TO -->
+ <td>&#x2264;x <!-- U+2264: LESS-THAN OR EQUAL TO -->
+ <td>&#x2265;x <!-- U+2265: GREATER-THAN OR EQUAL TO -->
+ <td>&#x22F2;x <!-- U+22F2: ELEMENT OF WITH LONG HORIZONTAL STROKE -->
+ <td>&#x25CA;x <!-- U+25CA: LOZENGE -->
+ <td>&#x3000;x <!-- U+3000: IDEOGRAPHIC SPACE -->
+ <tr>
+ <td>&#x3007;x <!-- U+3007: IDEOGRAPHIC NUMBER ZERO -->
+ <td>&#x4E00;x <!-- U+4E00: CJK UNIFIED IDEOGRAPH-4E00 -->
+ <td>&#x4E03;x <!-- U+4E03: CJK UNIFIED IDEOGRAPH-4E03 -->
+ <td>&#x4E09;x <!-- U+4E09: CJK UNIFIED IDEOGRAPH-4E09 -->
+ <td>&#x4E5D;x <!-- U+4E5D: CJK UNIFIED IDEOGRAPH-4E5D -->
+ <td>&#x4E8C;x <!-- U+4E8C: CJK UNIFIED IDEOGRAPH-4E8C -->
+ <td>&#x4E94;x <!-- U+4E94: CJK UNIFIED IDEOGRAPH-4E94 -->
+ <td>&#x516B;x <!-- U+516B: CJK UNIFIED IDEOGRAPH-516B -->
+ <td>&#x516D;x <!-- U+516D: CJK UNIFIED IDEOGRAPH-516D -->
+ <td>&#x5341;x <!-- U+5341: CJK UNIFIED IDEOGRAPH-5341 -->
+ <td>&#x56D7;x <!-- U+56D7: CJK UNIFIED IDEOGRAPH-56D7 -->
+ <td>&#x56DB;x <!-- U+56DB: CJK UNIFIED IDEOGRAPH-56DB -->
+ <td>&#x571F;x <!-- U+571F: CJK UNIFIED IDEOGRAPH-571F -->
+ <td>&#x6728;x <!-- U+6728: CJK UNIFIED IDEOGRAPH-6728 -->
+ <td>&#x6A2A;x <!-- U+6A2A: CJK UNIFIED IDEOGRAPH-6A2A -->
+ <td>&#x6C34;x <!-- U+6C34: CJK UNIFIED IDEOGRAPH-6C34 -->
+ <td>&#x706B;x <!-- U+706B: CJK UNIFIED IDEOGRAPH-706B -->
+ <tr>
+ <td>&#x7EB5;x <!-- U+7EB5: CJK UNIFIED IDEOGRAPH-7EB5 -->
+ <td>&#x91D1;x <!-- U+91D1: CJK UNIFIED IDEOGRAPH-91D1 -->
+ <td>&#xF000;x <!-- U+F000 -->
+ <td>&#xF001;x <!-- U+F001 -->
+ <td>&#xF002;x <!-- U+F002 -->
+ <td>&#xFEFF;x <!-- U+FEFF: ZERO WIDTH NO-BREAK SPACE -->
+</table>
diff --git a/testing/web-platform/tests/infrastructure/assumptions/allowed-to-play.html b/testing/web-platform/tests/infrastructure/assumptions/allowed-to-play.html
new file mode 100644
index 0000000000..bfa5729371
--- /dev/null
+++ b/testing/web-platform/tests/infrastructure/assumptions/allowed-to-play.html
@@ -0,0 +1,23 @@
+<!doctype html>
+<title>&lt;audio and &lt;video> autoplay</title>
+<link rel="help" href="https://html.spec.whatwg.org/multipage/media.html#dom-media-play">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/media.js"></script>
+<video></video>
+<script>
+async_test(t => {
+ const a = new Audio(getAudioURI("/media/sound_5"));
+ a.play();
+ assert_false(a.paused);
+ a.onplaying = t.step_func_done();
+}, "<audio> autoplay");
+
+async_test(t => {
+ const v = document.querySelector("video");
+ v.src = getVideoURI("/media/movie_5");
+ v.play();
+ assert_false(v.paused);
+ v.onplaying = t.step_func_done();
+}, "<video> autoplay");
+</script>
diff --git a/testing/web-platform/tests/infrastructure/assumptions/blank.html b/testing/web-platform/tests/infrastructure/assumptions/blank.html
new file mode 100644
index 0000000000..6d8da5e89c
--- /dev/null
+++ b/testing/web-platform/tests/infrastructure/assumptions/blank.html
@@ -0,0 +1,2 @@
+<title>Blank Document</title>
+<link rel=match href="about:blank">
diff --git a/testing/web-platform/tests/infrastructure/assumptions/canvas-background-ref.html b/testing/web-platform/tests/infrastructure/assumptions/canvas-background-ref.html
new file mode 100644
index 0000000000..b117f6b300
--- /dev/null
+++ b/testing/web-platform/tests/infrastructure/assumptions/canvas-background-ref.html
@@ -0,0 +1,8 @@
+<!doctype html>
+<title>canvas background reference</title>
+<style>
+html {
+ background: white;
+}
+</style>
+<p>The background should be white
diff --git a/testing/web-platform/tests/infrastructure/assumptions/canvas-background.html b/testing/web-platform/tests/infrastructure/assumptions/canvas-background.html
new file mode 100644
index 0000000000..962edf5e8b
--- /dev/null
+++ b/testing/web-platform/tests/infrastructure/assumptions/canvas-background.html
@@ -0,0 +1,4 @@
+<!doctype html>
+<title>Check canvas background is white</title>
+<link rel="match" href="canvas-background-ref.html">
+<p>The background should be white
diff --git a/testing/web-platform/tests/infrastructure/assumptions/cookie.html b/testing/web-platform/tests/infrastructure/assumptions/cookie.html
new file mode 100644
index 0000000000..5d5b0dc0e1
--- /dev/null
+++ b/testing/web-platform/tests/infrastructure/assumptions/cookie.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<title>cookies work in default browse settings</title>
+<link rel="author" title="Intel" href="http://www.intel.com">
+<link rel="help" href="https://html.spec.whatwg.org/#dom-document-cookie">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+ test(t => {
+ t.add_cleanup(() => {
+ let date = new Date();
+ date.setTime(date.getTime() - 10000);
+ document.cookie = "name=''; expires=" + date.toGMTString();
+ });
+ document.cookie = "name=test_cookie";
+ assert_not_equals(document.cookie.match(/name=test_cookie/), null);
+ });
+</script>
diff --git a/testing/web-platform/tests/infrastructure/assumptions/document-fonts-ready.html b/testing/web-platform/tests/infrastructure/assumptions/document-fonts-ready.html
new file mode 100644
index 0000000000..9fb0137025
--- /dev/null
+++ b/testing/web-platform/tests/infrastructure/assumptions/document-fonts-ready.html
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML>
+<title>document.fonts.ready resolves after layout depending on loaded fonts</title>
+<link rel="help" href="https://drafts.csswg.org/css-font-loading/#fontfaceset-pending-on-the-environment">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+ #foo {
+ font: 100px/1 Ahem;
+ }
+</style>
+<div id="log"></div>
+<span id="foo">X</span>
+<script>
+ // The purpose of this test is to ensure that testharness.js tests can use
+ // `document.fonts.ready` to wait for a web font to load, without having to
+ // wait for the window load event before or requestAnimationFrame after.
+ //
+ // The spec says that a FontFaceSet is "pending on the environment" if "the
+ // document has pending layout operations which might cause the user agent to
+ // request a font, or which depend on recently-loaded fonts", and both are
+ // assumed to hold true in this test.
+ async_test(t => {
+ assert_equals(document.fonts.size, 1, 'one font is pending');
+ document.fonts.ready.then(t.step_func_done(() => {
+ const span = document.getElementById('foo');
+ const rect = span.getBoundingClientRect();
+ // If Ahem has loaded, the X will be 100px wide.
+ assert_equals(rect.width, 100, 'span is 100px wide');
+ }));
+ });
+</script>
diff --git a/testing/web-platform/tests/infrastructure/assumptions/html-elements.html b/testing/web-platform/tests/infrastructure/assumptions/html-elements.html
new file mode 100644
index 0000000000..3fe3d201ff
--- /dev/null
+++ b/testing/web-platform/tests/infrastructure/assumptions/html-elements.html
@@ -0,0 +1,133 @@
+<!doctype html>
+<title>HTML styles</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+#parent {
+ display: none;
+}
+
+div.b {
+ all: initial;
+ direction: initial;
+ unicode-bidi: isolate;
+ display: block;
+}
+
+div.c {
+ background: red;
+ background: initial;
+}
+
+span.b {
+ all: initial;
+ direction: initial;
+ unicode-bidi: initial;
+ display: inline;
+}
+</style>
+<div id="parent">
+ <div class="a"></div>
+ <div class="b"></div>
+ <div class="c"></div>
+ <span class="a"></span>
+ <span class="b"></span>
+ <p></p>
+ <ul>
+ <li>
+ </ul>
+ <ol>
+ <li>
+ </ol>
+ <table>
+ <tbody>
+ <tr>
+ <td>
+ </table>
+</div>
+<script>
+test(function() {
+ assert_true('all' in document.documentElement.style);
+}, "(pre-req for comparison tests) all CSS short-hand supported");
+
+test(function() {
+ assert_in_array(window.getComputedStyle(document.querySelector("div.c")).backgroundColor,
+ ["rgba(0, 0, 0, 0)", "transparent"]);
+}, "(pre-req for comparison tests) initial CSS value supported");
+
+test(function() {
+ var a = document.querySelector("div.a");
+ var b = document.querySelector("div.b");
+
+ var a_styles = window.getComputedStyle(a);
+ var b_styles = window.getComputedStyle(b);
+
+ assert_equals(a_styles.length, b_styles.length, "Same properties on both div.a and div.b");
+
+ for (var i = 0; i < a_styles.length; i++) {
+ var property = a_styles[i];
+ assert_equals(property, b_styles[i], "Same property on div.a and div.b");
+ if (property !== "unicode-bidi") {
+ assert_equals(a_styles[property], b_styles[property], "Different value for " + property);
+ }
+ }
+}, "Compare CSS div definitions (only valid if pre-reqs pass)");
+
+test(function() {
+ var a = document.querySelector("span.a");
+ var b = document.querySelector("span.b");
+
+ var a_styles = window.getComputedStyle(a);
+ var b_styles = window.getComputedStyle(b);
+
+ assert_equals(a_styles.length, b_styles.length, "Same properties on both span.a and span.b");
+
+ for (var i = 0; i < a_styles.length; i++) {
+ var property = a_styles[i];
+ assert_equals(property, b_styles[i], "Same property on span.a and span.b");
+ assert_equals(a_styles[property], b_styles[property], "Different value for " + property);
+ }
+}, "Compare CSS span definitions (only valid if pre-reqs pass)");
+
+test(function() {
+ var p = document.getElementsByTagName("p")[0];
+ var styles = window.getComputedStyle(p);
+ assert_equals(styles["display"], "block");
+}, "p is display: block");
+
+test(function() {
+ var ul_li = document.querySelector("ul > li");
+ var styles = window.getComputedStyle(ul_li);
+ assert_equals(styles["display"], "list-item");
+}, "ul > li is display: list-item");
+
+test(function() {
+ var ol_li = document.querySelector("ol > li");
+ var styles = window.getComputedStyle(ol_li);
+ assert_equals(styles["display"], "list-item");
+}, "ol > li is display: list-item");
+
+test(function() {
+ var table = document.getElementsByTagName("table")[0];
+ var styles = window.getComputedStyle(table);
+ assert_equals(styles["display"], "table");
+}, "table is display: table");
+
+test(function() {
+ var tbody = document.getElementsByTagName("tbody")[0];
+ var styles = window.getComputedStyle(tbody);
+ assert_equals(styles["display"], "table-row-group");
+}, "tbody is display: table-row-group");
+
+test(function() {
+ var tr = document.getElementsByTagName("tr")[0];
+ var styles = window.getComputedStyle(tr);
+ assert_equals(styles["display"], "table-row");
+}, "tr is display: table-row");
+
+test(function() {
+ var td = document.getElementsByTagName("td")[0];
+ var styles = window.getComputedStyle(td);
+ assert_equals(styles["display"], "table-cell");
+}, "td is display: table-cell");
+</script>
diff --git a/testing/web-platform/tests/infrastructure/assumptions/initial-color-ref.html b/testing/web-platform/tests/infrastructure/assumptions/initial-color-ref.html
new file mode 100644
index 0000000000..46dd110bd3
--- /dev/null
+++ b/testing/web-platform/tests/infrastructure/assumptions/initial-color-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<title>Initial color is black reference</title>
+<style>
+html {
+ background: white;
+}
+
+p {
+ color: black;
+}
+</style>
+<p>The text should be black
diff --git a/testing/web-platform/tests/infrastructure/assumptions/initial-color.html b/testing/web-platform/tests/infrastructure/assumptions/initial-color.html
new file mode 100644
index 0000000000..f1033c7d7e
--- /dev/null
+++ b/testing/web-platform/tests/infrastructure/assumptions/initial-color.html
@@ -0,0 +1,9 @@
+<!doctype html>
+<title>Initial color is black</title>
+<link rel="match" href="initial-color-ref.html">
+<style>
+html {
+ background: white;
+}
+</style>
+<p>The text should be black
diff --git a/testing/web-platform/tests/infrastructure/assumptions/medium-font-size-ref.html b/testing/web-platform/tests/infrastructure/assumptions/medium-font-size-ref.html
new file mode 100644
index 0000000000..c1600ec419
--- /dev/null
+++ b/testing/web-platform/tests/infrastructure/assumptions/medium-font-size-ref.html
@@ -0,0 +1,8 @@
+<!doctype html>
+<title>medium font-size reference</title>
+<style>
+p {
+ font-size: 16px;
+}
+</style>
+<p>This text should be 16px
diff --git a/testing/web-platform/tests/infrastructure/assumptions/medium-font-size.html b/testing/web-platform/tests/infrastructure/assumptions/medium-font-size.html
new file mode 100644
index 0000000000..f4c303d0ba
--- /dev/null
+++ b/testing/web-platform/tests/infrastructure/assumptions/medium-font-size.html
@@ -0,0 +1,9 @@
+<!doctype html>
+<title>Check medium font-size is 16px</title>
+<link rel="match" href="medium-font-size-ref.html">
+<style>
+p {
+ font-size: medium;
+}
+</style>
+<p>This text should be 16px
diff --git a/testing/web-platform/tests/infrastructure/assumptions/min-font-size-ref.html b/testing/web-platform/tests/infrastructure/assumptions/min-font-size-ref.html
new file mode 100644
index 0000000000..013970bedf
--- /dev/null
+++ b/testing/web-platform/tests/infrastructure/assumptions/min-font-size-ref.html
@@ -0,0 +1,8 @@
+<!doctype html>
+<title>Tiny text reference</title>
+<style>
+p {
+ font-size: 2px;
+}
+</style>
+<p>Tiny text
diff --git a/testing/web-platform/tests/infrastructure/assumptions/min-font-size.html b/testing/web-platform/tests/infrastructure/assumptions/min-font-size.html
new file mode 100644
index 0000000000..a4b9a1cd36
--- /dev/null
+++ b/testing/web-platform/tests/infrastructure/assumptions/min-font-size.html
@@ -0,0 +1,9 @@
+<!doctype html>
+<title>Check 1px and 2px font-sizes are different</title>
+<link rel="mismatch" href="min-font-size-ref.html">
+<style>
+p {
+ font-size: 1px;
+}
+</style>
+<p>Tiny text
diff --git a/testing/web-platform/tests/infrastructure/assumptions/non-local-ports.sub.window.js b/testing/web-platform/tests/infrastructure/assumptions/non-local-ports.sub.window.js
new file mode 100644
index 0000000000..06ecb3ab21
--- /dev/null
+++ b/testing/web-platform/tests/infrastructure/assumptions/non-local-ports.sub.window.js
@@ -0,0 +1,111 @@
+// Verifies that non-local HTTP(S) ports are open and serve correctly.
+//
+// See the corresponding WPT RFC:
+// https://github.com/web-platform-tests/rfcs/blob/master/rfcs/address_space_overrides.md
+//
+// These ports are used to test the Local Network Access specification:
+// https://wicg.github.io/local-network-access/
+//
+// More tests can be found in `fetch/local-network-access/`.
+
+const alternatePorts = {
+ httpPrivate: "{{ports[http-private][0]}}",
+ httpsPrivate: "{{ports[https-private][0]}}",
+ httpPublic: "{{ports[http-public][0]}}",
+ httpsPublic: "{{ports[https-public][0]}}",
+};
+
+// Resolves a URL relative to the current location, returning an absolute URL.
+//
+// `url` specifies the relative URL, e.g. "foo.html" or "http://foo.example".
+// `options.protocol` and `options.port`, if defined, override the respective
+// properties of the returned URL object.
+function resolveUrl(url, options) {
+ const result = new URL(url, window.location);
+ if (options === undefined) {
+ return result;
+ }
+
+ const { port, protocol } = options;
+ if (port !== undefined) {
+ result.port = port;
+ }
+ if (protocol !== undefined) {
+ result.protocol = protocol;
+ }
+
+ return result;
+}
+
+const alternateOrigins = {
+ httpPrivate: {
+ protocol: "http:",
+ port: alternatePorts.httpPrivate,
+ },
+ httpsPrivate: {
+ protocol: "https:",
+ port: alternatePorts.httpsPrivate,
+ },
+ httpPublic: {
+ protocol: "http:",
+ port: alternatePorts.httpPublic,
+ },
+ httpsPublic: {
+ protocol: "https:",
+ port: alternatePorts.httpsPublic,
+ },
+};
+
+promise_test(async () => {
+ const url =
+ resolveUrl("/common/blank-with-cors.html", alternateOrigins.httpsPrivate);
+ const response = await fetch(url);
+ assert_true(response.ok);
+}, "Fetch from https-private port works.");
+
+promise_test(async () => {
+ const url =
+ resolveUrl("/common/blank-with-cors.html", alternateOrigins.httpPrivate);
+ const response = await fetch(url);
+ assert_true(response.ok);
+}, "Fetch from http-private port works.");
+
+promise_test(async () => {
+ const url =
+ resolveUrl("/common/blank-with-cors.html", alternateOrigins.httpsPublic);
+ const response = await fetch(url);
+ assert_true(response.ok);
+}, "Fetch from https-public port works.");
+
+promise_test(async () => {
+ const url =
+ resolveUrl("/common/blank-with-cors.html", alternateOrigins.httpPublic);
+ const response = await fetch(url);
+ assert_true(response.ok);
+}, "Fetch from http-public port works.");
+
+promise_test(async (t) => {
+ const futureMessage = new Promise((resolve) => {
+ window.addEventListener("message", resolve);
+ });
+
+ const iframe = await new Promise((resolve, reject) => {
+ const iframe = document.createElement("iframe");
+ iframe.src = resolveUrl("resources/fetch-and-post-result.html",
+ alternateOrigins.httpPublic);
+
+ iframe.onload = () => { resolve(iframe); };
+ iframe.onerror = reject;
+
+ document.body.appendChild(iframe);
+ t.add_cleanup(() => {
+ document.body.removeChild(iframe);
+ });
+ });
+
+ iframe.contentWindow.postMessage(
+ resolveUrl("/common/blank-with-cors.html").toString(), "*");
+
+ const evt = await futureMessage;
+ assert_equals(evt.data, "failure: error = TypeError");
+}, "Fetch from http-public to local http fails.");
diff --git a/testing/web-platform/tests/infrastructure/assumptions/non-secure-context.any.js b/testing/web-platform/tests/infrastructure/assumptions/non-secure-context.any.js
new file mode 100644
index 0000000000..c05689fe76
--- /dev/null
+++ b/testing/web-platform/tests/infrastructure/assumptions/non-secure-context.any.js
@@ -0,0 +1,9 @@
+test(() => {
+ assert_false(self.isSecureContext);
+}, "Lack of .https file name flag implies non-secure context");
+
+test(() => {
+ assert_equals(location.protocol, "http:");
+}, "Lack of .https file name flag implies HTTP scheme");
+
+done();
diff --git a/testing/web-platform/tests/infrastructure/assumptions/resources/fetch-and-post-result.html b/testing/web-platform/tests/infrastructure/assumptions/resources/fetch-and-post-result.html
new file mode 100644
index 0000000000..4df0c4c71a
--- /dev/null
+++ b/testing/web-platform/tests/infrastructure/assumptions/resources/fetch-and-post-result.html
@@ -0,0 +1,12 @@
+<script>
+ window.addEventListener("message", function (event) {
+ fetch(event.data)
+ .then(response => {
+ parent.postMessage(`success: status = ${response.status}`, "*");
+ })
+ .catch(error => {
+ parent.postMessage(`failure: error = ${error.name}`, "*")
+ });
+ });
+</script>
+
diff --git a/testing/web-platform/tests/infrastructure/assumptions/tools/ahem-generate-table.py b/testing/web-platform/tests/infrastructure/assumptions/tools/ahem-generate-table.py
new file mode 100644
index 0000000000..314279f671
--- /dev/null
+++ b/testing/web-platform/tests/infrastructure/assumptions/tools/ahem-generate-table.py
@@ -0,0 +1,127 @@
+import itertools
+import unicodedata
+
+from fontTools.ttLib import TTFont
+
+try:
+ chr(0x100)
+except ValueError:
+ chr = unichr
+
+def grouper(n, iterable):
+ """
+ >>> list(grouper(3, 'ABCDEFG'))
+ [['A', 'B', 'C'], ['D', 'E', 'F'], ['G']]
+ """
+ iterable = iter(iterable)
+ return iter(lambda: list(itertools.islice(iterable, n)), [])
+
+ttf = TTFont("../../../fonts/Ahem.ttf")
+
+chars = {char for table in ttf['cmap'].tables for char in table.cmap.keys()}
+
+# exclude chars that can't be represented as HTML numeric character refs
+chars = chars - (set(range(0x80, 0x9F+1)) | {0x00})
+
+chars_sorted = sorted(chars)
+
+per_row = 17
+
+
+doctype = "<!doctype html>"
+title = "<title>Ahem checker</title>"
+style_open = """
+<style>
+* {
+ padding: 0;
+ margin: 0;
+ border: none;
+}
+td {
+ width: 34px;
+}""".strip()
+style_close = "</style>"
+style_font_face = """
+@font-face {
+ font-family: Ahem;
+ src: url("../../fonts/Ahem.ttf");
+}""".strip()
+style_table_font_specified = """
+table {
+ font: 15px/1 Ahem;
+ border-collapse: separate;
+ border-spacing: 1px;
+ table-layout: fixed;
+}""".strip()
+style_table_font_unspecified = """
+table {
+ font-size: 15px;
+ line-height: 1;
+ border-collapse: separate;
+ border-spacing: 1px;
+ table-layout: fixed;
+}""".strip()
+
+
+def build_header(is_test, rel, href):
+ rv = [doctype, title]
+
+ if rel != None and href != None:
+ rv.append('<link rel="%s" href="%s">' % (rel, href))
+
+ rv.append(style_open)
+
+ if not is_test:
+ if rel == None and href == None:
+ # ahem-notref.html
+ rv.append(style_table_font_unspecified)
+ else:
+ # ahem-ref.html
+ rv.append(style_font_face)
+ rv.append(style_table_font_specified)
+ else:
+ # ahem.html
+ rv.append(style_table_font_specified)
+
+ rv.append(style_close)
+
+ return "\n".join(rv)
+
+
+def build_table():
+ rv = ["\n"]
+
+ rv.append("<table>\n")
+ for row in grouper(per_row, chars_sorted):
+ rv.append(" " * 4 + "<tr>\n")
+ for codepoint in row:
+ assert codepoint <= 0xFFFF
+ try:
+ name = unicodedata.name(chr(codepoint))
+ except ValueError:
+ rv.append(" " * 8 + "<td>&#x%04X;x <!-- U+%04X -->\n" % (codepoint, codepoint))
+ else:
+ rv.append(" " * 8 + "<td>&#x%04X;x <!-- U+%04X: %s -->\n" % (codepoint, codepoint, name))
+ rv.append("</table>\n")
+
+ return "".join(rv)
+
+
+cases = [
+ # file, is_test, rel
+ ("../ahem.html", True, "match"),
+ ("../ahem-ref.html", False, "mismatch"),
+ ("../ahem-notref.html", False, None),
+]
+
+table = build_table()
+
+for index, case in enumerate(cases):
+ next_index = index + 1
+ file, is_test, rel = case
+ href = cases[next_index][0][3:] if next_index < len(cases) else None
+ header = build_header(is_test, rel, href)
+
+ with open(file, "w") as file:
+ file.write("%s%s" % (header, table))
+