summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/css/css-fonts
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /testing/web-platform/tests/css/css-fonts
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/css/css-fonts')
-rw-r--r--testing/web-platform/tests/css/css-fonts/META.yml7
-rw-r--r--testing/web-platform/tests/css/css-fonts/README12
-rw-r--r--testing/web-platform/tests/css/css-fonts/alternates-order-ref.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/alternates-order.html125
-rw-r--r--testing/web-platform/tests/css/css-fonts/animations/font-palette-animation-not-specified-endpoints.html67
-rw-r--r--testing/web-platform/tests/css/css-fonts/animations/font-palette-interpolation.html142
-rw-r--r--testing/web-platform/tests/css/css-fonts/animations/font-size-adjust-composition.html665
-rw-r--r--testing/web-platform/tests/css/css-fonts/animations/font-size-adjust-interpolation.html169
-rw-r--r--testing/web-platform/tests/css/css-fonts/animations/font-size-interpolation-001.html103
-rw-r--r--testing/web-platform/tests/css/css-fonts/animations/font-size-interpolation-002.html49
-rw-r--r--testing/web-platform/tests/css/css-fonts/animations/font-size-interpolation-003.html47
-rw-r--r--testing/web-platform/tests/css/css-fonts/animations/font-stretch-interpolation.html164
-rw-r--r--testing/web-platform/tests/css/css-fonts/animations/font-style-interpolation.html122
-rw-r--r--testing/web-platform/tests/css/css-fonts/animations/font-variation-settings-composition.html102
-rw-r--r--testing/web-platform/tests/css/css-fonts/animations/font-variation-settings-interpolation.html161
-rw-r--r--testing/web-platform/tests/css/css-fonts/animations/multiple-elements-font-palette-animation.html61
-rw-r--r--testing/web-platform/tests/css/css-fonts/animations/system-fonts.html70
-rw-r--r--testing/web-platform/tests/css/css-fonts/ascent-descent-override-ref.html47
-rw-r--r--testing/web-platform/tests/css/css-fonts/ascent-descent-override.html43
-rw-r--r--testing/web-platform/tests/css/css-fonts/calc-in-font-variation-settings.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/cjk-kerning.html129
-rw-r--r--testing/web-platform/tests/css/css-fonts/crash-font-face-invalid-descriptor.html13
-rw-r--r--testing/web-platform/tests/css/css-fonts/crash-large-grapheme-cluster.html14
-rw-r--r--testing/web-platform/tests/css/css-fonts/discrete-no-interpolation.html88
-rw-r--r--testing/web-platform/tests/css/css-fonts/downloadable-font-in-iframe-print-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/downloadable-font-in-iframe-print.html26
-rw-r--r--testing/web-platform/tests/css/css-fonts/downloadable-font-print-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/downloadable-font-print.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/fallback-remote-to-data-url.html59
-rw-r--r--testing/web-platform/tests/css/css-fonts/fallback-url-to-local.html30
-rw-r--r--testing/web-platform/tests/css/css-fonts/first-available-font-001-ref.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/first-available-font-001.html43
-rw-r--r--testing/web-platform/tests/css/css-fonts/first-available-font-002-ref.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/first-available-font-002.html43
-rw-r--r--testing/web-platform/tests/css/css-fonts/first-available-font-003-ref.html28
-rw-r--r--testing/web-platform/tests/css/css-fonts/first-available-font-003.html49
-rw-r--r--testing/web-platform/tests/css/css-fonts/first-available-font-004.html54
-rw-r--r--testing/web-platform/tests/css/css-fonts/first-available-font-005-ref.html5
-rw-r--r--testing/web-platform/tests/css/css-fonts/first-available-font-005.html63
-rw-r--r--testing/web-platform/tests/css/css-fonts/first-available-font-006.html65
-rw-r--r--testing/web-platform/tests/css/css-fonts/first-available-font-007.html51
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-colorization-ref.html13
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-colorization.html22
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-default-01-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-default-01.html27
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-default-02-ref.html28
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-default-02.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-default-03-ref.html28
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-default-03.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-default-04-a-ref.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-default-04-b-ref.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-default-04-c-ref.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-default-04.html45
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-display/font-display-change-ref.html72
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-display/font-display-change.html84
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-display/font-display-failure-fallback.html37
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-display/font-display-feature-policy-02.tentative-ref.html30
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-display/font-display-feature-policy-02.tentative.html46
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-display/font-display-feature-policy-02.tentative.html.headers1
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-display/font-display-preload-ref.html17
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-display/font-display-preload.html51
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-display/font-display-ref.html78
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-display/font-display.html74
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-face-local-css-wide-keyword-crash.html10
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-face-range-order.html31
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-face-stretch-auto-static-ref.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-face-stretch-auto-static.html22
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-face-stretch-auto-variable-ref.html56
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-face-stretch-auto-variable.html59
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-face-stretch-default-variable-ref.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-face-stretch-default-variable.html34
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-face-style-auto-static-ref.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-face-style-auto-static.html22
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-face-style-auto-variable-ref.html31
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-face-style-auto-variable.html34
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-face-style-default-variable-ref.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-face-style-default-variable.html27
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-face-unicode-range-2-ref.html27
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-face-unicode-range-2.html35
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-face-unicode-range-nbsp-ref.html31
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-face-unicode-range-nbsp.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-face-unicode-range.html29
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-face-weight-auto-static-ref.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-face-weight-auto-static.html22
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-face-weight-auto-variable-ref.html44
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-face-weight-auto-variable.html47
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-face-weight-default-variable-ref.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-face-weight-default-variable.html34
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-000.xht26
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-001.xht24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-002.xht24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-003.xht23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-004.xht23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-005.xht23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-006.xht23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-007.xht23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-008.xht23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-009.xht23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-010.xht24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-011.xht24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-012.xht23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-013.xht23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-014.xht23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-015.xht24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-016-ref.xht20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-016.xht23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-017.xht24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-018.xht24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-019.xht24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-020.xht24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-021.xht26
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-022-ref.xht21
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-022.xht30
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-023-ref.xht24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-023.xht38
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-024-ref.xht20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-024.xht47
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-025-ref.html16
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-025.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-mixcase-ref.xht20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-name-ref.xht21
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-family-src-quoted.html74
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-feature-resolution-001-ref.html356
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-feature-resolution-001.html383
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-feature-resolution-002-ref.html356
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-feature-resolution-002.html383
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-feature-settings-descriptor-01-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-feature-settings-descriptor-01.html39
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-feature-settings-serialization-001.html34
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-feature-settings-tibetan-ref.html11
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-feature-settings-tibetan.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-features-across-space-1-ref.html44
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-features-across-space-1.html48
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-features-across-space-2.html48
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-features-across-space-3.html50
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-features-two-stylesheets-crash.html10
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-kerning-01-ref.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-kerning-01.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-kerning-02-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-kerning-02.html35
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-kerning-03-ref.html26
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-kerning-03.html37
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-kerning-04-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-kerning-04.html35
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-kerning-05-ref.html26
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-kerning-05.html37
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-language-override-01-ref.html27
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-language-override-01.html31
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-language-override-02-notref.html27
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-language-override-02-ref.html27
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-language-override-02.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-language-override-03.html31
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-10-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-10.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-11-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-11.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-12-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-12.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-13-notref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-13.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-14-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-14.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-15-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-15.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-16-notref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-16.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-17-notref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-17.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-18-notref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-18.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-19-notref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-19.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-2-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-2.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-20-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-20.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-21-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-21.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-22-notref.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-22.html26
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-23-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-23.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-24-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-24.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-25-ref.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-25.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-26-ref.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-26.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-27-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-27.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-28-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-28.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-29-ref.html34
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-29.html35
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-3-notref.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-3.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-30-ref.html34
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-30.html30
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-31-ref.html29
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-31.html36
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-32-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-32.html30
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-33-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-33.html30
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-34-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-34.html30
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-35-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-35.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-36-ref.html22
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-36.html34
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-4-notref.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-4.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-5-notref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-5.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-6-notref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-6.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-7-notref.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-7.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-8-notref.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-8.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-9-notref.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-9.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-add-2-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-add-2.html37
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-add-notref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-add.html37
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-empty-font-family-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-empty-font-family.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-modify-2-ref.html29
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-modify-2.html43
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-modify-notref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-modify.html44
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-non-ident-font-family-ref.html22
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-non-ident-font-family.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-remove-2-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-remove-2.html37
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-remove-notref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-remove.html37
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette-vs-shorthand.html90
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-palette.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-shorthand-serialization-001.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-shorthand-serialization-font-stretch.html87
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-shorthand-serialization-prevention.html96
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-shorthand-subproperties-reset.html48
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-001-ref.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-001.html27
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-002-ref.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-002.html27
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-003.xht147
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-005.xht37
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-006.xht48
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-007.xht48
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-008.xht48
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-009-ref.html40
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-009.html47
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-010.html47
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-011.html47
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-012-ref.html70
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-012.html75
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-013-ref.html60
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-013.html65
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-014-ref.html53
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-014.html78
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-generic-font-fallback-crash.html11
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-interpolation-math-functions.tentative.html47
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-metrics-override-ref.html58
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-metrics-override.html55
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-nan-crash.html7
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-order-001-ref.html17
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-order-001.html42
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-reload-ref.html26
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-reload.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-text-orientation-ref.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-text-orientation.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-units-001-ref.html26
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-units-001.html40
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-zero-1.html18
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-adjust-zero-2.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-monospace-adjust-ref.html5
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-monospace-adjust.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-relative-across-calc-ff-bug-001.html15
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-xxx-large-ref.html8
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-xxx-large.html11
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-zero-1-notref.html12
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-zero-1-ref.html15
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-zero-1.html18
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-zero-2-ref.html12
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-size-zero-2.html18
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-stretch-01.html31
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-stretch-02.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-stretch-03.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-stretch-04.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-stretch-05.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-stretch-06.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-stretch-07.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-stretch-08.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-stretch-09.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-stretch-10.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-stretch-11.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-stretch-12.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-stretch-13.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-stretch-14.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-stretch-15.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-stretch-16.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-stretch-17.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-stretch-18.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-stretch-interpolation-math-functions.tentative.html46
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-stretch-pass-ref.html22
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-style-angle.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-01-ref.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-01.html31
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-02-ref.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-02.html31
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-03-ref.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-03.html31
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-04-ref.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-04.html31
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-05-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-05.html29
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-06-ref.html16
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-06.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-07-ref.html16
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-07.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-08-ref.html31
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-08.html43
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-position-001-ref.html30
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-position-001.html44
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-first-letter-ref.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-first-letter.html31
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-first-line-ref.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-first-line.html30
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-not-applied-ref.html22
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-not-applied.html31
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-ref.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps.html31
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-style-binary-ref.html22
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-style-binary.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-style-first-letter-ref.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-style-first-letter.html31
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-style-first-line-ref.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-style-first-line.html29
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-style-ref.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-style.html30
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-weight-binary-ref.html22
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-weight-binary.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-weight-first-letter-ref.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-weight-first-letter.html31
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-weight-first-line-ref.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-weight-first-line.html29
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-weight-ref.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-synthesis-weight.html30
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-01-ref.html28
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-01.html41
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-02-ref.html28
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-02.html41
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-03-ref.html28
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-03.html38
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-04-ref.html28
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-04.html38
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-01-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-01.html36
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-02-ref.html26
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-02.html35
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-03-ref.html31
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-03.html44
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-04-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-04.html43
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-05-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-05.html43
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-06-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-06.html44
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-07-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-07.html43
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-08-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-08.html43
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-09-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-09.html44
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-10-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-10.html43
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-11-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-11.html43
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-12-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-12.html44
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-13-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-13.html43
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-14-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-14.html43
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-15-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-15.html44
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-16-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-16.html43
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-17-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-17.html43
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-18-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-18.html44
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-19-ref.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-19.html57
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-layers-ref.html26
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-layers.html78
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-alternates-parsing.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-caps-01-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-caps-01.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-caps-02-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-caps-02.html36
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-caps-03-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-caps-03.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-caps-04-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-caps-04.html36
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-caps-05-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-caps-05.html36
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-caps-06-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-caps-06.html36
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-caps-07-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-caps-07.html36
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-caps-ref.html17
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-caps.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-debug.html22
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-east-asian-01-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-east-asian-01.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-east-asian-02-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-east-asian-02.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-east-asian-03-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-east-asian-03.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-east-asian-04-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-east-asian-04.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-east-asian-05-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-east-asian-05.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-east-asian-06-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-east-asian-06.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-east-asian-07-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-east-asian-07.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-east-asian-08-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-east-asian-08.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-east-asian-09-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-east-asian-09.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-east-asian-10-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-east-asian-10.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-east-asian-ref.html17
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-east-asian.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-emoji-1-notref.html8
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-emoji-1.html14
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-emoji-2-ref.html13
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-emoji-2.html17
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-ligatures-01-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-ligatures-01.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-ligatures-02-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-ligatures-02.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-ligatures-03-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-ligatures-03.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-ligatures-04-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-ligatures-04.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-ligatures-05-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-ligatures-05.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-ligatures-06-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-ligatures-06.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-ligatures-07-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-ligatures-07.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-ligatures-08-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-ligatures-08.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-ligatures-09-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-ligatures-09.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-ligatures-10-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-ligatures-10.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-ligatures-11-ref.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-ligatures-11.optional.html34
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-ligatures-ref.html17
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-ligatures.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-numeric-01-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-numeric-01.html37
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-numeric-02-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-numeric-02.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-numeric-03-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-numeric-03.html35
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-numeric-04-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-numeric-04.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-numeric-05-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-numeric-05.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-numeric-06-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-numeric-06.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-numeric-07-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-numeric-07.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-numeric-08-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-numeric-08.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-numeric-09-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-numeric-09.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-numeric-ref.html17
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-numeric.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-position-01-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-position-01.html34
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-position-02-ref.html26
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-position-02.html34
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-position-03-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-position-03.html34
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-position-04-notref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-position-04.html29
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-position-05-notref.html28
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-position-05.html31
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-position-ref.html17
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variant-position.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-variation-settings-serialization-001.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-weight-bolder-001-ref.xht60
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-weight-bolder-001.xht71
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-weight-lighter-001-ref.xht60
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-weight-lighter-001.xht71
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-weight-normal-001-ref.xht60
-rw-r--r--testing/web-platform/tests/css/css-fonts/font-weight-normal-001.xht71
-rw-r--r--testing/web-platform/tests/css/css-fonts/format-specifiers-variations.html57
-rw-r--r--testing/web-platform/tests/css/css-fonts/generic-family-keywords-001.html56
-rw-r--r--testing/web-platform/tests/css/css-fonts/generic-family-keywords-002.html44
-rw-r--r--testing/web-platform/tests/css/css-fonts/generic-family-keywords-003.html53
-rw-r--r--testing/web-platform/tests/css/css-fonts/hiragana-katakana-kerning-notref.html43
-rw-r--r--testing/web-platform/tests/css/css-fonts/hiragana-katakana-kerning.html50
-rw-r--r--testing/web-platform/tests/css/css-fonts/idlharness.html34
-rw-r--r--testing/web-platform/tests/css/css-fonts/infinite-size-crash.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/inheritance.html51
-rw-r--r--testing/web-platform/tests/css/css-fonts/language-specific-01.html34
-rw-r--r--testing/web-platform/tests/css/css-fonts/line-gap-override-ref.html26
-rw-r--r--testing/web-platform/tests/css/css-fonts/line-gap-override.html26
-rw-r--r--testing/web-platform/tests/css/css-fonts/matching/META.yml5
-rw-r--r--testing/web-platform/tests/css/css-fonts/matching/README.md50
-rw-r--r--testing/web-platform/tests/css/css-fonts/matching/fixed-stretch-style-over-weight-ref.html28
-rw-r--r--testing/web-platform/tests/css/css-fonts/matching/fixed-stretch-style-over-weight.html39
-rw-r--r--testing/web-platform/tests/css/css-fonts/matching/font-matching.css60
-rw-r--r--testing/web-platform/tests/css/css-fonts/matching/font-unicode-PUA-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/matching/font-unicode-PUA.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/matching/range-descriptor-reversed-ref.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/matching/range-descriptor-reversed.html28
-rw-r--r--testing/web-platform/tests/css/css-fonts/matching/resources/variabletest_matching.ttfbin0 -> 4648 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/matching/stretch-distance-over-weight-distance-ref.html28
-rw-r--r--testing/web-platform/tests/css/css-fonts/matching/stretch-distance-over-weight-distance.html63
-rw-r--r--testing/web-platform/tests/css/css-fonts/matching/style-ranges-over-weight-direction-ref.html28
-rw-r--r--testing/web-platform/tests/css/css-fonts/matching/style-ranges-over-weight-direction.html65
-rw-r--r--testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/font-size-math-001.tentative-ref.html37
-rw-r--r--testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/font-size-math-001.tentative.html41
-rw-r--r--testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/font-size-math-002.tentative-ref.html29
-rw-r--r--testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/font-size-math-002.tentative.html33
-rw-r--r--testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-depth-001-crash.html44
-rw-r--r--testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-001.tentative.html87
-rw-r--r--testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-002.tentative.html194
-rw-r--r--testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-003.tentative-ref.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-003.tentative.html31
-rw-r--r--testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-004.tentative.html410
-rw-r--r--testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-001.tentative-ref.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-001.tentative.html26
-rw-r--r--testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-002.tentative-ref.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-002.tentative.html26
-rw-r--r--testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-003.tentative-ref.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-003.tentative.html26
-rw-r--r--testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-004.tentative-ref.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-004.tentative.html30
-rw-r--r--testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-005.tentative-ref.html27
-rw-r--r--testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-005.tentative.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-font-size-clamping-001.tentative-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-font-size-clamping-001.tentative.html27
-rw-r--r--testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-style-001.tentative.html43
-rw-r--r--testing/web-platform/tests/css/css-fonts/metrics-override-normal-keyword-ref.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/metrics-override-normal-keyword.html34
-rw-r--r--testing/web-platform/tests/css/css-fonts/palette-mix-computed.html43
-rw-r--r--testing/web-platform/tests/css/css-fonts/palette-values-rule-add-2-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/palette-values-rule-add-2.html38
-rw-r--r--testing/web-platform/tests/css/css-fonts/palette-values-rule-add-notref.html18
-rw-r--r--testing/web-platform/tests/css/css-fonts/palette-values-rule-add.html38
-rw-r--r--testing/web-platform/tests/css/css-fonts/palette-values-rule-delete-2-ref.html18
-rw-r--r--testing/web-platform/tests/css/css-fonts/palette-values-rule-delete-2.html37
-rw-r--r--testing/web-platform/tests/css/css-fonts/palette-values-rule-delete-notref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/palette-values-rule-delete.html37
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/ahem-ex-500.otfbin0 -> 23904 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-computed.html251
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-face-src-format.html74
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-face-src-list.html45
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-face-src-local.html45
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-face-src-tech.html94
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-family-computed.html29
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-family-invalid.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-family-valid.html29
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-feature-settings-computed.html30
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-feature-settings-invalid.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-feature-settings-valid.html28
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-invalid.html35
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-kerning-computed.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-kerning-invalid.html18
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-kerning-valid.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-language-override-computed.html22
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-language-override-invalid.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-language-override-valid.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-optical-sizing-computed.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-optical-sizing-invalid.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-optical-sizing-valid.html18
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-palette-computed.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-palette-invalid.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-palette-valid.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-palette-values-invalid.html288
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-palette-values-valid.html390
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-shorthand-variant.html30
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-size-adjust-computed.html50
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-size-adjust-invalid.html83
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-size-adjust-valid.html31
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-size-computed.html73
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-size-invalid.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-size-valid.html35
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-stretch-computed.html28
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-stretch-invalid.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-stretch-valid.html27
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-style-computed.html26
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-style-invalid.html18
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-style-valid.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-computed.html31
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-invalid.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-position-invalid.html18
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-position-valid.html18
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-small-caps-invalid.html18
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-small-caps-valid.html18
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-style-invalid.html18
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-style-valid.html18
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-valid.html30
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-weight-invalid.html18
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-weight-valid.html18
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-valid.html205
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variant-alternates-invalid.html57
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variant-alternates-valid.html34
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variant-caps-computed.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variant-caps-invalid.html18
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variant-caps-valid.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variant-east-asian-computed.html35
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variant-east-asian-invalid.html29
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variant-east-asian-valid.html34
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variant-emoji-computed.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variant-emoji-invalid.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variant-emoji-valid.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variant-invalid.html67
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variant-ligatures-computed.html35
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variant-ligatures-invalid.html27
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variant-ligatures-valid.html34
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variant-numeric-computed.html38
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variant-numeric-invalid.html30
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variant-numeric-valid.html39
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variant-position-computed.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variant-position-invalid.html18
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variant-position-valid.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variant-serialization.html59
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variant-valid.html106
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variation-settings-computed.html35
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variation-settings-invalid.html38
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-variation-settings-valid.html26
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-weight-computed.html61
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-weight-invalid.html18
-rw-r--r--testing/web-platform/tests/css/css-fonts/parsing/font-weight-valid.html29
-rw-r--r--testing/web-platform/tests/css/css-fonts/quoted-generic-ignored-ref.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/quoted-generic-ignored.html29
-rw-r--r--testing/web-platform/tests/css/css-fonts/rcap-in-monospace-ref.html22
-rw-r--r--testing/web-platform/tests/css/css-fonts/rcap-in-monospace.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/rch-in-monospace-ref.html10
-rw-r--r--testing/web-platform/tests/css/css-fonts/rch-in-monospace.html16
-rw-r--r--testing/web-platform/tests/css/css-fonts/rem-in-monospace-ref.html10
-rw-r--r--testing/web-platform/tests/css/css-fonts/rem-in-monospace.html17
-rw-r--r--testing/web-platform/tests/css/css-fonts/resources/COLR-palettes-test-font-no-light-dark.ttfbin0 -> 23896 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/resources/COLR-palettes-test-font.ttfbin0 -> 24124 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/resources/NotoSansJP-kana_test-subset.otfbin0 -> 2832 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/resources/ahem-ex-250.otfbin0 -> 22856 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/resources/ahem-ex-500.otfbin0 -> 23904 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/resources/colorization_SVG_COLR.ttfbin0 -> 1416 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/resources/markA.ttfbin0 -> 1568 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/resources/markB.ttfbin0 -> 1568 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/resources/separator-test-font.ttfbin0 -> 2328 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/rex-in-monospace-ref.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/rex-in-monospace.html27
-rw-r--r--testing/web-platform/tests/css/css-fonts/ric-in-monospace-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/ric-in-monospace.html26
-rw-r--r--testing/web-platform/tests/css/css-fonts/rlh-in-monospace-ref.html10
-rw-r--r--testing/web-platform/tests/css/css-fonts/rlh-in-monospace.html18
-rw-r--r--testing/web-platform/tests/css/css-fonts/separators-ref.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/separators.html24
-rw-r--r--testing/web-platform/tests/css/css-fonts/size-adjust-01-ref.html37
-rw-r--r--testing/web-platform/tests/css/css-fonts/size-adjust-01.html49
-rw-r--r--testing/web-platform/tests/css/css-fonts/size-adjust-02-ref.html37
-rw-r--r--testing/web-platform/tests/css/css-fonts/size-adjust-02.html48
-rw-r--r--testing/web-platform/tests/css/css-fonts/size-adjust-03-ref.html32
-rw-r--r--testing/web-platform/tests/css/css-fonts/size-adjust-03.html36
-rw-r--r--testing/web-platform/tests/css/css-fonts/size-adjust-tentative-ref.html52
-rw-r--r--testing/web-platform/tests/css/css-fonts/size-adjust-text-decoration-tentative-ref.html49
-rw-r--r--testing/web-platform/tests/css/css-fonts/size-adjust-text-decoration.tentative.html54
-rw-r--r--testing/web-platform/tests/css/css-fonts/size-adjust-unicode-range-system-fallback-ref.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/size-adjust-unicode-range-system-fallback.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/size-adjust.tentative.html57
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-10-notref.html17
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-10.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-11-notref.html11
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-11.html14
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-12-notref.html11
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-12.html14
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-13-notref.html11
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-13.html14
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-14-notref.html11
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-14.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-15-notref.html11
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-15.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-16-notref.html11
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-16.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-17-notref.html11
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-17.html14
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-18-notref.html17
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-18.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-19-notref.html11
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-19.html14
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-2-ref.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-2.html22
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-20-notref.html11
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-20.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-3-notref.html11
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-3.html14
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-4-notref.html11
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-4.html14
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-5-notref.html11
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-5.html14
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-6-ref.html16
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-6.html41
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-7-ref.html58
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-7.html61
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-8-notref.html17
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-8.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-9-notref.html17
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-9.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family-ref.html16
-rw-r--r--testing/web-platform/tests/css/css-fonts/standard-font-family.html19
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/100x100-lime.pngbin0 -> 649 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/100x100-red.pngbin0 -> 510 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/1x1-green.pngbin0 -> 135 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/1x1-lime.pngbin0 -> 135 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/1x1-maroon.pngbin0 -> 109 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/1x1-navy.pngbin0 -> 109 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/1x1-red.pngbin0 -> 135 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/1x1-white.pngbin0 -> 109 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/60x60-gg-rr.pngbin0 -> 224 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/60x60-green.pngbin0 -> 218 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/README28
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/bar_with_corner_dot.pngbin0 -> 907 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/black15x15.pngbin0 -> 168 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/black96x96.pngbin0 -> 204 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/blue-orange-rectangle.pngbin0 -> 810 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/blue15x15.pngbin0 -> 185 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/blue96x96.pngbin0 -> 1010 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/cat.pngbin0 -> 1883 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/css/font-variant-features.css63
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/diamond.pngbin0 -> 188 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/font-family-keywords.js27
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/font-weight-bolder-001-ref.pngbin0 -> 18559 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/font-weight-lighter-001-ref.pngbin0 -> 16553 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/font-weight-normal-001-ref.pngbin0 -> 17639 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/Exo-DemiBold.otfbin0 -> 110564 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/Exo2-SemiBold.otfbin0 -> 123976 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/Exo2-SemiBoldCondensed.otfbin0 -> 67940 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/Exo2-SemiBoldExpanded.otfbin0 -> 68772 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/FontWithFancyFeatures.otfbin0 -> 40432 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/FontWithFeatures2.otfbin0 -> 10720 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/Inter-VF.subset.ttfbin0 -> 3584 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/Lato-Medium-Liga.ttfbin0 -> 12836 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/Lato-Medium.ttfbin0 -> 637068 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/LigatureSymbolsWithSpaces.woffbin0 -> 52620 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/LinLibertine_Re-4.7.5.woffbin0 -> 261428 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/RobotoExtremo-VF.subset.ttfbin0 -> 4888 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/Rochester.otfbin0 -> 27260 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/fail.woffbin0 -> 2136 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-features.js85
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-features.txt251
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup1.otfbin0 -> 119784 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.otfbin0 -> 289724 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/features.fea3834
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/fontinfo.plist115
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/F_.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/M_W_L_1.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/M_W_L_1.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/M_W_L_1.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/M_W_L_1.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/M_W_L_1.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/M_W_L_1.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/N_U_M_2.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/N_U_M_2.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/N_U_M_2.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/N_U_M_2.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/N_U_M_2.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/N_U_M_2.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_R_I_V_.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_R_I_V_.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_R_I_V_.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_R_I_V_.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_R_I_V_.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_R_I_V_.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_3S_T_.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_3S_T_.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_3S_T_.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_3S_T_.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_3S_T_.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_3S_T_.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_P_S_P_.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_P_S_P_.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_P_S_P_.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_P_S_P_.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_P_S_P_.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_P_S_P_.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/_notdef.glif4
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvf.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvf.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvf.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvf.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvf.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvf.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvm.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvm.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvm.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvm.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvm.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvm.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvs.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvs.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvs.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvs.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvs.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvs.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/afrc.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/afrc.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/afrc.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/afrc.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/afrc.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/afrc.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/akhn.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/akhn.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/akhn.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/akhn.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/akhn.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/akhn.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwf.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwf.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwf.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwf.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwf.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwf.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwm.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwm.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwm.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwm.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwm.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwm.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blws.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blws.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blws.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blws.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blws.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blws.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2pc.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2pc.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2pc.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2pc.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2pc.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2pc.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2sc.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2sc.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2sc.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2sc.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2sc.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2sc.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/calt.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/calt.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/calt.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/calt.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/calt.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/calt.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/case.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/case.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/case.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/case.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/case.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/case.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ccmp.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ccmp.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ccmp.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ccmp.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ccmp.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ccmp.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cfar.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cfar.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cfar.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cfar.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cfar.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cfar.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cjct.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cjct.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cjct.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cjct.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cjct.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cjct.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/clig.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/clig.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/clig.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/clig.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/clig.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/clig.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/contents.plist2882
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpct.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpct.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpct.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpct.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpct.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpct.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpsp.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpsp.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpsp.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpsp.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpsp.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpsp.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cswh.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cswh.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cswh.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cswh.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cswh.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cswh.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/curs.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/curs.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/curs.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/curs.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/curs.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/curs.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv00.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv00.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv00.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv00.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv00.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv00.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv01.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv01.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv01.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv01.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv01.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv01.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv02.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv02.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv02.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv02.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv02.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv02.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv03.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv03.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv03.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv03.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv03.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv03.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv04.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv04.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv04.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv04.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv04.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv04.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv05.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv05.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv05.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv05.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv05.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv05.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv06.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv06.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv06.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv06.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv06.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv06.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv07.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv07.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv07.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv07.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv07.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv07.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv08.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv08.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv08.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv08.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv08.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv08.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv09.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv09.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv09.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv09.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv09.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv09.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv10.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv10.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv10.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv10.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv10.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv10.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv11.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv11.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv11.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv11.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv11.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv11.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv12.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv12.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv12.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv12.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv12.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv12.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv13.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv13.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv13.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv13.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv13.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv13.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv14.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv14.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv14.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv14.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv14.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv14.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv15.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv15.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv15.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv15.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv15.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv15.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv16.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv16.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv16.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv16.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv16.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv16.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv17.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv17.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv17.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv17.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv17.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv17.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv18.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv18.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv18.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv18.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv18.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv18.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv19.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv19.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv19.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv19.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv19.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv19.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv20.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv20.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv20.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv20.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv20.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv20.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv21.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv21.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv21.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv21.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv21.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv21.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv22.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv22.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv22.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv22.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv22.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv22.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv23.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv23.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv23.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv23.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv23.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv23.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv24.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv24.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv24.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv24.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv24.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv24.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv25.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv25.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv25.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv25.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv25.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv25.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv26.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv26.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv26.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv26.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv26.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv26.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv27.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv27.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv27.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv27.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv27.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv27.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv28.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv28.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv28.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv28.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv28.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv28.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv29.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv29.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv29.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv29.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv29.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv29.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv30.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv30.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv30.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv30.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv30.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv30.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv31.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv31.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv31.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv31.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv31.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv31.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv32.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv32.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv32.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv32.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv32.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv32.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv33.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv33.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv33.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv33.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv33.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv33.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv34.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv34.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv34.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv34.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv34.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv34.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv35.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv35.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv35.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv35.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv35.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv35.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv36.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv36.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv36.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv36.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv36.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv36.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv37.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv37.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv37.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv37.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv37.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv37.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv38.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv38.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv38.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv38.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv38.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv38.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv39.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv39.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv39.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv39.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv39.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv39.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv40.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv40.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv40.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv40.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv40.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv40.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv41.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv41.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv41.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv41.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv41.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv41.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv42.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv42.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv42.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv42.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv42.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv42.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv43.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv43.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv43.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv43.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv43.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv43.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv44.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv44.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv44.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv44.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv44.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv44.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv45.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv45.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv45.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv45.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv45.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv45.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv46.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv46.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv46.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv46.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv46.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv46.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv47.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv47.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv47.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv47.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv47.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv47.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv48.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv48.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv48.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv48.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv48.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv48.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv49.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv49.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv49.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv49.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv49.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv49.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv50.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv50.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv50.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv50.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv50.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv50.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv51.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv51.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv51.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv51.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv51.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv51.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv52.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv52.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv52.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv52.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv52.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv52.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv53.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv53.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv53.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv53.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv53.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv53.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv54.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv54.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv54.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv54.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv54.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv54.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv55.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv55.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv55.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv55.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv55.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv55.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv56.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv56.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv56.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv56.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv56.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv56.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv57.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv57.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv57.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv57.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv57.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv57.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv58.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv58.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv58.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv58.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv58.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv58.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv59.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv59.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv59.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv59.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv59.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv59.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv60.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv60.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv60.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv60.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv60.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv60.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv61.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv61.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv61.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv61.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv61.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv61.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv62.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv62.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv62.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv62.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv62.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv62.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv63.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv63.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv63.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv63.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv63.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv63.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv64.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv64.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv64.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv64.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv64.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv64.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv65.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv65.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv65.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv65.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv65.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv65.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv66.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv66.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv66.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv66.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv66.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv66.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv67.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv67.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv67.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv67.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv67.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv67.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv68.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv68.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv68.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv68.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv68.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv68.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv69.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv69.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv69.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv69.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv69.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv69.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv70.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv70.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv70.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv70.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv70.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv70.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv71.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv71.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv71.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv71.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv71.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv71.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv72.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv72.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv72.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv72.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv72.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv72.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv73.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv73.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv73.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv73.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv73.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv73.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv74.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv74.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv74.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv74.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv74.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv74.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv75.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv75.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv75.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv75.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv75.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv75.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv76.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv76.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv76.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv76.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv76.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv76.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv77.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv77.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv77.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv77.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv77.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv77.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv78.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv78.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv78.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv78.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv78.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv78.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv79.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv79.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv79.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv79.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv79.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv79.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv80.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv80.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv80.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv80.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv80.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv80.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv81.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv81.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv81.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv81.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv81.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv81.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv82.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv82.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv82.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv82.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv82.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv82.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv83.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv83.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv83.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv83.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv83.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv83.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv84.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv84.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv84.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv84.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv84.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv84.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv85.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv85.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv85.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv85.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv85.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv85.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv86.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv86.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv86.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv86.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv86.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv86.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv87.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv87.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv87.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv87.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv87.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv87.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv88.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv88.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv88.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv88.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv88.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv88.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv89.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv89.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv89.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv89.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv89.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv89.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv90.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv90.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv90.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv90.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv90.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv90.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv91.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv91.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv91.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv91.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv91.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv91.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv92.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv92.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv92.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv92.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv92.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv92.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv93.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv93.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv93.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv93.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv93.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv93.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv94.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv94.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv94.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv94.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv94.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv94.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv95.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv95.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv95.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv95.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv95.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv95.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv96.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv96.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv96.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv96.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv96.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv96.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv97.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv97.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv97.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv97.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv97.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv97.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv98.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv98.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv98.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv98.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv98.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv98.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv99.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv99.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv99.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv99.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv99.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv99.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dist.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dist.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dist.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dist.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dist.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dist.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dlig.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dlig.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dlig.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dlig.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dlig.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dlig.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dnom.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dnom.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dnom.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dnom.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dnom.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dnom.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/expt.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/expt.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/expt.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/expt.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/expt.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/expt.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/falt.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/falt.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/falt.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/falt.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/falt.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/falt.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin2.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin2.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin2.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin2.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin2.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin2.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin3.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin3.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin3.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin3.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin3.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin3.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fina.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fina.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fina.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fina.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fina.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fina.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/frac.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/frac.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/frac.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/frac.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/frac.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/frac.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fwid.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fwid.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fwid.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fwid.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fwid.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fwid.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/half.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/half.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/half.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/half.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/half.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/half.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/haln.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/haln.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/haln.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/haln.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/haln.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/haln.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/halt.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/halt.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/halt.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/halt.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/halt.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/halt.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hist.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hist.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hist.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hist.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hist.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hist.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hkna.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hkna.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hkna.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hkna.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hkna.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hkna.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hlig.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hlig.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hlig.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hlig.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hlig.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hlig.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hngl.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hngl.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hngl.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hngl.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hngl.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hngl.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hojo.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hojo.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hojo.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hojo.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hojo.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hojo.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hwid.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hwid.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hwid.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hwid.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hwid.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hwid.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/init.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/init.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/init.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/init.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/init.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/init.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/isol.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/isol.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/isol.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/isol.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/isol.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/isol.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ital.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ital.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ital.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ital.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ital.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ital.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jalt.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jalt.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jalt.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jalt.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jalt.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jalt.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp04.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp04.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp04.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp04.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp04.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp04.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp78.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp78.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp78.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp78.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp78.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp78.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp83.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp83.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp83.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp83.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp83.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp83.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp90.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp90.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp90.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp90.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp90.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp90.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/kern.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/kern.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/kern.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/kern.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/kern.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/kern.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lfbd.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lfbd.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lfbd.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lfbd.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lfbd.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lfbd.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/liga.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/liga.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/liga.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/liga.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/liga.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/liga.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ljmo.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ljmo.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ljmo.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ljmo.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ljmo.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ljmo.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lnum.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lnum.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lnum.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lnum.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lnum.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lnum.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/locl.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/locl.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/locl.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/locl.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/locl.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/locl.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltra.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltra.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltra.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltra.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltra.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltra.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltrm.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltrm.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltrm.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltrm.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltrm.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltrm.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mark.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mark.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mark.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mark.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mark.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mark.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/med2.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/med2.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/med2.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/med2.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/med2.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/med2.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/medi.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/medi.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/medi.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/medi.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/medi.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/medi.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mgrk.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mgrk.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mgrk.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mgrk.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mgrk.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mgrk.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mkmk.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mkmk.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mkmk.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mkmk.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mkmk.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mkmk.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mset.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mset.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mset.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mset.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mset.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mset.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nalt.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nalt.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nalt.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nalt.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nalt.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nalt.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nlck.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nlck.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nlck.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nlck.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nlck.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nlck.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nukt.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nukt.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nukt.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nukt.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nukt.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nukt.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/numr.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/numr.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/numr.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/numr.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/numr.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/numr.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/onum.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/onum.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/onum.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/onum.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/onum.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/onum.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/opbd.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/opbd.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/opbd.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/opbd.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/opbd.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/opbd.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ordn.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ordn.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ordn.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ordn.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ordn.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ordn.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ornm.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ornm.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ornm.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ornm.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ornm.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ornm.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/palt.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/palt.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/palt.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/palt.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/palt.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/palt.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pcap.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pcap.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pcap.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pcap.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pcap.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pcap.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pkna.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pkna.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pkna.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pkna.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pkna.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pkna.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pnum.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pnum.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pnum.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pnum.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pnum.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pnum.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pref.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pref.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pref.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pref.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pref.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pref.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pres.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pres.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pres.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pres.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pres.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pres.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pstf.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pstf.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pstf.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pstf.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pstf.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pstf.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/psts.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/psts.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/psts.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/psts.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/psts.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/psts.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pwid.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pwid.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pwid.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pwid.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pwid.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pwid.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/qwid.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/qwid.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/qwid.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/qwid.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/qwid.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/qwid.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rand.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rand.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rand.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rand.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rand.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rand.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rkrf.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rkrf.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rkrf.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rkrf.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rkrf.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rkrf.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rlig.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rlig.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rlig.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rlig.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rlig.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rlig.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rphf.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rphf.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rphf.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rphf.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rphf.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rphf.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtbd.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtbd.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtbd.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtbd.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtbd.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtbd.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtla.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtla.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtla.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtla.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtla.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtla.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtlm.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtlm.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtlm.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtlm.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtlm.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtlm.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ruby.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ruby.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ruby.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ruby.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ruby.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ruby.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/salt.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/salt.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/salt.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/salt.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/salt.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/salt.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sinf.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sinf.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sinf.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sinf.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sinf.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sinf.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/size.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/size.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/size.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/size.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/size.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/size.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smcp.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smcp.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smcp.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smcp.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smcp.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smcp.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smpl.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smpl.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smpl.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smpl.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smpl.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smpl.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/space.glif5
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss00.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss00.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss00.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss00.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss00.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss00.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss01.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss01.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss01.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss01.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss01.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss01.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss02.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss02.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss02.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss02.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss02.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss02.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss03.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss03.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss03.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss03.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss03.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss03.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss04.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss04.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss04.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss04.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss04.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss04.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss05.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss05.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss05.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss05.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss05.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss05.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss06.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss06.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss06.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss06.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss06.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss06.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss07.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss07.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss07.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss07.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss07.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss07.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss08.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss08.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss08.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss08.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss08.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss08.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss09.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss09.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss09.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss09.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss09.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss09.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss10.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss10.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss10.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss10.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss10.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss10.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss11.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss11.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss11.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss11.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss11.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss11.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss12.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss12.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss12.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss12.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss12.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss12.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss13.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss13.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss13.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss13.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss13.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss13.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss14.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss14.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss14.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss14.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss14.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss14.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss15.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss15.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss15.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss15.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss15.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss15.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss16.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss16.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss16.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss16.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss16.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss16.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss17.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss17.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss17.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss17.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss17.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss17.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss18.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss18.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss18.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss18.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss18.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss18.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss19.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss19.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss19.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss19.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss19.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss19.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss20.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss20.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss20.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss20.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss20.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss20.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss21.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss21.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss21.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss21.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss21.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss21.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/subs.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/subs.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/subs.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/subs.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/subs.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/subs.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sups.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sups.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sups.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sups.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sups.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sups.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/swsh.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/swsh.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/swsh.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/swsh.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/swsh.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/swsh.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/titl.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/titl.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/titl.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/titl.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/titl.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/titl.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tjmo.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tjmo.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tjmo.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tjmo.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tjmo.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tjmo.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnam.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnam.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnam.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnam.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnam.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnam.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnum.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnum.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnum.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnum.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnum.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnum.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/trad.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/trad.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/trad.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/trad.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/trad.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/trad.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/twid.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/twid.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/twid.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/twid.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/twid.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/twid.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/unic.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/unic.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/unic.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/unic.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/unic.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/unic.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/valt.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/valt.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/valt.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/valt.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/valt.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/valt.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vatu.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vatu.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vatu.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vatu.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vatu.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vatu.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vert.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vert.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vert.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vert.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vert.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vert.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vhal.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vhal.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vhal.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vhal.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vhal.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vhal.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vjmo.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vjmo.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vjmo.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vjmo.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vjmo.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vjmo.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkna.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkna.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkna.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkna.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkna.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkna.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkrn.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkrn.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkrn.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkrn.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkrn.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkrn.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vpal.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vpal.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vpal.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vpal.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vpal.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vpal.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vrt2.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vrt2.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vrt2.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vrt2.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vrt2.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vrt2.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/zero.alt1.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/zero.alt2.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/zero.alt3.glif48
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/zero.default.glif166
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/zero.fail.glif47
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/zero.pass.glif165
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/metainfo.plist10
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-shell.ttx304
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/makegsubfonts.py485
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/pass.woffbin0 -> 2112 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/fonts/roboto_var_light_range.ttfbin0 -> 2452 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/green15x15.pngbin0 -> 170 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/green_box.pngbin0 -> 502 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/js/font-variant-features.js220
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/margin-collapse-2em-space.pngbin0 -> 1331 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/margin-collapse-4em-space.pngbin0 -> 1370 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/orange15x15.pngbin0 -> 958 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/orange_box.pngbin0 -> 957 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/pattern-grg-rgr-grg.pngbin0 -> 222 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/pattern-grg-rrg-rgg.pngbin0 -> 231 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/pattern-rgr-grg-rgr.pngbin0 -> 223 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/pattern-tr.pngbin0 -> 137 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/red15x15.pngbin0 -> 922 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/red_box.pngbin0 -> 510 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/ring.pngbin0 -> 715 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/square-purple.pngbin0 -> 92 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/square-teal.pngbin0 -> 92 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/square-white.pngbin0 -> 78 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/swatch-aqua.pngbin0 -> 175 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/swatch-blue.pngbin0 -> 84 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/swatch-green.pngbin0 -> 84 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/swatch-lime.pngbin0 -> 84 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/swatch-orange.pngbin0 -> 84 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/swatch-red.pngbin0 -> 84 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/swatch-teal.pngbin0 -> 156 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/swatch-white.pngbin0 -> 85 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/swatch-yellow.pngbin0 -> 84 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/test-bl.pngbin0 -> 1368 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/test-br.pngbin0 -> 1045 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/test-outer.pngbin0 -> 2412 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/test-tl.pngbin0 -> 1025 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/test-tr.pngbin0 -> 1235 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/support/transparent_green.pngbin0 -> 657 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/system-fonts-serialization.tentative.html64
-rw-r--r--testing/web-platform/tests/css/css-fonts/system-ui-ar-notref.html18
-rw-r--r--testing/web-platform/tests/css/css-fonts/system-ui-ar.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/system-ui-ja-notref.html17
-rw-r--r--testing/web-platform/tests/css/css-fonts/system-ui-ja-vs-zh.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/system-ui-ja.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/system-ui-mixed-ref.html11
-rw-r--r--testing/web-platform/tests/css/css-fonts/system-ui-mixed.html14
-rw-r--r--testing/web-platform/tests/css/css-fonts/system-ui-notref.html9
-rw-r--r--testing/web-platform/tests/css/css-fonts/system-ui-ur-notref.html18
-rw-r--r--testing/web-platform/tests/css/css-fonts/system-ui-ur-vs-ar.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/system-ui-ur.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/system-ui-zh-notref.html17
-rw-r--r--testing/web-platform/tests/css/css-fonts/system-ui-zh.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/system-ui.html13
-rw-r--r--testing/web-platform/tests/css/css-fonts/test-synthetic-bold.xht28
-rw-r--r--testing/web-platform/tests/css/css-fonts/test-synthetic-italic-2-ref.html38
-rw-r--r--testing/web-platform/tests/css/css-fonts/test-synthetic-italic-2.html68
-rw-r--r--testing/web-platform/tests/css/css-fonts/test-synthetic-italic-3-ref.html35
-rw-r--r--testing/web-platform/tests/css/css-fonts/test-synthetic-italic-3.html60
-rw-r--r--testing/web-platform/tests/css/css-fonts/test-synthetic-italic.xht28
-rw-r--r--testing/web-platform/tests/css/css-fonts/test_datafont_same_origin.html43
-rw-r--r--testing/web-platform/tests/css/css-fonts/test_font_family_parsing.html282
-rw-r--r--testing/web-platform/tests/css/css-fonts/test_font_feature_values_parsing.html355
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/META.yml5
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/at-font-face-descriptors.html174
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/at-font-face-font-matching.html195
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/font-descriptor-range-reversed-ref.html39
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/font-descriptor-range-reversed.html56
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/font-opentype-collections.html41
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/font-parse-numeric-stretch-style-weight.html146
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/font-shorthand.html69
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/font-slant-1-ref.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/font-slant-1.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/font-slant-2-ref.html18
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/font-slant-2a.html22
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/font-slant-2b.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/font-slant-2c.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/font-slant-3-ref.html23
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/font-slant-3.html27
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/font-stretch.html84
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/font-style-interpolation.html89
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/font-style-parsing.html62
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/font-variation-settings-inherit.html48
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/font-weight-interpolation.html84
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/font-weight-lighter-bolder.html58
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/font-weight-matching-installed-fonts.html114
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/font-weight-matching.html135
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/font-weight-metrics-ref.html29
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/font-weight-metrics.html45
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/font-weight-parsing.html53
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/FontStyleTest-slnt-VF.woff2bin0 -> 20348 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/FontStyleTest-slnt_backslant-VF.woff2bin0 -> 25612 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/Inter.no-var.subset.ttfbin0 -> 2184 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/Inter.var.subset.ttfbin0 -> 5080 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/ahem.ttcbin0 -> 16028 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-100-kerned.ttfbin0 -> 9044 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-1479-w1-kerned.ttfbin0 -> 9296 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-1479-w4-kerned.ttfbin0 -> 9232 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-1479-w7-kerned.ttfbin0 -> 9240 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-1479-w9-kerned.ttfbin0 -> 9240 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-15-w1-kerned.ttfbin0 -> 9252 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-15-w5-kerned.ttfbin0 -> 9200 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-200-kerned.ttfbin0 -> 9044 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-24-w2-kerned.ttfbin0 -> 9200 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-24-w4-kerned.ttfbin0 -> 9188 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-2569-w2-kerned.ttfbin0 -> 9240 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-2569-w5-kerned.ttfbin0 -> 9240 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-2569-w6-kerned.ttfbin0 -> 9240 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-2569-w9-kerned.ttfbin0 -> 9240 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-258-w2-kerned.ttfbin0 -> 9220 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-258-w5-kerned.ttfbin0 -> 9220 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-258-w8-kerned.ttfbin0 -> 9220 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-300-kerned.ttfbin0 -> 9044 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-3589-w3-kerned.ttfbin0 -> 9240 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-3589-w5-kerned.ttfbin0 -> 9240 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-3589-w8-kerned.ttfbin0 -> 9240 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-3589-w9-kerned.ttfbin0 -> 9240 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-400-kerned.ttfbin0 -> 9044 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-47-w4-kerned.ttfbin0 -> 9188 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-47-w7-kerned.ttfbin0 -> 9200 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-500-kerned.ttfbin0 -> 9044 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-600-kerned.ttfbin0 -> 9044 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-700-kerned.ttfbin0 -> 9044 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-800-kerned.ttfbin0 -> 9044 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-900-kerned.ttfbin0 -> 9044 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w1-kerned.ttfbin0 -> 9272 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w2-kerned.ttfbin0 -> 9220 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w3-kerned.ttfbin0 -> 9220 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w4-kerned.ttfbin0 -> 9212 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w5-kerned.ttfbin0 -> 9220 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w6-kerned.ttfbin0 -> 9220 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w7-kerned.ttfbin0 -> 9220 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w8-kerned.ttfbin0 -> 9220 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w9-kerned.ttfbin0 -> 9220 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/resources/variabletest_box.ttfbin0 -> 4032 bytes
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/slnt-backslant-variable-ref.html30
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/slnt-backslant-variable.html41
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/slnt-variable-ref.html25
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/slnt-variable.html36
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/variable-box-font-ref.html20
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/variable-box-font.html31
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/variable-gpos-m2b-ref.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/variable-gpos-m2b.html45
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/variable-gsub-ref.html21
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/variable-gsub.html34
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/variable-opsz-ref.html27
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/variable-opsz-size-adjust-ref.html31
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/variable-opsz-size-adjust.html39
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/variable-opsz.html34
2355 files changed, 162773 insertions, 0 deletions
diff --git a/testing/web-platform/tests/css/css-fonts/META.yml b/testing/web-platform/tests/css/css-fonts/META.yml
new file mode 100644
index 0000000000..e5ea857ec9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/META.yml
@@ -0,0 +1,7 @@
+spec: https://drafts.csswg.org/css-fonts/
+suggested_reviewers:
+ - svgeesus
+ - litherum
+ - drott
+ - jfkthame
+
diff --git a/testing/web-platform/tests/css/css-fonts/README b/testing/web-platform/tests/css/css-fonts/README
new file mode 100644
index 0000000000..c10f0c1dd0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/README
@@ -0,0 +1,12 @@
+These are a simple set of reftests for testing CSS 2.1 Fonts. They require the fonts in the fonts subdirectory to be installed on the machine where the test is run.
+
+To run the tests:
+
+1. Load test-prerequisites.xht to verify fonts have been installed.
+
+2. Run through the tests in fontreftest.list. '==' indicates that the two pages should render identically, != that they should not.
+
+The fonts are modified versions of Gentium Basic, licensed by SIL under the Open Font License which allows modifications as long as the terms of the license are met.
+
+The original fonts were used to create the family 'CSSTest Basic', this family has four faces and can be used for testing bold / italics. A subsetted version of this font with only glyphs for basic ASCII characters 'CSSTest ASCII'. This was used to make the other variations. Most of the modications are to the name table and character maps, for the most part glyphs were not modified.
+
diff --git a/testing/web-platform/tests/css/css-fonts/alternates-order-ref.html b/testing/web-platform/tests/css/css-fonts/alternates-order-ref.html
new file mode 100644
index 0000000000..fdb477fe16
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/alternates-order-ref.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>CSS Test: feature value matching for font-variant-alternates</title>
+<link rel="author" title="John Daggett" href="mailto:jdaggett@mozilla.com"/>
+<style type="text/css">
+@font-face {
+ font-family: libertine;
+ src: url(support/fonts/LinLibertine_Re-4.7.5.woff) format("woff");
+}
+body {
+ font-family: libertine, sans-serif;
+ font-size: 800%;
+ line-height: 1.2em;
+}
+
+div { margin: 0 20px; }
+span {
+ font-feature-settings: "ss05"; /* crossed W */
+}
+
+/* tests that should NOT use the feature, due to case-sensitivity of font-feature-values names */
+#test2, #test3 { font-feature-settings: "ss05" off; }
+
+</style>
+</head>
+<body lang="en">
+<div><span id="test1">W</span> <span id="test2">W</span> <span id="test3">W</span></div>
+<div><span id="test4">W</span> <span id="test5">W</span> <span id="test6">W</span></div>
+<div><span id="test7">W</span> <span id="test8">W</span> <span id="test9">W</span></div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/alternates-order.html b/testing/web-platform/tests/css/css-fonts/alternates-order.html
new file mode 100644
index 0000000000..64bae31b87
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/alternates-order.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>CSS Test: feature value matching for font-variant-alternates</title>
+<link rel="author" title="John Daggett" href="mailto:jdaggett@mozilla.com"/>
+<link rel="help" href="http://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop"/>
+<link rel="help" href="http://www.w3.org/TR/css-fonts-4/#font-feature-values"/>
+<link rel="match" href="alternates-order-ref.html"/>
+
+<meta name="assert" content="Case and order of font family name or feature name should not affect alternate rendered"/>
+<style type="text/css">
+@font-face {
+ font-family: libertine;
+ src: url(support/fonts/LinLibertine_Re-4.7.5.woff) format("woff");
+}
+
+@font-face {
+ font-family: fontA;
+ src: url(support/fonts/LinLibertine_Re-4.7.5.woff) format("woff");
+ font-feature-settings: "ss05" on;
+}
+
+@font-face {
+ font-family: fontB;
+ src: url(support/fonts/LinLibertine_Re-4.7.5.woff) format("woff");
+ font-feature-settings: "ss05" off;
+}
+
+@font-feature-values libertine {
+ @styleset {
+ crossed-doubleu: 5;
+ somethingElse: 4;
+ }
+}
+
+@font-feature-values fontA {
+ @styleset { aLtW: 5; }
+}
+
+@font-feature-values fontB {
+ @styleset { crossedW: 5; several: 1 3 5; }
+ @styleset { altW: 4; }
+}
+
+@font-feature-values fontB {
+ @styleset {
+ AlTw: 5;
+ defined-for-fontB: 5;
+ scriptJ: 3;
+ }
+}
+
+body {
+ font-family: libertine, sans-serif;
+ font-size: 800%;
+ line-height: 1.2em;
+}
+
+/* -moz-font-feature-settings: "ss05"; crossed W */
+
+div { margin: 0 20px; }
+
+#test1 {
+ font-variant-alternates: styleset(crossed-doubleu);
+}
+
+#test2 {
+ /* testing case-sensitivity of styleset name */
+ font-family: fontB;
+ font-variant-alternates: styleset(altW);
+}
+
+#test3 {
+ /* testing case-sensitivity of styleset name */
+ font-family: fontB;
+ font-variant-alternates: styleset(ALTW);
+}
+
+#test4 {
+ /* testing escapes in styleset name */
+ font-family: fontB;
+ font-variant-alternates: styleset(\41 lTw);
+}
+
+#test5 {
+ /* testing font-specificity of feature value rule */
+ font-family: fontA;
+ font-variant-alternates: styleset(defined-for-fontB);
+}
+
+#test6 {
+ /* testing one feature doesn't affect another */
+ font-variant-alternates: styleset(somethingElse);
+ -moz-font-feature-settings: "ss05" on;
+ font-feature-settings: "ss05" on;
+}
+
+#test7 {
+ /* testing font-specificity of feature value rule */
+ font-family: fontA;
+ font-variant-alternates: styleset(scriptJ);
+ -moz-font-feature-settings: "ss06";
+ font-feature-settings: "ss06";
+}
+
+#test8 {
+ /* testing that an undefined value doesn't affect the results */
+ font-family: fontB;
+ font-variant-alternates: styleset(scriptJ, somethingUndefined, defined-for-fontB);
+}
+
+#test9 {
+ /* testing matching of font name with escape */
+ font-family: font\62 ;
+ font-variant-alternates: styleset(defined-for-fontB);
+}
+
+</style>
+</head>
+<body lang="en">
+<div><span id="test1">W</span> <span id="test2">W</span> <span id="test3">W</span></div>
+<div><span id="test4">W</span> <span id="test5">W</span> <span id="test6">W</span></div>
+<div><span id="test7">W</span> <span id="test8">W</span> <span id="test9">W</span></div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/animations/font-palette-animation-not-specified-endpoints.html b/testing/web-platform/tests/css/css-fonts/animations/font-palette-animation-not-specified-endpoints.html
new file mode 100644
index 0000000000..1539bd18a1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/animations/font-palette-animation-not-specified-endpoints.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>Font-palette animation with unspecified endpoints keyframes</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#propdef-font-palette">
+<meta name="assert" content="Font-palette should be animated if `from` and `to` keyframes are not specified.">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+ @font-face {
+ font-family: "COLR-test-font";
+ src: url("../resources/COLR-palettes-test-font.ttf") format("truetype");
+ }
+ @font-palette-values --custom {
+ font-family: "COLR-test-font";
+ base-palette: 3;
+ }
+ @keyframes animFrom {
+ from {
+ font-palette: --custom;
+ }
+ }
+ @keyframes animTo {
+ to {
+ font-palette: --custom;
+ }
+ }
+ .demo {
+ font-family: "COLR-test-font";
+ font-size: 130px;
+ }
+ .animFrom {
+ animation: animFrom 0.1s forwards;
+ }
+ .animTo {
+ animation: animTo 0.1s forwards;
+ }
+</style>
+
+<body>
+ <div class="demo">
+ <div id="a" class="animTo">A</div>
+ <div id="b" class="animFrom" style="font-palette: --custom;">A</div>
+ </div>
+</body>
+
+<script>
+ var afterPaletteAnimationTest1 = async_test(
+ "Verify font-palette is animated when `from` keyframe is not specified"
+ );
+ document.getElementById("a").addEventListener("animationend",
+ afterPaletteAnimationTest1.step_func_done(function() {
+ assert_equals(window.getComputedStyle(
+ document.getElementById("a"))
+ .getPropertyValue('font-palette'), "--custom");
+ }));
+
+ var afterPaletteAnimationTest2 = async_test(
+ "Verify font-palette is animated when `to` keyframe is not specified"
+ );
+ document.getElementById("b").addEventListener("animationend",
+ afterPaletteAnimationTest2.step_func_done(function() {
+ assert_equals(window.getComputedStyle(
+ document.getElementById("b"))
+ .getPropertyValue('font-palette'), "normal");
+ }));
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/animations/font-palette-interpolation.html b/testing/web-platform/tests/css/css-fonts/animations/font-palette-interpolation.html
new file mode 100644
index 0000000000..43e1368412
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/animations/font-palette-interpolation.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>font-palette interpolation</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#propdef-font-palette">
+<meta name="assert" content="Font-palette should be animated smoothly.">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+<style>
+@font-palette-values --custom-palette {
+ font-family: "Color font";
+ base-palette: 0;
+ override-colors: 1 #000000;
+}
+
+.container {
+ font-palette: light;
+}
+.container2 {
+ font-palette: dark;
+}
+.target {
+ display: inline-block;
+ font: 100px sans-serif;
+ font-palette: normal;
+}
+.expected {
+ color: green;
+ margin-right: 30px;
+}
+</style>
+
+<body>
+<template id="target-template">
+ <span class="container">
+ <div class="target">TT</div>
+ </span>
+</template>
+
+<span id="inv-container" class="container">
+ <div id="inv-target" class="target">TT</div>
+</span>
+</body>
+
+<script>
+
+test_interpolation({
+ property: 'font-palette',
+ from: 'light',
+ to: 'dark'
+}, [
+ {at: -2, expect: 'light'},
+ {at: -0.25, expect: 'light'},
+ {at: 0, expect: 'light'},
+ {at: 0.3, expect: 'palette-mix(in oklab, light, dark 30%)'},
+ {at: 0.6, expect: 'palette-mix(in oklab, light, dark 60%)'},
+ {at: 1, expect: 'dark'},
+ {at: 1.5, expect: 'dark'},
+]);
+
+test_interpolation({
+ property: 'font-palette',
+ from: 'initial',
+ to: 'inherit'
+}, [
+ {at: -2, expect: 'normal'},
+ {at: -0.25, expect: 'normal'},
+ {at: 0, expect: 'normal'},
+ {at: 0.3, expect: 'palette-mix(in oklab, normal, light 30%)'},
+ {at: 0.6, expect: 'palette-mix(in oklab, normal, light 60%)'},
+ {at: 1, expect: 'light'},
+ {at: 1.5, expect: 'light'},
+]);
+
+test_interpolation({
+ property: 'font-palette',
+ from: '--custom-palette',
+ to: 'normal'
+}, [
+ {at: -2, expect: '--custom-palette'},
+ {at: -0.25, expect: '--custom-palette'},
+ {at: 0, expect: '--custom-palette'},
+ {at: 0.3, expect: 'palette-mix(in oklab, --custom-palette, normal 30%)'},
+ {at: 0.6, expect: 'palette-mix(in oklab, --custom-palette, normal 60%)'},
+ {at: 1, expect: 'normal'},
+ {at: 1.5, expect: 'normal'},
+]);
+
+/* palette-mix function for the equal endpoints should be simplified. */
+test_interpolation({
+ property: 'font-palette',
+ from: 'initial',
+ to: 'normal'
+}, [
+ {at: -2, expect: 'normal'},
+ {at: -0.25, expect: 'normal'},
+ {at: 0, expect: 'normal'},
+ {at: 0.3, expect: 'normal'},
+ {at: 0.6, expect: 'normal'},
+ {at: 1, expect: 'normal'},
+ {at: 1.5, expect: 'normal'},
+]);
+
+test(t => {
+ var container = document.getElementById('inv-container');
+ var target = document.getElementById('inv-target');
+ var anim = target.animate({ fontPalette: ['normal', 'inherit'] }, 1000);
+ anim.pause();
+ anim.currentTime = 500;
+ assert_equals(getComputedStyle(target).fontPalette, 'palette-mix(in oklab, normal, light)');
+
+ container.setAttribute('class', 'container2');
+ assert_equals(getComputedStyle(target).fontPalette, 'palette-mix(in oklab, normal, dark)');
+}, "An interpolation to inherit updates correctly on a parent style change.");
+
+test(t => {
+ var target = document.getElementById('inv-target');
+ target.animate(
+ { fontPalette: ['light', 'normal'] },
+ {
+ duration: 1000
+ }
+ );
+ target.animate(
+ { fontPalette: ['normal', 'dark'] },
+ {
+ duration: 1000,
+ /* Should work like 'replace', since <Color> type is not additive,
+ compare: https://drafts.csswg.org/css-values-4/#combine-colors. */
+ composite: "add"
+ }
+ );
+ document.getAnimations().forEach((animation) => {
+ animation.pause();
+ animation.currentTime = 500;
+ });
+ assert_equals(getComputedStyle(target).fontPalette,
+ "palette-mix(in oklab, normal, dark)");
+}, "Test additive animations");
+
+</script> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/animations/font-size-adjust-composition.html b/testing/web-platform/tests/css/css-fonts/animations/font-size-adjust-composition.html
new file mode 100644
index 0000000000..d98b0ffd10
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/animations/font-size-adjust-composition.html
@@ -0,0 +1,665 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>font-size-adjust composition</title>
+<link rel="author" title="ChangSeok Oh" href="mailto:changseok@webkit.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-5/#font-size-adjust-prop">
+<meta name="assert" content="font-size-adjust supports animation with two value font metrics">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<body></body>
+
+<script>
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "0.5",
+ replaceFrom: "none",
+ addTo: "2.0",
+}, [
+ {at: -0.5, expect: "none"},
+ {at: 0, expect: "none"},
+ {at: 0.5, expect: "2.5"},
+ {at: 1, expect: "2.5"},
+ {at: 1.5, expect: "2.5"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "0.5",
+ addFrom: "0.0",
+ addTo: "2.0",
+}, [
+ {at: -0.5, expect: "0.0"},
+ {at: 0, expect: "0.5"},
+ {at: 0.5, expect: "1.5"},
+ {at: 1, expect: "2.5"},
+ {at: 1.5, expect: "3.5"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "0.5",
+ replaceFrom: "0.0",
+ addTo: "2.0",
+}, [
+ {at: -0.5, expect: "0.0"},
+ {at: 0, expect: "0.0"},
+ {at: 0.5, expect: "1.25"},
+ {at: 1, expect: "2.5"},
+ {at: 1.5, expect: "3.75"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "0.5",
+ addFrom: "0.0",
+ replaceTo: "2.0",
+}, [
+ {at: -0.5, expect: "0.0"},
+ {at: 0, expect: "0.5"},
+ {at: 0.5, expect: "1.25"},
+ {at: 1, expect: "2.0"},
+ {at: 1.5, expect: "2.75"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "0.5",
+ replaceFrom: "2.0",
+ addTo: "none",
+}, [
+ {at: -0.5, expect: "2.0"},
+ {at: 0, expect: "2.0"},
+ {at: 0.5, expect: "none"},
+ {at: 1, expect: "none"},
+ {at: 1.5, expect: "none"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "ex-height 0.5",
+ replaceFrom: "none",
+ addTo: "ex-height 2.0",
+}, [
+ {at: -0.5, expect: "none"},
+ {at: 0, expect: "none"},
+ {at: 0.5, expect: "2.5"},
+ {at: 1, expect: "2.5"},
+ {at: 1.5, expect: "2.5"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "ex-height 0.5",
+ addFrom: "ex-height 0",
+ addTo: "ex-height 2.0",
+}, [
+ {at: -0.5, expect: "0.0"},
+ {at: 0, expect: "0.5"},
+ {at: 0.5, expect: "1.5"},
+ {at: 1, expect: "2.5"},
+ {at: 1.5, expect: "3.5"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "ex-height 0.5",
+ replaceFrom: "ex-height 0",
+ addTo: "ex-height 2.0",
+}, [
+ {at: -0.5, expect: "0.0"},
+ {at: 0, expect: "0.0"},
+ {at: 0.5, expect: "1.25"},
+ {at: 1, expect: "2.5"},
+ {at: 1.5, expect: "3.75"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "ex-height 0.5",
+ addFrom: "ex-height 0",
+ replaceTo: "ex-height 2.0",
+}, [
+ {at: -0.5, expect: "0.0"},
+ {at: 0, expect: "0.5"},
+ {at: 0.5, expect: "1.25"},
+ {at: 1, expect: "2.0"},
+ {at: 1.5, expect: "2.75"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "ex-height 0.5",
+ replaceFrom: "ex-height 2.0",
+ addTo: "none",
+}, [
+ {at: -0.5, expect: "2.0"},
+ {at: 0, expect: "2.0"},
+ {at: 0.5, expect: "none"},
+ {at: 1, expect: "none"},
+ {at: 1.5, expect: "none"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "cap-height 0.5",
+ replaceFrom: "none",
+ addTo: "cap-height 2.0",
+}, [
+ {at: -0.5, expect: "none"},
+ {at: 0, expect: "none"},
+ {at: 0.5, expect: "cap-height 2.5"},
+ {at: 1, expect: "cap-height 2.5"},
+ {at: 1.5, expect: "cap-height 2.5"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "cap-height 0.5",
+ addFrom: "cap-height 0",
+ addTo: "cap-height 2.0",
+}, [
+ {at: -0.5, expect: "cap-height 0.0"},
+ {at: 0, expect: "cap-height 0.5"},
+ {at: 0.5, expect: "cap-height 1.5"},
+ {at: 1, expect: "cap-height 2.5"},
+ {at: 1.5, expect: "cap-height 3.5"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "cap-height 0.5",
+ replaceFrom: "cap-height 0",
+ addTo: "cap-height 2.0",
+}, [
+ {at: -0.5, expect: "cap-height 0.0"},
+ {at: 0, expect: "cap-height 0.0"},
+ {at: 0.5, expect: "cap-height 1.25"},
+ {at: 1, expect: "cap-height 2.5"},
+ {at: 1.5, expect: "cap-height 3.75"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "cap-height 0.5",
+ addFrom: "cap-height 0.0",
+ replaceTo: "cap-height 2.0",
+}, [
+ {at: -0.5, expect: "cap-height 0.0"},
+ {at: 0, expect: "cap-height 0.5"},
+ {at: 0.5, expect: "cap-height 1.25"},
+ {at: 1, expect: "cap-height 2"},
+ {at: 1.5, expect: "cap-height 2.75"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "cap-height 0.5",
+ replaceFrom: "cap-height 2.0",
+ addTo: "none",
+}, [
+ {at: -0.5, expect: "cap-height 2.0"},
+ {at: 0, expect: "cap-height 2.0"},
+ {at: 0.5, expect: "none"},
+ {at: 1, expect: "none"},
+ {at: 1.5, expect: "none"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "ch-width 0.5",
+ replaceFrom: "none",
+ addTo: "ch-width 2.0",
+}, [
+ {at: -0.5, expect: "none"},
+ {at: 0, expect: "none"},
+ {at: 0.5, expect: "ch-width 2.5"},
+ {at: 1, expect: "ch-width 2.5"},
+ {at: 1.5, expect: "ch-width 2.5"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "ch-width 0.5",
+ addFrom: "ch-width 0",
+ addTo: "ch-width 2.0",
+}, [
+ {at: -0.5, expect: "ch-width 0.0"},
+ {at: 0, expect: "ch-width 0.5"},
+ {at: 0.5, expect: "ch-width 1.5"},
+ {at: 1, expect: "ch-width 2.5"},
+ {at: 1.5, expect: "ch-width 3.5"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "ch-width 0.5",
+ replaceFrom: "ch-width 0",
+ addTo: "ch-width 2.0",
+}, [
+ {at: -0.5, expect: "ch-width 0.0"},
+ {at: 0, expect: "ch-width 0.0"},
+ {at: 0.5, expect: "ch-width 1.25"},
+ {at: 1, expect: "ch-width 2.5"},
+ {at: 1.5, expect: "ch-width 3.75"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "ch-width 0.5",
+ addFrom: "ch-width 0",
+ replaceTo: "ch-width 2.0",
+}, [
+ {at: -0.5, expect: "ch-width 0.0"},
+ {at: 0, expect: "ch-width 0.5"},
+ {at: 0.5, expect: "ch-width 1.25"},
+ {at: 1, expect: "ch-width 2"},
+ {at: 1.5, expect: "ch-width 2.75"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "ch-width 0.5",
+ replaceFrom: "ch-width 2.0",
+ addTo: "none",
+}, [
+ {at: -0.5, expect: "ch-width 2.0"},
+ {at: 0, expect: "ch-width 2.0"},
+ {at: 0.5, expect: "none"},
+ {at: 1, expect: "none"},
+ {at: 1.5, expect: "none"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "ic-width 0.5",
+ replaceFrom: "none",
+ addTo: "ic-width 2.0",
+}, [
+ {at: -0.5, expect: "none"},
+ {at: 0, expect: "none"},
+ {at: 0.5, expect: "ic-width 2.5"},
+ {at: 1, expect: "ic-width 2.5"},
+ {at: 1.5, expect: "ic-width 2.5"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "ic-width 0.5",
+ addFrom: "ic-width 0",
+ addTo: "ic-width 2.0",
+}, [
+ {at: -0.5, expect: "ic-width 0.0"},
+ {at: 0, expect: "ic-width 0.5"},
+ {at: 0.5, expect: "ic-width 1.5"},
+ {at: 1, expect: "ic-width 2.5"},
+ {at: 1.5, expect: "ic-width 3.5"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "ic-width 0.5",
+ replaceFrom: "ic-width 0",
+ addTo: "ic-width 2.0",
+}, [
+ {at: -0.5, expect: "ic-width 0.0"},
+ {at: 0, expect: "ic-width 0.0"},
+ {at: 0.5, expect: "ic-width 1.25"},
+ {at: 1, expect: "ic-width 2.5"},
+ {at: 1.5, expect: "ic-width 3.75"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "ic-width 0.5",
+ addFrom: "ic-width 0",
+ replaceTo: "ic-width 2.0",
+}, [
+ {at: -0.5, expect: "ic-width 0.0"},
+ {at: 0, expect: "ic-width 0.5"},
+ {at: 0.5, expect: "ic-width 1.25"},
+ {at: 1, expect: "ic-width 2"},
+ {at: 1.5, expect: "ic-width 2.75"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "ic-width 0.5",
+ replaceFrom: "ic-width 2.0",
+ addTo: "none",
+}, [
+ {at: -0.5, expect: "ic-width 2.0"},
+ {at: 0, expect: "ic-width 2.0"},
+ {at: 0.5, expect: "none"},
+ {at: 1, expect: "none"},
+ {at: 1.5, expect: "none"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "ic-height 0.5",
+ replaceFrom: "none",
+ addTo: "ic-height 2.0",
+}, [
+ {at: -0.5, expect: "none"},
+ {at: 0, expect: "none"},
+ {at: 0.5, expect: "ic-height 2.5"},
+ {at: 1, expect: "ic-height 2.5"},
+ {at: 1.5, expect: "ic-height 2.5"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "ic-height 0.5",
+ addFrom: "ic-height 0",
+ addTo: "ic-height 2.0",
+}, [
+ {at: -0.5, expect: "ic-height 0.0"},
+ {at: 0, expect: "ic-height 0.5"},
+ {at: 0.5, expect: "ic-height 1.5"},
+ {at: 1, expect: "ic-height 2.5"},
+ {at: 1.5, expect: "ic-height 3.5"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "ic-height 0.5",
+ replaceFrom: "ic-height 0",
+ addTo: "ic-height 2.0",
+}, [
+ {at: -0.5, expect: "ic-height 0.0"},
+ {at: 0, expect: "ic-height 0.0"},
+ {at: 0.5, expect: "ic-height 1.25"},
+ {at: 1, expect: "ic-height 2.5"},
+ {at: 1.5, expect: "ic-height 3.75"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "ic-height 0.5",
+ addFrom: "ic-height 0",
+ replaceTo: "ic-height 2.0",
+}, [
+ {at: -0.5, expect: "ic-height 0.0"},
+ {at: 0, expect: "ic-height 0.5"},
+ {at: 0.5, expect: "ic-height 1.25"},
+ {at: 1, expect: "ic-height 2"},
+ {at: 1.5, expect: "ic-height 2.75"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "ic-height 0.5",
+ replaceFrom: "ic-height 2.0",
+ addTo: "none",
+}, [
+ {at: -0.5, expect: "ic-height 2.0"},
+ {at: 0, expect: "ic-height 2.0"},
+ {at: 0.5, expect: "none"},
+ {at: 1, expect: "none"},
+ {at: 1.5, expect: "none"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "0.5",
+ addFrom: "ex-height 0.0",
+ addTo: "cap-height 2.0",
+}, [
+ {at: -0.5, expect: "0.5"},
+ {at: 0, expect: "0.5"},
+ {at: 0.5, expect: "cap-height 2.0"},
+ {at: 1, expect: "cap-height 2.0"},
+ {at: 1.5, expect: "cap-height 2.0"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "0.5",
+ replaceFrom: "ex-height 0.0",
+ replaceTo: "cap-height 2.0",
+}, [
+ {at: -0.5, expect: "0.0"},
+ {at: 0, expect: "0.0"},
+ {at: 0.5, expect: "cap-height 2.0"},
+ {at: 1, expect: "cap-height 2.0"},
+ {at: 1.5, expect: "cap-height 2.0"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "0.5",
+ replaceFrom: "ex-height 0",
+ addTo: "cap-height 2.0",
+}, [
+ {at: -0.5, expect: "0.0"},
+ {at: 0, expect: "0.0"},
+ {at: 0.5, expect: "cap-height 2.0"},
+ {at: 1, expect: "cap-height 2.0"},
+ {at: 1.5, expect: "cap-height 2.0"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "0.5",
+ addFrom: "ex-height 0",
+ replaceTo: "cap-height 2.0",
+}, [
+ {at: -0.5, expect: "0.5"},
+ {at: 0, expect: "0.5"},
+ {at: 0.5, expect: "cap-height 2.0"},
+ {at: 1, expect: "cap-height 2.0"},
+ {at: 1.5, expect: "cap-height 2.0"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "0.5",
+ addFrom: "cap-height 0.0",
+ addTo: "ch-width 2.0",
+}, [
+ {at: -0.5, expect: "cap-height 0.0"},
+ {at: 0, expect: "cap-height 0.0"},
+ {at: 0.5, expect: "ch-width 2.0"},
+ {at: 1, expect: "ch-width 2.0"},
+ {at: 1.5, expect: "ch-width 2.0"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "0.5",
+ replaceFrom: "cap-height 0.0",
+ replaceTo: "ch-width 2.0",
+}, [
+ {at: -0.5, expect: "cap-height 0.0"},
+ {at: 0, expect: "cap-height 0.0"},
+ {at: 0.5, expect: "ch-width 2.0"},
+ {at: 1, expect: "ch-width 2.0"},
+ {at: 1.5, expect: "ch-width 2.0"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "0.5",
+ replaceFrom: "cap-height 0",
+ addTo: "ch-width 2.0",
+}, [
+ {at: -0.5, expect: "cap-height 0.0"},
+ {at: 0, expect: "cap-height 0.0"},
+ {at: 0.5, expect: "ch-width 2.0"},
+ {at: 1, expect: "ch-width 2.0"},
+ {at: 1.5, expect: "ch-width 2.0"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "0.5",
+ addFrom: "cap-height 0",
+ replaceTo: "ch-width 2.0",
+}, [
+ {at: -0.5, expect: "cap-height 0"},
+ {at: 0, expect: "cap-height 0"},
+ {at: 0.5, expect: "ch-width 2.0"},
+ {at: 1, expect: "ch-width 2.0"},
+ {at: 1.5, expect: "ch-width 2.0"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "0.5",
+ addFrom: "ch-width 0.0",
+ addTo: "ic-width 2.0",
+}, [
+ {at: -0.5, expect: "ch-width 0.0"},
+ {at: 0, expect: "ch-width 0.0"},
+ {at: 0.5, expect: "ic-width 2.0"},
+ {at: 1, expect: "ic-width 2.0"},
+ {at: 1.5, expect: "ic-width 2.0"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "0.5",
+ replaceFrom: "ch-width 0.0",
+ replaceTo: "ic-width 2.0",
+}, [
+ {at: -0.5, expect: "ch-width 0.0"},
+ {at: 0, expect: "ch-width 0.0"},
+ {at: 0.5, expect: "ic-width 2.0"},
+ {at: 1, expect: "ic-width 2.0"},
+ {at: 1.5, expect: "ic-width 2.0"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "0.5",
+ replaceFrom: "ch-width 0",
+ addTo: "ic-width 2.0",
+}, [
+ {at: -0.5, expect: "ch-width 0.0"},
+ {at: 0, expect: "ch-width 0.0"},
+ {at: 0.5, expect: "ic-width 2.0"},
+ {at: 1, expect: "ic-width 2.0"},
+ {at: 1.5, expect: "ic-width 2.0"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "0.5",
+ addFrom: "ch-width 0",
+ replaceTo: "ic-width 2.0",
+}, [
+ {at: -0.5, expect: "ch-width 0"},
+ {at: 0, expect: "ch-width 0"},
+ {at: 0.5, expect: "ic-width 2.0"},
+ {at: 1, expect: "ic-width 2.0"},
+ {at: 1.5, expect: "ic-width 2.0"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "0.5",
+ addFrom: "ic-width 0.0",
+ addTo: "ic-height 2.0",
+}, [
+ {at: -0.5, expect: "ic-width 0.0"},
+ {at: 0, expect: "ic-width 0.0"},
+ {at: 0.5, expect: "ic-height 2.0"},
+ {at: 1, expect: "ic-height 2.0"},
+ {at: 1.5, expect: "ic-height 2.0"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "0.5",
+ replaceFrom: "ic-width 0.0",
+ replaceTo: "ic-height 2.0",
+}, [
+ {at: -0.5, expect: "ic-width 0.0"},
+ {at: 0, expect: "ic-width 0.0"},
+ {at: 0.5, expect: "ic-height 2.0"},
+ {at: 1, expect: "ic-height 2.0"},
+ {at: 1.5, expect: "ic-height 2.0"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "0.5",
+ replaceFrom: "ic-width 0",
+ addTo: "ic-height 2.0",
+}, [
+ {at: -0.5, expect: "ic-width 0.0"},
+ {at: 0, expect: "ic-width 0.0"},
+ {at: 0.5, expect: "ic-height 2.0"},
+ {at: 1, expect: "ic-height 2.0"},
+ {at: 1.5, expect: "ic-height 2.0"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "0.5",
+ addFrom: "ic-width 0",
+ replaceTo: "ic-height 2.0",
+}, [
+ {at: -0.5, expect: "ic-width 0"},
+ {at: 0, expect: "ic-width 0"},
+ {at: 0.5, expect: "ic-height 2.0"},
+ {at: 1, expect: "ic-height 2.0"},
+ {at: 1.5, expect: "ic-height 2.0"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "0.5",
+ addFrom: "ic-height 0.0",
+ addTo: "ex-height 2.0",
+}, [
+ {at: -0.5, expect: "ic-height 0.0"},
+ {at: 0, expect: "ic-height 0.0"},
+ {at: 0.5, expect: "ex-height 2.5"},
+ {at: 1, expect: "ex-height 2.5"},
+ {at: 1.5, expect: "ex-height 2.5"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "0.5",
+ replaceFrom: "ic-height 0.0",
+ replaceTo: "ex-height 2.0",
+}, [
+ {at: -0.5, expect: "ic-height 0.0"},
+ {at: 0, expect: "ic-height 0.0"},
+ {at: 0.5, expect: "ex-height 2.0"},
+ {at: 1, expect: "ex-height 2.0"},
+ {at: 1.5, expect: "ex-height 2.0"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "0.5",
+ replaceFrom: "ic-height 0",
+ addTo: "ex-height 2.0",
+}, [
+ {at: -0.5, expect: "ic-height 0.0"},
+ {at: 0, expect: "ic-height 0.0"},
+ {at: 0.5, expect: "ex-height 2.5"},
+ {at: 1, expect: "ex-height 2.5"},
+ {at: 1.5, expect: "ex-height 2.5"},
+]);
+
+test_composition({
+ property: 'font-size-adjust',
+ underlying: "0.5",
+ addFrom: "ic-height 0",
+ replaceTo: "ex-height 2.0",
+}, [
+ {at: -0.5, expect: "ic-height 0"},
+ {at: 0, expect: "ic-height 0"},
+ {at: 0.5, expect: "ex-height 2.0"},
+ {at: 1, expect: "ex-height 2.0"},
+ {at: 1.5, expect: "ex-height 2.0"},
+]);
+</script>
+</body>
diff --git a/testing/web-platform/tests/css/css-fonts/animations/font-size-adjust-interpolation.html b/testing/web-platform/tests/css/css-fonts/animations/font-size-adjust-interpolation.html
new file mode 100644
index 0000000000..a138d7fee5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/animations/font-size-adjust-interpolation.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>font-size-adjust interpolation</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-3/#propdef-font-size-adjust">
+<meta name="assert" content="font-size-adjust supports animation as a number">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style type="text/css">
+.container {
+ font-size: 20px;
+ line-height: 1;
+}
+
+.parent {
+ font-size-adjust: 3;
+}
+
+.target {
+ display: inline-block;
+ font-size-adjust: 1;
+}
+
+.expected {
+ color: green;
+ margin-right: 30px;
+}
+</style>
+
+<body>
+<template id="target-template">
+ <span class="container">
+ <div class="target">x</span>
+ </div>
+</template>
+</body>
+
+<script>
+test_interpolation({
+ property: 'font-size-adjust',
+ from: neutralKeyframe,
+ to: '2',
+}, [
+ {at: -2, expect: '0'},
+ {at: -0.3, expect: '0.7'},
+ {at: 0, expect: '1'},
+ {at: 0.3, expect: '1.3'},
+ {at: 0.6, expect: '1.6'},
+ {at: 1, expect: '2'},
+ {at: 1.5, expect: '2.5'},
+]);
+
+test_no_interpolation({
+ property: 'font-size-adjust',
+ from: 'initial',
+ to: '2',
+});
+
+test_no_interpolation({
+ property: 'font-size-adjust',
+ from: 'initial',
+ to: 'cap-height 2',
+});
+
+test_interpolation({
+ property: 'font-size-adjust',
+ from: 'inherit',
+ to: '2',
+}, [
+ {at: -2, expect: '5'},
+ {at: -0.3, expect: '3.3'},
+ {at: 0, expect: '3'},
+ {at: 0.3, expect: '2.7'},
+ {at: 0.6, expect: '2.4'},
+ {at: 1, expect: '2'},
+ {at: 1.5, expect: '1.5'},
+]);
+
+test_interpolation({
+ property: 'font-size-adjust',
+ from: 'unset',
+ to: '2',
+}, [
+ {at: -2, expect: '5'},
+ {at: -0.3, expect: '3.3'},
+ {at: 0, expect: '3'},
+ {at: 0.3, expect: '2.7'},
+ {at: 0.6, expect: '2.4'},
+ {at: 1, expect: '2'},
+ {at: 1.5, expect: '1.5'},
+]);
+
+
+test_interpolation({
+ property: 'font-size-adjust',
+ from: '0',
+ to: '1.2'
+}, [
+ {at: -2, expect: '0'},
+ {at: -0.3, expect: '0'},
+ {at: 0, expect: '0'},
+ {at: 0.3, expect: '0.36'},
+ {at: 0.6, expect: '0.72'},
+ {at: 1, expect: '1.2'},
+ {at: 1.5, expect: '1.8'},
+]);
+
+test_interpolation({
+ property: 'font-size-adjust',
+ from: 'cap-height 0',
+ to: 'cap-height 1.2'
+}, [
+ {at: -2, expect: 'cap-height 0'},
+ {at: -0.3, expect: 'cap-height 0'},
+ {at: 0, expect: 'cap-height 0'},
+ {at: 0.3, expect: 'cap-height 0.36'},
+ {at: 0.6, expect: 'cap-height 0.72'},
+ {at: 1, expect: 'cap-height 1.2'},
+ {at: 1.5, expect: 'cap-height 1.8'},
+]);
+
+test_no_interpolation({
+ property: 'font-size-adjust',
+ from: 'none',
+ to: '1.2'
+});
+
+test_no_interpolation({
+ property: 'font-size-adjust',
+ from: 'none',
+ to: 'cap-height 1.2'
+});
+
+test_interpolation({
+ property: 'font-size-adjust',
+ from: '0.2',
+ to: '1.2'
+}, [
+ {at: -2, expect: '0'}, // CSS font-size-adjust can't be negative.
+ {at: -0.3, expect: '0'},
+ {at: 0, expect: '0.2'},
+ {at: 0.3, expect: '0.5'},
+ {at: 0.6, expect: '0.8'},
+ {at: 1, expect: '1.2'},
+ {at: 1.5, expect: '1.7'},
+]);
+
+test_interpolation({
+ property: 'font-size-adjust',
+ from: 'ch-width 0.2',
+ to: 'ch-width 1.2'
+}, [
+ {at: -2, expect: 'ch-width 0'}, // CSS font-size-adjust can't be negative.
+ {at: -0.3, expect: 'ch-width 0'},
+ {at: 0, expect: 'ch-width 0.2'},
+ {at: 0.3, expect: 'ch-width 0.5'},
+ {at: 0.6, expect: 'ch-width 0.8'},
+ {at: 1, expect: 'ch-width 1.2'},
+ {at: 1.5, expect: 'ch-width 1.7'},
+]);
+
+test_no_interpolation({ // can't interpolate between different adjustment basis
+ property: 'font-size-adjust',
+ from: 'ex-height 0.2',
+ to: 'cap-height 1.2'
+});
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/animations/font-size-interpolation-001.html b/testing/web-platform/tests/css/css-fonts/animations/font-size-interpolation-001.html
new file mode 100644
index 0000000000..0f60018c2e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/animations/font-size-interpolation-001.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>font-size interpolation</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-3/#propdef-font-size">
+<meta name="assert" content="font-size supports animation as length">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.parent {
+ font-size: 30px;
+}
+.target {
+ display: inline-block;
+ font: 10px sans-serif;
+}
+.expected {
+ color: green;
+ margin-right: 30px;
+}
+</style>
+
+<body>
+<template id="target-template">
+ <span>
+ <div class="target">Test Text</div>
+ </span>
+</template>
+</body>
+
+<script>
+test_interpolation({
+ property: 'font-size',
+ from: neutralKeyframe,
+ to: '20px',
+}, [
+ {at: -2, expect: '0px'},
+ {at: -0.3, expect: '7px'},
+ {at: 0, expect: '10px'},
+ {at: 0.3, expect: '13px'},
+ {at: 0.6, expect: '16px'},
+ {at: 1, expect: '20px'},
+ {at: 1.5, expect: '25px'},
+]);
+
+test_interpolation({
+ property: 'font-size',
+ from: 'initial',
+ to: '20px',
+}, [
+ {at: -2, expect: '8px'},
+ {at: -0.3, expect: '14.8px'},
+ {at: 0, expect: '16px'},
+ {at: 0.3, expect: '17.2px'},
+ {at: 0.6, expect: '18.4px'},
+ {at: 1, expect: '20px'},
+ {at: 1.5, expect: '22px'},
+]);
+
+test_interpolation({
+ property: 'font-size',
+ from: 'inherit',
+ to: '20px',
+}, [
+ {at: -2, expect: '50px'},
+ {at: -0.3, expect: '33px'},
+ {at: 0, expect: '30px'},
+ {at: 0.3, expect: '27px'},
+ {at: 0.6, expect: '24px'},
+ {at: 1, expect: '20px'},
+ {at: 1.5, expect: '15px'},
+]);
+
+test_interpolation({
+ property: 'font-size',
+ from: 'unset',
+ to: '20px',
+}, [
+ {at: -2, expect: '50px'},
+ {at: -0.3, expect: '33px'},
+ {at: 0, expect: '30px'},
+ {at: 0.3, expect: '27px'},
+ {at: 0.6, expect: '24px'},
+ {at: 1, expect: '20px'},
+ {at: 1.5, expect: '15px'},
+]);
+
+test_interpolation({
+ property: 'font-size',
+ from: '4px',
+ to: '14px'
+}, [
+ {at: -2, expect: '0px'}, // CSS font-size can't be negative.
+ {at: -0.3, expect: '1px'},
+ {at: 0, expect: '4px'},
+ {at: 0.3, expect: '7px'},
+ {at: 0.6, expect: '10px'},
+ {at: 1, expect: '14px'},
+ {at: 1.5, expect: '19px'},
+]);
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/animations/font-size-interpolation-002.html b/testing/web-platform/tests/css/css-fonts/animations/font-size-interpolation-002.html
new file mode 100644
index 0000000000..d6f2f19ab1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/animations/font-size-interpolation-002.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>font-size interpolation</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-3/#propdef-font-size">
+<meta name="assert" content="font-size supports animation as length">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.container {
+ font-size: 10px;
+}
+.target {
+ display: inline-block;
+ font: 100px sans-serif;
+ font-size: 20px;
+}
+.expected {
+ color: green;
+ margin-right: 30px;
+}
+</style>
+
+<body>
+<template id="target-template">
+ <span class="container">
+ <div class="target">TT</div>
+ </span>
+</template>
+</body>
+
+<script>
+// Test the 'unset' case.
+test_interpolation({
+ property: 'font-size',
+ from: 'unset',
+ to: '20px'
+}, [
+ {at: -2, expect: '0px'}, // CSS font-size can't be negative.
+ {at: -0.3, expect: '7px'},
+ {at: 0, expect: '10px'},
+ {at: 0.3, expect: '13px'},
+ {at: 0.6, expect: '16px'},
+ {at: 1, expect: '20px'},
+ {at: 1.5, expect: '25px'},
+]);
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/animations/font-size-interpolation-003.html b/testing/web-platform/tests/css/css-fonts/animations/font-size-interpolation-003.html
new file mode 100644
index 0000000000..d84ff7e5df
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/animations/font-size-interpolation-003.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>font-size interpolation with zoom</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-3/#propdef-font-size">
+<meta name="assert" content="font-size supports animation as a length, respecting zoom">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.container {
+ zoom: 2;
+}
+.target {
+ display: inline-block;
+}
+.expected {
+ color: green;
+ margin-right: 30px;
+}
+</style>
+
+<body>
+<template id="target-template">
+ <span class="container">
+ <div class="target">TT</div>
+ </span>
+</template>
+</body>
+
+<script>
+// The container has zoom: 2 applied to it.
+test_interpolation({
+ property: 'font-size',
+ from: '10px',
+ to: '20px'
+}, [
+ {at: -2, expect: '0px'}, // CSS font-size can't be negative.
+ {at: -0.3, expect: '7px'},
+ {at: 0, expect: '10px'},
+ {at: 0.3, expect: '13px'},
+ {at: 0.6, expect: '16px'},
+ {at: 1, expect: '20px'},
+ {at: 1.5, expect: '25px'},
+]);
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/animations/font-stretch-interpolation.html b/testing/web-platform/tests/css/css-fonts/animations/font-stretch-interpolation.html
new file mode 100644
index 0000000000..e62788f82f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/animations/font-stretch-interpolation.html
@@ -0,0 +1,164 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>font-size interpolation</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-3/#propdef-font-size">
+<meta name="assert" content="font-size supports animation as length">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.container {
+ font-stretch: ultra-expanded;
+}
+.container2 {
+ font-stretch: ultra-condensed;
+}
+.target {
+ display: inline-block;
+ font: 100px sans-serif;
+ font-stretch: normal;
+}
+.expected {
+ color: green;
+ margin-right: 30px;
+}
+</style>
+
+<body>
+<template id="target-template">
+ <span class="container">
+ <div class="target">TT</div>
+ </span>
+</template>
+
+<span id="inv-container" class="container">
+ <div id="inv-target" class="target">TT</div>
+</span>
+</body>
+
+<script>
+test_interpolation({
+ property: 'font-stretch',
+ from: '100%',
+ to: '200%'
+}, [
+ {at: -2, expect: '0%'}, // CSS font-stretch can't be negative.
+ {at: -0.25, expect: '75%'},
+ {at: 0, expect: '100%'},
+ {at: 0.3, expect: '130%'},
+ {at: 0.6, expect: '160%'},
+ {at: 1, expect: '200%'},
+ {at: 1.5, expect: '250%'},
+]);
+
+test_interpolation({
+ property: 'font-stretch',
+ from: neutralKeyframe,
+ to: '200%'
+}, [
+ {at: -2, expect: '0%'},
+ {at: -0.25, expect: '75%'},
+ {at: 0, expect: '100%'},
+ {at: 0.3, expect: '130%'},
+ {at: 0.6, expect: '160%'},
+ {at: 1, expect: '200%'},
+ {at: 1.5, expect: '250%'},
+]);
+
+test_interpolation({
+ property: 'font-stretch',
+ from: 'initial',
+ to: 'inherit'
+}, [
+ {at: -2, expect: '0%'},
+ {at: -0.25, expect: '75%'},
+ {at: 0, expect: '100%'},
+ {at: 0.3, expect: '130%'},
+ {at: 0.6, expect: '160%'},
+ {at: 1, expect: '200%'},
+ {at: 1.5, expect: '250%'},
+]);
+
+// Test interpolation from keywords.
+test_interpolation({
+ property: 'font-stretch',
+ from: 'normal',
+ to: 'ultra-expanded'
+}, [
+ {at: -0.25, expect: '75%'},
+ {at: 0, expect: '100%'},
+ {at: 0.125, expect: '112.5%'},
+ {at: 0.25, expect: '125%'},
+ {at: 0.5, expect: '150%'},
+ {at: 0.75, expect: '175%'},
+ {at: 1, expect: '200%'},
+]);
+
+test_interpolation({
+ property: 'font-stretch',
+ from: 'ultra-condensed',
+ to: 'condensed'
+}, [
+ {at: 0, expect: '50%'},
+ {at: 0.5, expect: '62.5%'},
+ {at: 1, expect: '75%'},
+]);
+
+test_interpolation({
+ property: 'font-stretch',
+ from: 'extra-condensed',
+ to: 'semi-condensed'
+}, [
+ {at: 0, expect: '62.5%'},
+ {at: 0.5, expect: '75%'},
+ {at: 1, expect: '87.5%'},
+]);
+
+test_interpolation({
+ property: 'font-stretch',
+ from: 'condensed',
+ to: 'expanded'
+}, [
+ {at: 0, expect: '75%'},
+ {at: 0.25, expect: '87.5%'},
+ {at: 0.5, expect: '100%'},
+ {at: 0.75, expect: '112.5%'},
+ {at: 1, expect: '125%'},
+]);
+
+test_interpolation({
+ property: 'font-stretch',
+ from: 'semi-condensed',
+ to: 'semi-expanded'
+}, [
+ {at: 0, expect: '87.5%'},
+ {at: 0.5, expect: '100%'},
+ {at: 1, expect: '112.5%'},
+]);
+
+test_interpolation({
+ property: 'font-stretch',
+ from: 'normal',
+ to: 'extra-expanded'
+}, [
+ {at: 0, expect: '100%'},
+ {at: 0.25, expect: '112.5%'},
+ {at: 0.5, expect: '125%'},
+ {at: 1, expect: '150%'},
+]);
+
+test(t => {
+ var container = document.getElementById('inv-container');
+ var target = document.getElementById('inv-target');
+ var anim = target.animate({fontStretch: ['normal', 'inherit']}, 1000);
+ anim.pause();
+ anim.currentTime = 500;
+ assert_equals(getComputedStyle(target).fontStretch, '150%');
+
+ container.setAttribute('class', 'container2');
+ assert_equals(getComputedStyle(target).fontStretch, '75%');
+}, "An interpolation to inherit updates correctly on a parent style change.");
+
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/animations/font-style-interpolation.html b/testing/web-platform/tests/css/css-fonts/animations/font-style-interpolation.html
new file mode 100644
index 0000000000..4666025d54
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/animations/font-style-interpolation.html
@@ -0,0 +1,122 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>font-style interpolation</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-3/#propdef-font-style">
+<meta name="assert" content="Font-style should be animated smoothly.">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.container {
+ font-style: oblique 20deg;
+}
+.container2 {
+ font-style: oblique 5deg;
+}
+.target {
+ display: inline-block;
+ font: 100px sans-serif;
+ font-style: normal;
+}
+.expected {
+ color: green;
+ margin-right: 30px;
+}
+</style>
+
+<body>
+<template id="target-template">
+ <span class="container">
+ <div class="target">TT</div>
+ </span>
+</template>
+
+<span id="inv-container" class="container">
+ <div id="inv-target" class="target">TT</div>
+</span>
+</body>
+
+<script>
+test_interpolation({
+ property: 'font-style',
+ from: 'normal',
+ to: 'oblique 10deg'
+}, [
+ {at: -2, expect: 'oblique -20deg'},
+ {at: -0.25, expect: 'oblique -2.5deg'},
+ {at: 0, expect: 'normal'},
+ {at: 0.3, expect: 'oblique 3deg'},
+ {at: 0.6, expect: 'oblique 6deg'},
+ {at: 1, expect: 'oblique 10deg'},
+ {at: 1.5, expect: 'oblique 15deg'},
+]);
+
+test_interpolation({
+ property: 'font-style',
+ from: 'oblique 5deg',
+ to: 'oblique 15deg'
+}, [
+ { at: -2, expect: 'oblique -15deg' },
+ { at: -0.25, expect: 'oblique 2.5deg' },
+ { at: 0, expect: 'oblique 5deg' },
+ { at: 0.3, expect: 'oblique 8deg' },
+ { at: 0.6, expect: 'oblique 11deg' },
+ { at: 1, expect: 'oblique 15deg' },
+ { at: 1.5, expect: 'oblique 20deg' },
+]);
+
+test_interpolation({
+ property: 'font-style',
+ from: 'initial',
+ to: 'inherit'
+}, [
+ { at: -2, expect: 'oblique -40deg' },
+ { at: -0.25, expect: 'oblique -5deg' },
+ { at: 0, expect: 'normal' },
+ { at: 0.3, expect: 'oblique 6deg' },
+ { at: 0.6, expect: 'oblique 12deg' },
+ { at: 1, expect: 'oblique 20deg' },
+ { at: 1.5, expect: 'oblique 30deg' },
+]);
+
+test_interpolation({
+ property: 'font-style',
+ from: 'oblique 20deg',
+ to: 'normal'
+}, [
+ { at: -1, expect: 'oblique 40deg' },
+ { at: 0, expect: 'oblique 20deg' },
+ { at: 0.5, expect: 'oblique 10deg' },
+ { at: 1, expect: 'normal' },
+ { at: 1.5, expect: 'oblique -10deg' },
+]);
+
+test_interpolation({
+ property: 'font-style',
+ from: 'oblique -90deg',
+ to: 'oblique 90deg'
+}, [
+ { at: -2, expect: 'oblique -90deg' },
+ { at: -1, expect: 'oblique -90deg' },
+ { at: 0, expect: 'oblique -90deg' },
+ { at: 0.5, expect: 'normal' },
+ { at: 1, expect: 'oblique 90deg' },
+ { at: 1.5, expect: 'oblique 90deg' },
+]);
+
+test(t => {
+ var container = document.getElementById('inv-container');
+ var target = document.getElementById('inv-target');
+ var anim = target.animate({ fontStyle: ['normal', 'inherit'] }, 1000);
+ anim.pause();
+ anim.currentTime = 500;
+ assert_equals(getComputedStyle(target).fontStyle, 'oblique 10deg');
+
+ container.setAttribute('class', 'container2');
+ assert_equals(getComputedStyle(target).fontStyle, 'oblique 2.5deg');
+}, "An interpolation to inherit updates correctly on a parent style change.");
+
+</script>
+
diff --git a/testing/web-platform/tests/css/css-fonts/animations/font-variation-settings-composition.html b/testing/web-platform/tests/css/css-fonts/animations/font-variation-settings-composition.html
new file mode 100644
index 0000000000..e1ebfc2836
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/animations/font-variation-settings-composition.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>font-variation-settings composition</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#propdef-font-variation-settings">
+<meta name="assert" content="font-variation-settings supports animation pairwise by 'like' properties">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<body></body>
+
+<script>
+function compareVariationSettings(actual, expected) {
+ // The order of <axis, value> pairs in the variation-settings list is arbitrary,
+ // so we sort the pairs before attempting to compare. (We only need to use this
+ // when multiple settings are expected, otherwise the default comparison is OK.)
+ assert_equals(normalizeValue(actual).split(", ").sort().join(", "),
+ normalizeValue(expected).split(", ").sort().join(", "));
+};
+
+test_composition({
+ property: 'font-variation-settings',
+ underlying: "'test' 50",
+ addFrom: "'test' 100",
+ addTo: "'test' 200",
+}, [
+ {at: -0.3, expect: "'test' 120"},
+ {at: 0, expect: "'test' 150"},
+ {at: 0.5, expect: "'test' 200"},
+ {at: 1, expect: "'test' 250"},
+ {at: 1.5, expect: "'test' 300"},
+]);
+
+test_composition({
+ property: 'font-variation-settings',
+ underlying: "'test' 50",
+ addFrom: "'test' 100",
+ replaceTo: "'test' 200",
+}, [
+ {at: -0.3, expect: "'test' 135"},
+ {at: 0, expect: "'test' 150"},
+ {at: 0.5, expect: "'test' 175"},
+ {at: 1, expect: "'test' 200"},
+ {at: 1.5, expect: "'test' 225"},
+]);
+
+test_composition({
+ property: 'font-variation-settings',
+ underlying: "'test' 100",
+ addFrom: 'normal',
+ replaceTo: "'test' 200",
+}, [
+ {at: -0.3, expect: 'normal'},
+ {at: 0, expect: 'normal'},
+ {at: 0.5, expect: "'test' 200"},
+ {at: 1, expect: "'test' 200"},
+ {at: 1.5, expect: "'test' 200"},
+]);
+
+test_composition({
+ property: 'font-variation-settings',
+ underlying: "'test' 100",
+ addFrom: 'normal',
+ addTo: "'test' 200",
+}, [
+ {at: -0.3, expect: 'normal'},
+ {at: 0, expect: 'normal'},
+ {at: 0.5, expect: "'test' 300"},
+ {at: 1, expect: "'test' 300"},
+ {at: 1.5, expect: "'test' 300"},
+]);
+
+test_composition({
+ property: 'font-variation-settings',
+ underlying: "'aaaa' 100, 'bbbb' 200",
+ addFrom: "'aaaa' 20, 'bbbb' 50",
+ addTo: "'aaaa' 30, 'bbbb' 100",
+ comparisonFunction: compareVariationSettings,
+}, [
+ {at: -0.3, expect: "'aaaa' 117, 'bbbb' 235"},
+ {at: 0, expect: "'aaaa' 120, 'bbbb' 250"},
+ {at: 0.5, expect: "'aaaa' 125, 'bbbb' 275"},
+ {at: 1, expect: "'aaaa' 130, 'bbbb' 300"},
+ {at: 1.5, expect: "'aaaa' 135, 'bbbb' 325"},
+]);
+
+test_composition({
+ property: 'font-variation-settings',
+ underlying: "'test' 100",
+ addFrom: "'aaaa' 20, 'bbbb' 50",
+ addTo: "'aaaa' 30, 'bbbb' 100",
+ comparisonFunction: compareVariationSettings,
+}, [
+ {at: -0.3, expect: "'aaaa' 17, 'bbbb' 35"},
+ {at: 0, expect: "'aaaa' 20, 'bbbb' 50"},
+ {at: 0.5, expect: "'aaaa' 25, 'bbbb' 75"},
+ {at: 1, expect: "'aaaa' 30, 'bbbb' 100"},
+ {at: 1.5, expect: "'aaaa' 35, 'bbbb' 125"},
+]);
+</script>
+</body>
diff --git a/testing/web-platform/tests/css/css-fonts/animations/font-variation-settings-interpolation.html b/testing/web-platform/tests/css/css-fonts/animations/font-variation-settings-interpolation.html
new file mode 100644
index 0000000000..cb99d7b255
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/animations/font-variation-settings-interpolation.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>font-variation-settings interpolation</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#propdef-font-variation-settings">
+<meta name="assert" content="font-variation-settings supports animation pairwise by 'like' properties">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.parent {
+ font-variation-settings: "test" 30;
+}
+.target {
+ font-variation-settings: "test" 10;
+}
+</style>
+
+<body></body>
+
+<script>
+
+// Because font-variation-settings is specced as a map rather than a list
+// (https://github.com/w3c/csswg-drafts/issues/1959), browsers are allowed to
+// reorder the output as they see fit.
+function compareFontVariationSettings(actual, expected) {
+ // This is not perfect, but should serve as a reasonable comparison. We split
+ // the inputs into arrays and trim each characteristic, then sort the array
+ // and compare them.
+ const actual_arr = actual.split(',').map(x => x.trim()).sort();
+ const expected_arr = expected.split(',').map(x => x.trim()).sort();
+ assert_array_equals(actual_arr, expected_arr);
+}
+
+test_interpolation({
+ property: 'font-variation-settings',
+ from: neutralKeyframe,
+ to: '"test" 20',
+ comparisonFunction: compareFontVariationSettings,
+}, [
+ {at: -0.5, expect: "'test' 5"},
+ {at: 0, expect: "'test' 10"},
+ {at: 0.3, expect: "'test' 13"},
+ {at: 0.7, expect: "'test' 17"},
+ {at: 1, expect: "'test' 20"},
+ {at: 1.5, expect: "'test' 25"},
+]);
+
+test_no_interpolation({
+ property: 'font-variation-settings',
+ from: 'initial',
+ to: "'test' 50",
+});
+
+test_interpolation({
+ property: 'font-variation-settings',
+ from: 'inherit',
+ to: "'test' 20",
+ comparisonFunction: compareFontVariationSettings,
+}, [
+ {at: -0.5, expect: "'test' 35"},
+ {at: 0, expect: "'test' 30"},
+ {at: 0.3, expect: "'test' 27"},
+ {at: 0.7, expect: "'test' 23"},
+ {at: 1, expect: "'test' 20"},
+ {at: 1.5, expect: "'test' 15"},
+]);
+
+test_interpolation({
+ property: 'font-variation-settings',
+ from: 'unset',
+ to: "'test' 20",
+ comparisonFunction: compareFontVariationSettings,
+}, [
+ {at: -0.5, expect: "'test' 35"},
+ {at: 0, expect: "'test' 30"},
+ {at: 0.3, expect: "'test' 27"},
+ {at: 0.7, expect: "'test' 23"},
+ {at: 1, expect: "'test' 20"},
+ {at: 1.5, expect: "'test' 15"},
+]);
+
+test_no_interpolation({
+ property: 'font-variation-settings',
+ from: "'test' 20",
+ to: "normal",
+});
+
+test_interpolation({
+ property: 'font-variation-settings',
+ from: "'test' 20",
+ to: "'test' 30",
+ comparisonFunction: compareFontVariationSettings,
+}, [
+ {at: -0.5, expect: "'test' 15"},
+ {at: 0, expect: "'test' 20"},
+ {at: 0.3, expect: "'test' 23"},
+ {at: 0.7, expect: "'test' 27"},
+ {at: 1, expect: "'test' 30"},
+ {at: 1.5, expect: "'test' 35"},
+]);
+
+test_interpolation({
+ property: 'font-variation-settings',
+ from: "'aaaa' 0, 'bbbb' 10, 'cccc' 20",
+ to: "'aaaa' 10, 'bbbb' 20, 'cccc' 30",
+ comparisonFunction: compareFontVariationSettings,
+}, [
+ {at: -0.5, expect: "'aaaa' -5, 'bbbb' 5, 'cccc' 15"},
+ {at: 0, expect: "'aaaa' 0, 'bbbb' 10, 'cccc' 20"},
+ {at: 0.3, expect: "'aaaa' 3, 'bbbb' 13, 'cccc' 23"},
+ {at: 0.7, expect: "'aaaa' 7, 'bbbb' 17, 'cccc' 27"},
+ {at: 1, expect: "'aaaa' 10, 'bbbb' 20, 'cccc' 30"},
+ {at: 1.5, expect: "'aaaa' 15, 'bbbb' 25, 'cccc' 35"},
+]);
+
+// font-variation-settings is a map, so any order works.
+test_interpolation({
+ property: 'font-variation-settings',
+ from: "'aaaa' 0, 'bbbb' 10, 'cccc' 20",
+ to: "'cccc' 10, 'bbbb' 20, 'aaaa' 30",
+ comparisonFunction: compareFontVariationSettings,
+}, [
+ {at: -0.5, expect: "'aaaa' -15, 'bbbb' 5, 'cccc' 25"},
+ {at: 0, expect: "'aaaa' 0, 'bbbb' 10, 'cccc' 20"},
+ {at: 0.3, expect: "'aaaa' 9, 'bbbb' 13, 'cccc' 17"},
+ {at: 0.7, expect: "'aaaa' 21, 'bbbb' 17, 'cccc' 13"},
+ {at: 1, expect: "'aaaa' 30, 'bbbb' 20, 'cccc' 10"},
+ {at: 1.5, expect: "'aaaa' 45, 'bbbb' 25, 'cccc' 5"},
+]);
+
+test_no_interpolation({
+ property: 'font-variation-settings',
+ from: "'aaaa' 0, 'bbbb' 10",
+ to: "'aaaa' 10, 'bbbb' 20, 'cccc' 30",
+});
+
+test_no_interpolation({
+ property: 'font-variation-settings',
+ from: "'aaaa' 10, 'bbbb' 20, 'cccc' 30",
+ to: "'aaaa' 0, 'bbbb' 10",
+});
+
+test_no_interpolation({
+ property: 'font-variation-settings',
+ from: "'aaaa' 0, 'bbbb' 10, 'cccc' 20",
+ to: "'dddd' 10, 'eeee' 20, 'ffff' 30",
+});
+
+// crbug.com/910118: Test that ApplyStandardPropertyValue doesn't overflow.
+test_interpolation({
+ property: 'font-variation-settings',
+ from: "'aaaa' 30, 'bbbb' 20",
+ to: "'aaaa' 20, 'bbbb' 30",
+ comparisonFunction: compareFontVariationSettings,
+}, [
+ {at: 3.40282e+38, expect: "'aaaa' -3.40282e+38, 'bbbb' 3.40282e+38"},
+]);
+
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/animations/multiple-elements-font-palette-animation.html b/testing/web-platform/tests/css/css-fonts/animations/multiple-elements-font-palette-animation.html
new file mode 100644
index 0000000000..a3804487d2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/animations/multiple-elements-font-palette-animation.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>Font-palette animation of multiple elements</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#propdef-font-palette">
+<meta name="assert" content="Animating font-palette CSS property of multiple elements.">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+ @font-face {
+ font-family: "COLR-test-font";
+ src: url("../resources/COLR-palettes-test-font.ttf") format("truetype");
+ }
+ @font-palette-values --custom {
+ font-family: "COLR-test-font";
+ base-palette: 3;
+ }
+ @keyframes anim {
+ from {
+ font-palette: normal;
+ }
+ to {
+ font-palette: --custom;
+ }
+ }
+ .demo {
+ font-family: "COLR-test-font";
+ font-size: 130px;
+ }
+ .anim {
+ animation: anim 0.1s forwards;
+ }
+</style>
+
+<body>
+ <div class="demo">
+ <div id="a" class="anim">A</div><div id="b" class="anim">A</div>
+ </div>
+</body>
+
+<script>
+ var afterPaletteAnimationTest1 = async_test(
+ "Verify font-palette value of the first element after animation"
+ );
+ document.getElementById("a").addEventListener("animationend",
+ afterPaletteAnimationTest1.step_func_done(function() {
+ assert_equals(window.getComputedStyle(
+ document.getElementById("a"))
+ .getPropertyValue('font-palette'), "--custom");
+ }));
+
+ var afterPaletteAnimationTest2 = async_test(
+ "Verify font-palette value of the second element after animation"
+ );
+ document.getElementById("b").addEventListener("animationend",
+ afterPaletteAnimationTest2.step_func_done(function() {
+ assert_equals(window.getComputedStyle(
+ document.getElementById("b"))
+ .getPropertyValue('font-palette'), "--custom");
+ }));
+</script> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/animations/system-fonts.html b/testing/web-platform/tests/css/css-fonts/animations/system-fonts.html
new file mode 100644
index 0000000000..7021a5264e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/animations/system-fonts.html
@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Fonts Test: Interpolation of system fonts</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#valdef-font-caption">
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
+<meta name="assert" content="When interpolating system fonts, they are first resolved and then the font longhands interpolate as usual">
+<link rel="stylesheet" herf="/fonts/ahem.css">
+
+<div id="resolver"></div>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+<script>
+// The system fonts will probably resolve to something very different.
+const initialFont = "italic 100 small-caps ultra-expanded 100px / 100px Ahem";
+
+const resolver = document.getElementById("resolver");
+const resolvedStyle = getComputedStyle(resolver);
+
+function extractNumber(value, unit) {
+ value = value.trim();
+ if (!value.endsWith(unit))
+ return NaN;
+ value = value.slice(0, -unit.length);
+ if (!value.length || value !== value.trim())
+ return NaN;
+ return Number(value);
+}
+
+const systemFonts = ["caption", "icon", "menu", "message-box", "small-caption", "status-bar"];
+for (const systemFont of systemFonts) {
+ resolver.style.font = systemFont;
+ const expectations = [];
+ const systemFontStyle = resolvedStyle["font-style"];
+ const systemFontWeight = Number(resolvedStyle["font-weight"]);
+ const systemFontVariant = resolvedStyle["font-variant"];
+ const systemFontStretch = extractNumber(resolvedStyle["font-stretch"], "%");
+ const systemFontSize = extractNumber(resolvedStyle["font-size"], "px");
+ const systemLineHeight = resolvedStyle["line-height"];
+ const systemLineHeightNumber = extractNumber(systemLineHeight, "px");
+ const systemFontFamily = resolvedStyle["font-family"];
+
+ for (const at of [-2, -0.5, 0, 0.3, 0.6, 1, 1.5]) {
+ const expect = {};
+ expect["font-style"] = at >= 0.5 ? systemFontStyle : "italic";
+ expect["font-weight"] = `${Math.max(1, at * systemFontWeight + (1 - at) * 100)}`;
+ expect["font-variant"] = at >= 0.5 ? systemFontVariant : "small-caps";
+ expect["font-stretch"] = `${at * systemFontStretch + (1 - at) * 200}%`;
+ expect["font-size"] = `${Math.max(0, at * systemFontSize + (1 - at) * 100)}px`;
+ expect["line-height"] = Number.isNaN(systemLineHeightNumber)
+ ? (at >= 0.5 ? systemLineHeight : "100px")
+ : `${Math.max(0, at * systemLineHeightNumber + (1 - at) * 100)}px`;
+ expect["font-family"] = at >= 0.5 ? systemFontFamily : "Ahem";
+ // There are more font longhands, but they can't be set in the shorthand,
+ // and the system fonts will probably resolve to the initial value,
+ // preventing a noticeable interpolation.
+ expectations.push({at, expect});
+ }
+
+ for (const method of ["CSS Animations", "Web Animations"]) {
+ test_interpolation({
+ method,
+ property: "font",
+ from: initialFont,
+ to: systemFont,
+ }, expectations);
+ }
+}
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/ascent-descent-override-ref.html b/testing/web-platform/tests/css/css-fonts/ascent-descent-override-ref.html
new file mode 100644
index 0000000000..eeddd2ed86
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/ascent-descent-override-ref.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Tests the ascent-override and descent-override descriptors of @font-face</title>
+<style>
+.target {
+ position: absolute;
+ font-size: 20px;
+ top: 10px;
+ left: 10px;
+ width: 60px;
+ height: 30px;
+}
+
+.top-aligned {
+ display: inline-block;
+ background-color: green;
+ width: 1em;
+ height: 1em; /* Same as the overridden ascent */
+ position: absolute;
+ top: 0;
+ left: 0;
+}
+
+.character {
+ display: inline-block;
+ background-color: green;
+ width: 1em; /* Same as an 'X' in Ahem */
+ height: 1em; /* Same as an 'X' in Ahem */
+ position: absolute;
+ top: 0.2em; /* Difference between the overridden ascent and the origianl ascent */
+ left: 1em;
+}
+
+.bottom-aligned {
+ display: inline-block;
+ background-color: green;
+ width: 1em;
+ height: 0.5em; /* Same as the overridden descent */
+ position: absolute;
+ top: 1em; /* Same as the overridden ascent */
+ left: 2em;
+}
+
+</style>
+<div class="target">
+ <span class="top-aligned"></span><span class="character"></span><span class="bottom-aligned"></span>
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/ascent-descent-override.html b/testing/web-platform/tests/css/css-fonts/ascent-descent-override.html
new file mode 100644
index 0000000000..a2e02cc73d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/ascent-descent-override.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="author" href="mailto:xiaochengh@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-metrics-override-desc">
+<link rel="match" href="ascent-descent-override-ref.html">
+<title>Tests the ascent-override and descent-override descriptors of @font-face</title>
+<style>
+@font-face {
+ font-family: Ahem;
+ src: local(Ahem), url(/fonts/Ahem.ttf);
+ /* The default ascent and descent are 80% and 20%, respectively. */
+ ascent-override: 100%;
+ descent-override: 50%;
+}
+
+.target {
+ font: 20px Ahem;
+ color: green;
+ position: absolute;
+ top: 10px;
+ left: 10px;
+}
+
+.top-aligned {
+ display: inline-block;
+ background-color: green;
+ vertical-align: top;
+ width: 1em;
+ height: 1em; /* Same as the overridden ascent */
+}
+
+.bottom-aligned {
+ display: inline-block;
+ background-color: green;
+ vertical-align: bottom;
+ width: 1em;
+ height: 0.5em; /* Same as the overridden descent */
+}
+
+</style>
+<div class="target">
+ <span class="top-aligned"></span>X<span class="bottom-aligned"></span>
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/calc-in-font-variation-settings.html b/testing/web-platform/tests/css/css-fonts/calc-in-font-variation-settings.html
new file mode 100644
index 0000000000..1a7c59abd5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/calc-in-font-variation-settings.html
@@ -0,0 +1,19 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test: calc() function in font-variation-settings</title>
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<link rel="help" href="https://drafts.csswg.org/css-values/#funcdef-calc">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+#test {
+ font-variation-settings: "XHGT" calc(0.7);
+}
+</style>
+<div id="test"></div>
+<script>
+const div = document.querySelector("#test");
+test(function() {
+ assert_equals(getComputedStyle(div).fontVariationSettings, "\"XHGT\" 0.7");
+}, "calc() in font-variation-settings");
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/cjk-kerning.html b/testing/web-platform/tests/css/css-fonts/cjk-kerning.html
new file mode 100644
index 0000000000..5851757c84
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/cjk-kerning.html
@@ -0,0 +1,129 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+<meta charset="UTF-8" />
+<title>Coordination of kern and palt features for CJK kerning</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-kerning-prop" />
+<link rel="help" href="https://learn.microsoft.com/en-gb/typography/opentype/spec/features_ko#tag-kern" />
+<link rel="help" href="https://learn.microsoft.com/en-gb/typography/opentype/spec/features_pt#palt" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+@font-face {
+ font-family: test;
+ src: url('resources/NotoSansJP-Regular.subset.otf') format('opentype');
+}
+h1 {
+ font: bold 1.5em/1 sans-serif;
+}
+h2 {
+ font: 1em/1 sans-serif;
+ margin-bottom: .25em;
+}
+.test {
+ font-family: test, sans-serif;
+ font-size: 3em;
+}
+.latin {
+ background: yellow;
+}
+.cjk {
+ background: cyan;
+}
+.paltOFFkernON {
+ font-feature-settings: "palt" 0;
+ font-kerning: normal;
+}
+.kernOFF {
+ font-kerning: none;
+}
+.kernON {
+ font-kerning: normal;
+}
+.paltONkernON {
+ font-feature-settings: "palt" 1;
+ font-kerning: normal;
+}
+.paltONkernOFF {
+ font-feature-settings: "palt" 1;
+ font-kerning: none;
+}
+</style>
+<body>
+
+<h1>Testing application of kerning to CJK text</h1>
+<h2>default</h2>
+<div class="test default">
+<span class=latin>YeYeYeYe</span><span class=cjk>ティティティティ</span>
+</div>
+<h2>font-kerning: none;</h2>
+<div class="test kernOFF">
+<span class=latin>YeYeYeYe</span><span class=cjk>ティティティティ</span>
+</div>
+<h2>font-kerning: normal;</h2>
+<div class="test kernON">
+<span class=latin>YeYeYeYe</span><span class=cjk>ティティティティ</span>
+</div>
+<h2>font-feature-settings:"palt" 0; font-kerning: normal;</h2>
+<div class="test paltOFFkernON">
+<span class=latin>YeYeYeYe</span><span class=cjk>ティティティティ</span>
+</div>
+<h2>font-feature-settings:"palt" 1; font-kerning: normal;</h2>
+<div class="test paltONkernON">
+<span class=latin>YeYeYeYe</span><span class=cjk>ティティティティ</span>
+</div>
+<h2>font-feature-settings:"palt" 1; font-kerning: none;</h2>
+<div class="test paltONkernOFF">
+<span class=latin>YeYeYeYe</span><span class=cjk>ティティティティ</span>
+</div>
+
+<script>
+const expectMatch = [
+ [ ".kernON .latin", ".paltOFFkernON .latin" ],
+ [ ".kernON .latin", ".paltONkernON .latin" ],
+ [ ".kernOFF .latin", ".paltONkernOFF .latin" ],
+ [ ".kernON .cjk", ".paltONkernON .cjk" ],
+ [ ".default .cjk", ".kernOFF .cjk" ],
+];
+const expectMismatch = [
+ [ ".kernOFF .latin", ".kernON .latin" ],
+ [ ".kernOFF .cjk", ".kernON .cjk" ],
+ [ ".paltOFFkernON .cjk", ".paltONkernON .cjk" ],
+];
+const expectMatchOneOf = [
+ [ ".default .latin", [".kernON .latin", ".kernOFF .latin"] ],
+];
+
+expectMatch.forEach((t) => {
+ test(() => {
+ let w1 = document.querySelector(t[0]).offsetWidth;
+ let w2 = document.querySelector(t[1]).offsetWidth;
+ assert_equals(w1, w2);
+ }, "expected match: " + t[0] + " vs " + t[1]);
+});
+
+expectMismatch.forEach((t) => {
+ test(() => {
+ let w1 = document.querySelector(t[0]).offsetWidth;
+ let w2 = document.querySelector(t[1]).offsetWidth;
+ assert_not_equals(w1, w2);
+ }, "expected mismatch: " + t[0] + " vs " + t[1]);
+});
+
+expectMatchOneOf.forEach((t) => {
+ test(() => {
+ let w1 = document.querySelector(t[0]).offsetWidth;
+ let matched = false;
+ t[1].forEach((t2) => {
+ let w2 = document.querySelector(t2).offsetWidth;
+ if (w1 == w2) {
+ matched = true;
+ }
+ });
+ assert_true(matched);
+ }, t[0] + " matches one of [" + t[1].join(", ") + "]");
+});
+</script>
+
+</body>
+</head> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/crash-font-face-invalid-descriptor.html b/testing/web-platform/tests/css/css-fonts/crash-font-face-invalid-descriptor.html
new file mode 100644
index 0000000000..73cea13f09
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/crash-font-face-invalid-descriptor.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<link rel="help" href="https://crbug.com/977953" />
+<script type="text/javascript" src="/resources/testharness.js"></script>
+<script type="text/javascript" src="/resources/testharnessreport.js"></script>
+<style>
+ @font-face {}
+</style>
+<script>
+ test(() => {
+ let rule = document.styleSheets[0].cssRules[0];
+ rule.style.backgroundPosition = 'bottom 10px right 20px';
+ }, 'Do not crash when setting an invalid @font-face descriptor via CSSOM');
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/crash-large-grapheme-cluster.html b/testing/web-platform/tests/css/css-fonts/crash-large-grapheme-cluster.html
new file mode 100644
index 0000000000..c1238e6f35
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/crash-large-grapheme-cluster.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Should not crash when there is an exceedingly large grapheme cluster</title>
+<link rel="author" href="mailto:xiaochengh@chromium.org">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1255482">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="target"></div>
+<script>
+test(() => {
+ target.textContent = 'e' + '\u0301'.repeat(35000) + 'X';
+ target.offsetWidth;
+});
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/discrete-no-interpolation.html b/testing/web-platform/tests/css/css-fonts/discrete-no-interpolation.html
new file mode 100644
index 0000000000..327e463acc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/discrete-no-interpolation.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<meta name=timeout content=long>
+<link rel=author href="mailto:jarhar@chromium.org">
+<link rel=help href="https://github.com/w3c/csswg-drafts/issues/4441">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<body>
+<script>
+ test_no_interpolation({
+ property: 'font-family',
+ from: 'serif',
+ to: 'monospace'
+ });
+
+ test_no_interpolation({
+ property: 'font-kerning',
+ from: 'initial',
+ to: 'none'
+ });
+
+ test_no_interpolation({
+ property: 'font-optical-sizing',
+ from: 'initial',
+ to: 'none'
+ });
+
+ test_no_interpolation({
+ property: 'font-feature-settings',
+ from: 'initial',
+ to: '"smcp"'
+ });
+
+ test_no_interpolation({
+ property: 'font-synthesis-small-caps',
+ from: 'initial',
+ to: 'none'
+ });
+
+ test_no_interpolation({
+ property: 'font-synthesis-style',
+ from: 'initial',
+ to: 'none'
+ });
+
+ test_no_interpolation({
+ property: 'font-synthesis-weight',
+ from: 'initial',
+ to: 'none'
+ });
+
+ test_no_interpolation({
+ property: 'font-variant-alternates',
+ from: 'initial',
+ to: 'historical-forms'
+ });
+
+ test_no_interpolation({
+ property: 'font-variant-caps',
+ from: 'initial',
+ to: 'small-caps'
+ });
+
+ test_no_interpolation({
+ property: 'font-variant-east-asian',
+ from: 'initial',
+ to: 'full-width'
+ });
+
+ test_no_interpolation({
+ property: 'font-variant-ligatures',
+ from: 'common-ligatures',
+ to: 'no-common-ligatures'
+ });
+
+ test_no_interpolation({
+ property: 'font-variant-numeric',
+ from: 'initial',
+ to: 'tabular-nums'
+ });
+
+ test_no_interpolation({
+ property: 'font-variant-position',
+ from: 'initial',
+ to: 'super'
+ });
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/downloadable-font-in-iframe-print-ref.html b/testing/web-platform/tests/css/css-fonts/downloadable-font-in-iframe-print-ref.html
new file mode 100644
index 0000000000..f66046f8a2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/downloadable-font-in-iframe-print-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="en-US">
+<head>
+<title></title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<iframe style="width:300px; height: 300px; border: 0"
+ srcdoc="<!DOCTYPE HTML>
+ <html>
+ <style>
+ @font-face {
+ font-family: 'MarkB';
+ src: url(resources/markB.ttf);
+ }
+
+ body { font-family: 'MarkB'; }
+ </style>
+ <body>
+ <p>B</p>
+ </body>
+ </html>">
+</iframe>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/downloadable-font-in-iframe-print.html b/testing/web-platform/tests/css/css-fonts/downloadable-font-in-iframe-print.html
new file mode 100644
index 0000000000..0cd7c4a9bc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/downloadable-font-in-iframe-print.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="en-US">
+<head>
+<title></title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="match" href="downloadable-font-in-iframe-print-ref.html">
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-face-rule">
+</head>
+<iframe style="width:300px; height: 300px; border: 0"
+ srcdoc="<!DOCTYPE HTML>
+ <html>
+ <style>
+ @font-face {
+ font-family: 'MarkA';
+ src: url(resources/markA.ttf);
+ }
+
+ body { font-family: 'MarkA'; }
+ </style>
+ <body>
+ <p>A</p>
+ </body>
+ </html>">
+</iframe>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/downloadable-font-print-ref.html b/testing/web-platform/tests/css/css-fonts/downloadable-font-print-ref.html
new file mode 100644
index 0000000000..28a92a86dc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/downloadable-font-print-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="en-US">
+<head>
+<title></title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<style type="text/css">
+
+@font-face {
+ font-family: "MarkB";
+ src: url(resources/markB.ttf);
+}
+
+body { font-family: "MarkB"; }
+
+</style>
+</head>
+<body>
+
+<p>B</p>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/downloadable-font-print.html b/testing/web-platform/tests/css/css-fonts/downloadable-font-print.html
new file mode 100644
index 0000000000..5d23073d8f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/downloadable-font-print.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="en-US">
+<head>
+<title></title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<link rel="match" href="downloadable-font-print-ref.html">
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-face-rule">
+<style type="text/css">
+
+@font-face {
+ font-family: "MarkA";
+ src: url(resources/markA.ttf);
+}
+
+body { font-family: "MarkA"; }
+
+</style>
+</head>
+<body>
+
+<p>A</p>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/fallback-remote-to-data-url.html b/testing/web-platform/tests/css/css-fonts/fallback-remote-to-data-url.html
new file mode 100644
index 0000000000..cf4feccd5a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/fallback-remote-to-data-url.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Test that font fallback from a pending web font to a data url works.</title>
+<link rel=help href="https://drafts.csswg.org/css-fonts-4/#font-matching-algorithm">
+<link rel=help href="https://bugs.chromium.org/p/chromium/issues/detail?id=897539">
+<link rel=author href="mailto:xiaochengh@chromium.org">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<style>
+#target, #not-covered {
+ font: 25px/1 remote-font, data-font, monospace;
+}
+</style>
+
+<script>
+// Create the style rule for remote-font with a random query parameter added,
+// to avoid potentially loading the font from cache (too quickly) if the test
+// is run repeatedly.
+let style = document.createElement("style");
+let randomParam = "random=" + Math.random();
+style.textContent = `
+ @font-face {
+ font-family: remote-font;
+ /* Set a long delay to make sure it doesn't finish loading */
+ src: url('/fonts/Revalia.woff?pipe=trickle(d1)&${randomParam}') format('woff');
+ font-display: swap;
+ }
+`
+document.documentElement.appendChild(style);
+
+// Ahem woff2 encoded as base64
+const src = "url(data:font/woff2;base64,d09GMgABAAAAAAaUAAsAAAAAMMAAAAZCAAEAQgAAAAAAAAAAAAAAAAAAAAAAAAAABmAAjHIREAq0ZJciATYCJAOHVAuDbAAEIAWMaAeEGBtRH6PAbk5OdLL/AvEQU7CfpOgyWiXGtGR2AZzAEBBkvKZsA8ABAAAAAAB2VxThhdLU16r9XGZBLIg+uAYXQbX2b8/s3ieyHCJhU0+GbZwij5oVOXYAbFESy2QNONfaM24ZumkLtuiI3/DN6ufH5TszT6HcVpeWuhTKgZ6BPzsA/N5pZr/wUvFPa1tYWOlXGxzL45XuLMuZkZJOyAJyCF5n9FBf1Mv1FsLQ4N7f3Uf1er8DEciZ9EXfACNfb6/fr9XTeEgimySdTm339nRnkXSmDXZ+eiQxaUTPhCba3COhlJN0FeuUSunEQMVfz6bPYtGsyvinqOvkGLJ8CBsCeTkNwIHBxnFHYoyQ6qBW1d3gzAQ2wCW2Jw2gBws/siy0baIseC8AOdmDiaBGwgLCNfNV6pYswAxakMtxOQTR6doOhHSsg17Z5kS/8UXV6dNvwCCGDBsxasy4CTyBSCJTqDQ6g8lic7jA4wuEIjGJkEob63yIKZfa+phrn/u83w/BCIrhBEnRDMvxgijJiqrphmnZjuv5QQgyiuIkzfKirOqm7fphnOZl3fbjvO7n/X6Rd9shp6CkskdNQ0vnhJ7BFSMTxOzaDQurU+fOrLpkY7fCwcnFzePCklvLvHz24RwSFDJvwZp1m7aERUTdKbToWJFDRwCvFduw7UCJUmXKVahUpVqNWnXAaQ0aNWnWolWbdh06denWoxc+lyNsgx50xiz3QMOI4kV+mQ9zIqdyr7hKVektgwtsSDDgwEeMFj1G5HuxT833zY/PT/mG7/iFv+IN3/i/bPoHtjWwIPUKUTzPL/NhjudUbhaXVGkRGiygepc16evaSwUH+D9px6DJ29Peth3i3xd+rfW/q39e/fIP2uFNgPeX9ejUoELkQwd1He/P7q8D8Pbhfn9lGdLueyeB/Tlxh2w6krs7D2bxX2uuL+6avoPcp0DZIhZ9VAxr23h5jNJqI7eyJ0zS761WrMs4O59pU2Z8OaBMieCpiHsIT5FyXLmaA8n9UuH0wSwectY0P5jgkF4l3WfDNDJZ79U+8IbytMJpi5EA+AlG4CXwljI/ctIdtR0yolCL3pPC06OV4FT7Gb7h3KhiFyfIs4GCDIstb60A/IX4BPyi3Af1otbQhQdMahztWLybUqvq/OmmkVjEPAaBTuL0sflbHhzjuy1hgH94duBnTMHtr3gLHxDqfk34cD/tt6AYtIfjf/StRcEvlzI1+7/Gkv8aLAhw4XuXZVxfV0PWtgsqMTLlRT0Q4KeT7wPodfsDSflbEHFwcjBLAvj7cT8CfAUxuZOm4zeJ65ixC7msJGaU20oRE601rNH61fyOMHaxL6j+KZ/As/hy8gM+p/ITKefyC3auYnX0p/kdWiLsc/TPOAH9O05K6L/tU2hWsICDqZTNcBRuIuCopRBw1FoIOGo3BBx1GwKOegwBR/2Aim3oIJ9jtCMjN+hgQo8EKgLDIoJGmRH7FBYyGcgOtmIeqDMpmDYD5EsGa0VaLjuyx0j+2kAaJZjXMpjyBcvl1hKUFVyYkAqom5VdJZ6VoSJCztbVoMK4gdUcyawDXi1wJanhC8Qh3kAwocFmggi1m00uCAMxqCsTZp5K0dMcsYTP4A2QC1fgZQDMyseIJbkPlfzMK+g58KKNYCZe2rnsrFAZks2u1WTdrKKvYy+57D3HBpujEPH6wFhX2NPX4XoYWge9MLH4F9waNMJYEjKRRUHCiJbBHnqWZs67Cb403EYsH+2ZFBnUlJhv5zdxYZ2x2NiGC5AabmK35AGjkuAF7q0g5do13MEr5SrVqIIgskbXDGCCb4O66EJj7fdKI3vt4KmEMhkuUVzhZSjR9JisNCyJRHpnOnjxAi/IJyG3oigkXCh7a3f2LPvnPEg1yet1gXSj/U4fy4A7N6yuxRDGCdoLoDey1gDL7+L52830I2h1f4FApNQlY6YmOaA+ydVI8EmnQ7KRmUVxZCcP7y97T6EiHxRDUA1ALzCituHHPnfrM6JCtJwybcasOSVSXrRkxaoiSRu00bYdu/bsO6gxculK7TzqrTv3Hjx68uzFqzeADtmyR7lKUUFFkkbp6mMUhmnVGNdvQC8TnwC/Mg4hVp30MhW6LBs0FDgZtW57tWVLnr4sh0dbAAAAAA==) format('woff2')";
+
+// Add the inline font via JS so that we can listen to its load status.
+// Covers digits 0-9 only.
+const dataFont = new FontFace('data-font', src, {unicodeRange: 'U+30-39'});
+document.fonts.add(dataFont);
+// Ensure loading of dataFont is initiated.
+dataFont.load();
+</script>
+
+<span id="target">0123456789</span>
+<span id="not-covered">ABCDEFGHIJ</span>
+<script>
+promise_test(async () => {
+ // The loading of data-font may still be asynchronous. Wait to allow it to load.
+ await dataFont.loaded;
+ assert_false(
+ document.fonts.check('25px/1 remote-font'),
+ 'Remote font is still pending');
+ assert_equals(
+ target.offsetWidth, 250,
+ 'Digits are in the unicode range of data-font and hence shaped with it');
+ assert_not_equals(
+ document.getElementById('not-covered').offsetWidth, 250,
+ 'Letters are out of the unicode range of data-font and hence shaped with fallback');
+}, 'We should use the inline custom font to render the page when the primary remote font is loading');
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/fallback-url-to-local.html b/testing/web-platform/tests/css/css-fonts/fallback-url-to-local.html
new file mode 100644
index 0000000000..e4aeb24091
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/fallback-url-to-local.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Test that font fallback from a pending web font to an available local font works.</title>
+<link rel=help href="https://drafts.csswg.org/css-fonts-4/#font-matching-algorithm">
+<link rel=help href="https://bugs.chromium.org/p/chromium/issues/detail?id=1101483">
+<link rel=author href="mailto:xiaochengh@chromium.org">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+@font-face {
+ font-family: remote-font;
+ src: url("/fonts/Revalia.woff?pipe=trickle(d1)") format(woff);
+}
+
+@font-face {
+ font-family: local-font;
+ src: local(Ahem);
+}
+
+#target {
+ font: 25px/1 remote-font, local-font, monospace;
+}
+</style>
+<span id="target">0123456789</span>
+<script>
+test(() => {
+ assert_false(document.fonts.check('25px/1 remote-font'));
+ assert_equals(target.offsetWidth, 250);
+}, 'We should use the local font to render the page when the primary remote font is loading');
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/first-available-font-001-ref.html b/testing/web-platform/tests/css/css-fonts/first-available-font-001-ref.html
new file mode 100644
index 0000000000..0acbd338e0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/first-available-font-001-ref.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS-fonts: reference file</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
+<style>
+@font-face {
+ font-family: 'B';
+ font-style: normal;
+ font-weight: 400;
+ src: url(/fonts/AD.woff) format('woff');
+}
+
+div {
+ width: 1ex;
+ height: 1ex;
+
+ font-size: 200px;
+ background: blue;
+ font-family: 'B';
+}
+</style>
+
+<p>Test passes if there is <strong>a blue square</strong> below.
+
+<div></div>
diff --git a/testing/web-platform/tests/css/css-fonts/first-available-font-001.html b/testing/web-platform/tests/css/css-fonts/first-available-font-001.html
new file mode 100644
index 0000000000..5eb88f7bf6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/first-available-font-001.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS-fonts: first available font and the ex unit</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-3/#first-available-font">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#first-available-font">
+<link rel="match" href="first-available-font-001-ref.html">
+<meta name="assert" content="Fonts that do not include the U+0020 character are not considered the first available font (used to determine the ex unit), even when at the start of the font list.">
+<style>
+/* Two arbitrary fonts with different metrics */
+@font-face {
+ font-family: 'A-no-space';
+ font-style: normal;
+ font-weight: 400;
+ src: url(/fonts/Revalia.woff) format('woff');
+ unicode-range: U+0061; /* Not including U+0020, so it cannot be the first available font*/
+}
+@font-face {
+ font-family: 'B';
+ font-style: normal;
+ font-weight: 400;
+ src: url(/fonts/AD.woff) format('woff');
+}
+
+div {
+ width: 1ex;
+ height: 0.5ex;
+
+ font-size: 200px;
+ background: blue;
+ position: absolute;
+}
+#t1 { font-family: 'B', sans-serif; margin-top: 0.5ex; } /* half a square, shifted down */
+#t2 { font-family: 'A-no-space', 'B', monospace; } /* Should use B as the first available font, and therefore be the same size as t1 */
+
+/* Both elements are using different generic fallback fonts, so that they end up being sized differently if web-fonts fail to load. */
+
+</style>
+
+<p>Test passes if there is <strong>a blue square</strong> below.
+
+<div id=t1></div>
+<div id=t2></div>
diff --git a/testing/web-platform/tests/css/css-fonts/first-available-font-002-ref.html b/testing/web-platform/tests/css/css-fonts/first-available-font-002-ref.html
new file mode 100644
index 0000000000..ff9464b909
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/first-available-font-002-ref.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS-fonts: reference file</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
+<style>
+@font-face {
+ font-family: 'B';
+ font-style: normal;
+ font-weight: 400;
+ src: url(/fonts/AD.woff) format('woff');
+}
+
+div {
+ width: 1ch;
+ height: 1ch;
+
+ font-size: 200px;
+ background: blue;
+ font-family: 'B';
+}
+</style>
+
+<p>Test passes if there is <strong>a blue square</strong> below.
+
+<div></div>
diff --git a/testing/web-platform/tests/css/css-fonts/first-available-font-002.html b/testing/web-platform/tests/css/css-fonts/first-available-font-002.html
new file mode 100644
index 0000000000..df47df840b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/first-available-font-002.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS-fonts: first available font and the ch unit</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-3/#first-available-font">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#first-available-font">
+<link rel="match" href="first-available-font-002-ref.html">
+<meta name="assert" content="Fonts that do not include the U+0020 character are not considered the first available font (used to determine the ch unit), even when at the start of the font list.">
+<style>
+/* Two arbitrary fonts with different metrics */
+@font-face {
+ font-family: 'A-no-space';
+ font-style: normal;
+ font-weight: 400;
+ src: url(/fonts/Revalia.woff) format('woff');
+ unicode-range: U+0061; /* Not including U+0020, so it cannot be the first available font*/
+}
+@font-face {
+ font-family: 'B';
+ font-style: normal;
+ font-weight: 400;
+ src: url(/fonts/AD.woff) format('woff');
+}
+
+div {
+ width: 1ch;
+ height: 0.5ch;
+
+ font-size: 200px;
+ background: blue;
+ position: absolute;
+}
+#t1 { font-family: 'B', sans-serif; margin-top: 0.5ch; } /* half a square, shifted down */
+#t2 { font-family: 'A-no-space', 'B', monospace; } /* Should use B as the first available font, and therefore be the same size as t1 */
+
+/* Both elements are using different generic fallback fonts, so that they end up being sized differently if web-fonts fail to load. */
+
+</style>
+
+<p>Test passes if there is <strong>a blue square</strong> below.
+
+<div id=t1></div>
+<div id=t2></div>
diff --git a/testing/web-platform/tests/css/css-fonts/first-available-font-003-ref.html b/testing/web-platform/tests/css/css-fonts/first-available-font-003-ref.html
new file mode 100644
index 0000000000..8b01bb72e6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/first-available-font-003-ref.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS-fonts: reference file</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
+<style>
+@font-face {
+ font-family: 'A';
+ font-style: normal;
+ font-weight: 400;
+ src: url(/fonts/Revalia.woff) format('woff');
+}
+div {
+ position: absolute;
+ line-height: normal;
+ font-size: 100px;
+ color: transparent;
+ border: solid black 1px;
+ width: 100px;
+ font-family: A;
+}
+
+.ba { margin-left: 100px; }
+</style>
+
+<p>There should be <strong>two identically sized rectangles</strong> below.
+
+<div class="ba">a</div>
+<div class="a">a</div>
diff --git a/testing/web-platform/tests/css/css-fonts/first-available-font-003.html b/testing/web-platform/tests/css/css-fonts/first-available-font-003.html
new file mode 100644
index 0000000000..d6b1b2695f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/first-available-font-003.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS-fonts: first available font and the strut</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-3/#first-available-font">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#first-available-font">
+<link rel="match" href="first-available-font-003-ref.html">
+<meta name="assert" content="The strut, which impacts the line height, is taken from the primary font, which is the first font to include the U+0020 character.">
+<style>
+/* Two arbitrary fonts with different metrics */
+@font-face {
+ font-family: 'A';
+ font-style: normal;
+ font-weight: 400;
+ src: url(/fonts/Revalia.woff) format('woff');
+}
+@font-face {
+ font-family: 'B-no-space';
+ font-style: normal;
+ font-weight: 400;
+ src: url(/fonts/AD.woff) format('woff');
+ unicode-range: U+0062;
+}
+
+div {
+ position: absolute;
+ line-height: normal;
+ font-size: 100px;
+ color: transparent;
+ border: solid black 1px;
+ width: 100px;
+}
+
+.a { font-family: A; }
+.ba { font-family: B-no-space, A; margin-left: 100px; }
+</style>
+
+<p>There should be <strong>two identically sized rectangles</strong> below.
+
+<!-- Both divs show the same content with the same font,
+ but the first div has an unused font earlier in the list,
+ while the second one does not.
+ However, that font does not include the U+0020 character,
+ and can therefore not be the first available font.
+ If it had been, it would affect the height of the strut,
+ making the height different.
+ Since it is not, both boxes are expected to be the same height. -->
+<div class="ba">a</div>
+<div class="a">a</div>
diff --git a/testing/web-platform/tests/css/css-fonts/first-available-font-004.html b/testing/web-platform/tests/css/css-fonts/first-available-font-004.html
new file mode 100644
index 0000000000..05ae07d6fd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/first-available-font-004.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS-fonts: first available font and the strut</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-3/#first-available-font">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#first-available-font">
+<link rel="match" href="first-available-font-003-ref.html">
+<meta name="assert" content="The strut, which impacts the line height, is taken from the primary font, which is the first font to include the U+0020 character.
+The fact that that font is used somewhere else in the page makes no difference.">
+<style>
+/* Two arbitrary fonts with different metrics */
+@font-face {
+ font-family: 'A';
+ font-style: normal;
+ font-weight: 400;
+ src: url(/fonts/Revalia.woff) format('woff');
+}
+@font-face {
+ font-family: 'B-no-space';
+ font-style: normal;
+ font-weight: 400;
+ src: url(/fonts/AD.woff) format('woff');
+ unicode-range: U+0062;
+}
+
+div {
+ position: absolute;
+ line-height: normal;
+ font-size: 100px;
+ color: transparent;
+ border: solid black 1px;
+ width: 100px;
+}
+
+.a { font-family: A; }
+.ba { font-family: B-no-space, A; margin-left: 100px; }
+.loader { font-family: B-no-space; border: none; }
+</style>
+
+<p>There should be <strong>two identically sized rectangles</strong> below.
+
+<div class=loader>b</div>
+
+<!-- Both divs show the same content with the same font,
+ but the first div has an unused font earlier in the list,
+ while the second one does not.
+ However, that font does not include the U+0020 character,
+ and can therefore not be the first available font.
+ If it had been, it would affect the height of the strut,
+ making the height different.
+ Since it is not, both boxes are expected to be the same height. -->
+<div class="ba">a</div>
+<div class="a">a</div>
+
diff --git a/testing/web-platform/tests/css/css-fonts/first-available-font-005-ref.html b/testing/web-platform/tests/css/css-fonts/first-available-font-005-ref.html
new file mode 100644
index 0000000000..9f27c19670
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/first-available-font-005-ref.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS fonts test: baseline position with explicit sizing, no space in first font</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
+<p>Test passes if there is <strong>no red</strong> below.
diff --git a/testing/web-platform/tests/css/css-fonts/first-available-font-005.html b/testing/web-platform/tests/css/css-fonts/first-available-font-005.html
new file mode 100644
index 0000000000..3a6b8871dd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/first-available-font-005.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS fonts test: baseline position with explicit sizing, no space in first font</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-3/#first-available-font">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#first-available-font">
+<link rel="match" href="first-available-font-005-ref.html">
+<meta name="assert" content="The position of the baseline in an inline-level box whose height is determined by a non-normal value of line-height
+ does depend on the primary font, which is the first that contains U+0020.">
+<style>
+@font-face {
+ font-family: 'A-no-space';
+ font-style: normal;
+ font-weight: 400;
+ src: url(/fonts/Revalia.woff) format('woff');
+ unicode-range: U+0061;
+}
+@font-face {
+ font-family: 'B-no-space';
+ font-style: normal;
+ font-weight: 400;
+ src: url(/fonts/AD.woff) format('woff');
+ unicode-range: U+0061;
+}
+@font-face {
+ font-family: 'B';
+ font-style: normal;
+ font-weight: 400;
+ src: url(/fonts/AD.woff) format('woff');
+}
+
+div {
+ position: absolute;
+ line-height: 100px;
+ font-size: 100px;
+ width: 300px; /* plenty of room for the (invisible) text */
+ text-align: right;
+ color: transparent;
+ outline: solid;
+}
+span { /* visible thing aligned to the baseline, and small enough to not influence its position */
+ display: inline-block;
+ width: 20px;
+ height: 20px;
+}
+
+/* white #a is on top of red #b,
+ The first font in their respective lists do no contain U+0020,
+ and therfore the first available font should be the next one, which is the same.
+ Since the baseline should be based on the primary font,
+ their baselines should line up and red #b should be invisible.*/
+#a { font-family: A-no-space, B; }
+#a span { background: red; }
+
+#b { font-family: B-no-space, B; }
+#b span { background: white; }
+
+</style>
+
+<p>Test passes if there is <strong>no red</strong> below.
+
+<div id=a>bb<span></span></div>
+<div id=b>bb<span></span></div>
diff --git a/testing/web-platform/tests/css/css-fonts/first-available-font-006.html b/testing/web-platform/tests/css/css-fonts/first-available-font-006.html
new file mode 100644
index 0000000000..3766fd1bfa
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/first-available-font-006.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS fonts test: baseline position with explicit sizing, no space in first font</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-3/#first-available-font">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#first-available-font">
+<link rel="match" href="first-available-font-005-ref.html">
+<meta name="assert" content="The position of the baseline in an inline-level box whose height is determined by a non-normal value of line-height
+ does depend on the primary font, which is the first that contains U+0020.">
+<style>
+@font-face {
+ font-family: 'A-no-space';
+ font-style: normal;
+ font-weight: 400;
+ src: url(/fonts/Revalia.woff) format('woff');
+ unicode-range: U+0061;
+}
+@font-face {
+ font-family: 'B-no-space';
+ font-style: normal;
+ font-weight: 400;
+ src: url(/fonts/AD.woff) format('woff');
+ unicode-range: U+0061;
+}
+@font-face {
+ font-family: 'B';
+ font-style: normal;
+ font-weight: 400;
+ src: url(/fonts/AD.woff) format('woff');
+}
+
+div {
+ position: absolute;
+ line-height: 100px;
+ font-size: 100px;
+ width: 300px; /* plenty of room for the (invisible) text */
+ text-align: right;
+ color: transparent;
+ outline: solid;
+}
+span { /* visible thing aligned to the baseline, and small enough to not influence its position */
+ display: inline-block;
+ width: 20px;
+ height: 20px;
+}
+
+/* white #a is on top of red #b,
+ The first font in their respective lists do no contain U+0020,
+ and therfore the first available font should be the next one, which is the same.
+ Since the baseline should be based on the primary font,
+ their baselines should line up and red #b should be invisible.
+ The fact that that font is used should make no difference.
+ */
+#a { font-family: A-no-space, B; }
+#a span { background: red; }
+
+#b { font-family: B-no-space, B; }
+#b span { background: white; }
+
+</style>
+
+<p>Test passes if there is <strong>no red</strong> below.
+
+<div id=a>aa<span></span></div>
+<div id=b>aa<span></span></div>
diff --git a/testing/web-platform/tests/css/css-fonts/first-available-font-007.html b/testing/web-platform/tests/css/css-fonts/first-available-font-007.html
new file mode 100644
index 0000000000..0efbb34979
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/first-available-font-007.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS-fonts: inline level box content height and first available font, missing U+0020</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-3/#first-available-font">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#first-available-font">
+<link rel="match" href="first-available-font-005-ref.html">
+<meta name="assert" content="The height of the content area of an inline-level depends only on the first available font, which is the first one to include U+0020.">
+<style>
+/* Two Arbitrary fonts with different metrics. One has a taller ascender, the other a deeper descender. */
+@font-face {
+ font-family: 'A-no-space';
+ font-style: normal;
+ font-weight: 400;
+ src: url(/fonts/Revalia.woff) format('woff');
+ unicode-range: U+0061;
+}
+@font-face {
+ font-family: 'B';
+ font-style: normal;
+ font-weight: 400;
+ src: url(/fonts/AD.woff) format('woff');
+}
+
+div {
+ font-size: 50px;
+ display: inline-block;
+ width: 40px;
+ overflow: hidden;
+}
+
+span { color: transparent; }
+
+div:nth-of-type(1) {
+ font-family: B;
+}
+div:nth-of-type(1) span { background: red; }
+
+/* The second div should have the same first available font as the first one, since A-no-space does no include U+0020.
+ Both div's span's should thefore overflap exactly, with the white one hiding the red.
+ */
+div:nth-of-type(2) {
+ font-family: A-no-space, B;
+ margin-left: -40px;
+}
+div:nth-of-type(2) span { background: white; }
+</style>
+
+<p>Test passes if there is <strong>no red</strong> below.
+
+<div><span>aaaaa</span></div><div><span>aaaaa</span></div>
diff --git a/testing/web-platform/tests/css/css-fonts/font-colorization-ref.html b/testing/web-platform/tests/css/css-fonts/font-colorization-ref.html
new file mode 100644
index 0000000000..b2c69198cc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-colorization-ref.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Colorisation of non-color glyph should work in the presence of COLR or SVG table</title>
+<link rel="help" href="https://drafts.csswg.org/css-color/#the-color-property">
+<link rel="author" title="Dominik Röttsches" href="mailto:drott@chromium.org">
+<link rel="stylesheet" href="/fonts/ahem.css">
+</head>
+<body>
+<div style="font: 100px/1.2 'Ahem', fantasy; color: green;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-colorization.html b/testing/web-platform/tests/css/css-fonts/font-colorization.html
new file mode 100644
index 0000000000..252d15fc56
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-colorization.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Colorisation of non-color glyph should work in the presence of COLR or SVG table</title>
+<link rel="help" href="https://drafts.csswg.org/css-color/#the-color-property">
+<link rel="author" title="Dominik Röttsches" href="mailto:drott@chromium.org">
+<link rel="match" href="font-colorization-ref.html">
+<style>
+@font-face {
+ font-family: "svg_colr";
+ src: url("resources/colorization_SVG_COLR.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<!-- A glyph from a font that contains SVG or COLR tables but for which there is
+ no data in the color font tables, should be colored in the text
+ foreground color. -->
+<div style="font: 100px/1.2 'svg_colr', fantasy; color: green;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-default-01-ref.html b/testing/web-platform/tests/css/css-fonts/font-default-01-ref.html
new file mode 100644
index 0000000000..bbe0251f24
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-default-01-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font default features</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .tests {
+ font-family: fwf;
+ font-size: 4em;
+ line-height: 1.1;
+ }
+</style>
+
+<body>
+<!-- test font does not currently test for rlig or locl -->
+<p>Test passes if the two lines below are identical, with six check marks (✓). </p>
+<section class="tests">
+ <p class="ref">AAAAAA</p>
+ <p class="ref">AAAAAA</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-default-01.html b/testing/web-platform/tests/css/css-fonts/font-default-01.html
new file mode 100644
index 0000000000..99fc58b7e1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-default-01.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font default features</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#default-features">
+<link rel="match" href="font-default-01-ref.html">
+<meta name="assert" content="Required ligatures, common ligatures and contextual forms must be enabled by default (OpenType features: rlig, liga, clig, calt), along with localized forms (OpenType feature: locl), and features required for proper display of composed characters and marks (OpenType features: ccmp, mark, mkmk).">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .tests {
+ font-family: fwf;
+ font-size: 4em;
+ line-height: 1.1;
+ }
+</style>
+
+<body>
+<!-- test font does not currently test for rlig or locl -->
+<p>Test passes if the two lines below are identical, with six check marks (✓). </p>
+<section class="tests">
+ <p class="test">CDGÂÂÄ</p>
+ <p class="ref">AAAAAA</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-default-02-ref.html b/testing/web-platform/tests/css/css-fonts/font-default-02-ref.html
new file mode 100644
index 0000000000..6d45ace67e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-default-02-ref.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font default features</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .tests {
+ font-family: fwf;
+ font-size: 4em;
+ line-height: 1.1;
+ }
+ .test {
+ font-variant: normal;
+ }
+</style>
+
+<body>
+<!-- test font does not currently test for rlig or locl -->
+<p>Test passes if the three lines below are identical, with six check marks (✓). </p>
+<section class="tests">
+ <p class="ref">AAAAAA</p>
+ <p class="ref">AAAAAA</p>
+ <p class="ref">AAAAAA</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-default-02.html b/testing/web-platform/tests/css/css-fonts/font-default-02.html
new file mode 100644
index 0000000000..24f6194214
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-default-02.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font default features</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#default-features">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-prop">
+<link rel="match" href="font-default-02-ref.html">
+<meta name="assert" content="These features must always be enabled, even when the value of the ‘font-variant’ and ‘font-feature-settings’ properties is ‘normal’. ">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .tests {
+ font-family: fwf;
+ font-size: 4em;
+ line-height: 1.1;
+ }
+ .test {
+ font-variant: normal;
+ }
+</style>
+
+<body>
+<!-- test font does not currently test for rlig or locl -->
+<p>Test passes if the three lines below are identical, with six check marks (✓). </p>
+<section class="tests">
+ <p class="default">CDGÂÂÄ</p>
+ <p class="test">CDGÂÂÄ</p>
+ <p class="ref">AAAAAA</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-default-03-ref.html b/testing/web-platform/tests/css/css-fonts/font-default-03-ref.html
new file mode 100644
index 0000000000..2f1d160c12
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-default-03-ref.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font default features</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .tests {
+ font-family: fwf;
+ font-size: 4em;
+ line-height: 1.1;
+ }
+ .test {
+ font-feature-settings: normal;
+ }
+</style>
+
+<body>
+<!-- test font does not currently test for rlig or locl -->
+<p>Test passes if the three lines below are identical, with six check marks (✓). </p>
+<section class="tests">
+ <p class="default">CDGÂÂÄ</p>
+ <p class="test">CDGÂÂÄ</p>
+ <p class="ref">AAAAAA</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-default-03.html b/testing/web-platform/tests/css/css-fonts/font-default-03.html
new file mode 100644
index 0000000000..a72a4bc00d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-default-03.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font default features</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#default-features">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-default-03-ref.html">
+<meta name="assert" content="These features must always be enabled, even when the value of the ‘font-variant’ and ‘font-feature-settings’ properties is ‘normal’. ">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .tests {
+ font-family: fwf;
+ font-size: 4em;
+ line-height: 1.1;
+ }
+ .test {
+ font-feature-settings: normal;
+ }
+</style>
+
+<body>
+<!-- test font does not currently test for rlig or locl -->
+<p>Test passes if the three lines below are identical, with six check marks (✓). </p>
+<section class="tests">
+ <p class="default">CDGÂÂÄ</p>
+ <p class="test">CDGÂÂÄ</p>
+ <p class="ref">AAAAAA</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-default-04-a-ref.html b/testing/web-platform/tests/css/css-fonts/font-default-04-a-ref.html
new file mode 100644
index 0000000000..cf428d2cf1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-default-04-a-ref.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font default features</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<meta name="assert" content="For upright text within vertical text runs, vertical alternates (OpenType feature: vert) must be enabled">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .tests {
+ font-family: fwf;
+ font-size: 4em;
+ line-height: 1.1;
+ writing-mode: vertical-rl;
+ text-orientation: upright;
+ color: green;
+ }
+ .default {
+ color: purple;
+ }
+</style>
+
+<body>
+<p>Test passes if the first <em>vertical</em> line (in purple) has <em>at least one</em> check mark
+and the next two lines (in green) are identical, with two check marks (✓).</p>
+<section class="tests">
+ <p class="default">AB</p>
+ <p><span class="test1">A</span><span class="test2">A</span></p>
+ <p class="ref">AA</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-default-04-b-ref.html b/testing/web-platform/tests/css/css-fonts/font-default-04-b-ref.html
new file mode 100644
index 0000000000..3051b27365
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-default-04-b-ref.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font default features</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<meta name="assert" content="For upright text within vertical text runs, vertical alternates (OpenType feature: vert) must be enabled">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .tests {
+ font-family: fwf;
+ font-size: 4em;
+ line-height: 1.1;
+ writing-mode: vertical-rl;
+ text-orientation: upright;
+ color: green;
+ }
+ .default {
+ color: purple;
+ }
+</style>
+
+<body>
+<p>Test passes if the first <em>vertical</em> line (in purple) has <em>at least one</em> check mark
+and the next two lines (in green) are identical, with two check marks (✓).</p>
+<section class="tests">
+ <p class="default">BA</p>
+ <p><span class="test1">A</span><span class="test2">A</span></p>
+ <p class="ref">AA</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-default-04-c-ref.html b/testing/web-platform/tests/css/css-fonts/font-default-04-c-ref.html
new file mode 100644
index 0000000000..773acfc592
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-default-04-c-ref.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font default features</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<meta name="assert" content="For upright text within vertical text runs, vertical alternates (OpenType feature: vert) must be enabled">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .tests {
+ font-family: fwf;
+ font-size: 4em;
+ line-height: 1.1;
+ writing-mode: vertical-rl;
+ text-orientation: upright;
+ color: green;
+ }
+ .default {
+ color: purple;
+ }
+</style>
+
+<body>
+<p>Test passes if the first <em>vertical</em> line (in purple) has <em>at least one</em> check mark
+and the next two lines (in green) are identical, with two check marks (✓).</p>
+<section class="tests">
+ <p class="default">AA</p>
+ <p><span class="test1">A</span><span class="test2">A</span></p>
+ <p class="ref">AA</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-default-04.html b/testing/web-platform/tests/css/css-fonts/font-default-04.html
new file mode 100644
index 0000000000..5493d7205f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-default-04.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font default features</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#default-features">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#block-flow">
+<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#text-orientation">
+<link rel="match" href="font-default-04-a-ref.html">
+<link rel="match" href="font-default-04-b-ref.html">
+<link rel="match" href="font-default-04-c-ref.html">
+<meta name="assert" content="For upright text within vertical text runs, vertical alternates (OpenType feature: vert) must be enabled">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .tests {
+ font-family: fwf;
+ font-size: 4em;
+ line-height: 1.1;
+ writing-mode: vertical-rl;
+ text-orientation: upright;
+ color: green;
+ }
+ .default {
+ color: purple;
+ }
+ .test1 {
+ font-feature-settings: "vert" on;
+ }
+ .test2 {
+ font-feature-settings: "vert" 2;
+ }
+</style>
+
+<body>
+<p>Test passes if the first <em>vertical</em> line (in purple) has <em>at least one</em> check mark
+and the next two lines (in green) are identical, with two check marks (✓).</p>
+<section class="tests">
+ <p class="default">Å人</p>
+ <p><span class="test1">Å</span><span class="test2">人</span></p>
+ <p class="ref">AA</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-display/font-display-change-ref.html b/testing/web-platform/tests/css/css-fonts/font-display/font-display-change-ref.html
new file mode 100644
index 0000000000..e06a559399
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-display/font-display-change-ref.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<title>Updating font-display value while loading</title>
+<script>
+
+window.onload = () => {
+ const displayValues = [ 'auto', 'block', 'swap', 'fallback', 'optional' ];
+
+ for (let value of displayValues) {
+ let face = new FontFace(value,
+ 'url("/fonts/Ahem.ttf?pipe=trickle(d5)")',
+ {display: value});
+ document.fonts.add(face);
+ face.load();
+ }
+
+ setTimeout(() => {
+ document.documentElement.classList.remove("reftest-wait");
+ }, 200);
+};
+
+</script>
+<table>
+ <tr>
+ <th>auto</th>
+ <th>block</th>
+ <th>swap</th>
+ <th>fallback</th>
+ <th>optional</th>
+ </tr>
+ <tr>
+ <td>from auto</td>
+ <td style="font-family: auto">a</td>
+ <td style="font-family: block">a</td>
+ <td style="font-family: swap">a</td>
+ <td style="font-family: fallback">a</td>
+ <td style="font-family: optional">a</td>
+ </tr>
+ <tr>
+ <td>from block</td>
+ <td style="font-family: auto">a</td>
+ <td style="font-family: block">a</td>
+ <td style="font-family: swap">a</td>
+ <td style="font-family: fallback">a</td>
+ <td style="font-family: optional">a</td>
+ </tr>
+ <tr>
+ <td>from swap</td>
+ <td style="font-family: auto">a</td>
+ <td style="font-family: block">a</td>
+ <td style="font-family: swap">a</td>
+ <td style="font-family: fallback">a</td>
+ <td style="font-family: optional">a</td>
+ </tr>
+ <tr>
+ <td>from fallback</td>
+ <td style="font-family: auto">a</td>
+ <td style="font-family: block">a</td>
+ <td style="font-family: swap">a</td>
+ <td style="font-family: fallback">a</td>
+ <td style="font-family: optional">a</td>
+ </tr>
+ <tr>
+ <td>from optional</td>
+ <td style="font-family: auto">a</td>
+ <td style="font-family: block">a</td>
+ <td style="font-family: swap">a</td>
+ <td style="font-family: fallback">a</td>
+ <td style="font-family: optional">a</td>
+ </tr>
+</table>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-display/font-display-change.html b/testing/web-platform/tests/css/css-fonts/font-display/font-display-change.html
new file mode 100644
index 0000000000..64130ca52a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-display/font-display-change.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<title>Updating font-display value while loading</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-display-desc">
+<link rel="match" href="font-display-change-ref.html">
+<script>
+
+window.onload = () => {
+ const displayValues = [ 'auto', 'block', 'swap', 'fallback', 'optional' ];
+
+ let updateFuncs = [];
+
+ for (let initialValue of displayValues) {
+ for (let targetValue of displayValues) {
+ let face = new FontFace(initialValue + '-' + targetValue,
+ 'url("/fonts/Ahem.ttf?pipe=trickle(d5)")',
+ {display: initialValue});
+ document.fonts.add(face);
+ face.load();
+ updateFuncs.push(() => {
+ face.display = targetValue;
+ });
+ }
+ }
+
+ setTimeout(() => {
+ for (let update of updateFuncs) {
+ update();
+ }
+ document.documentElement.classList.remove("reftest-wait");
+ }, 200);
+};
+
+</script>
+<table>
+ <tr>
+ <th>auto</th>
+ <th>block</th>
+ <th>swap</th>
+ <th>fallback</th>
+ <th>optional</th>
+ </tr>
+ <tr>
+ <td>from auto</td>
+ <td style="font-family: auto-auto">a</td>
+ <td style="font-family: auto-block">a</td>
+ <td style="font-family: auto-swap">a</td>
+ <td style="font-family: auto-fallback">a</td>
+ <td style="font-family: auto-optional">a</td>
+ </tr>
+ <tr>
+ <td>from block</td>
+ <td style="font-family: block-auto">a</td>
+ <td style="font-family: block-block">a</td>
+ <td style="font-family: block-swap">a</td>
+ <td style="font-family: block-fallback">a</td>
+ <td style="font-family: block-optional">a</td>
+ </tr>
+ <tr>
+ <td>from swap</td>
+ <td style="font-family: swap-auto">a</td>
+ <td style="font-family: swap-block">a</td>
+ <td style="font-family: swap-swap">a</td>
+ <td style="font-family: swap-fallback">a</td>
+ <td style="font-family: swap-optional">a</td>
+ </tr>
+ <tr>
+ <td>from fallback</td>
+ <td style="font-family: fallback-auto">a</td>
+ <td style="font-family: fallback-block">a</td>
+ <td style="font-family: fallback-swap">a</td>
+ <td style="font-family: fallback-fallback">a</td>
+ <td style="font-family: fallback-optional">a</td>
+ </tr>
+ <tr>
+ <td>from optional</td>
+ <td style="font-family: optional-auto">a</td>
+ <td style="font-family: optional-block">a</td>
+ <td style="font-family: optional-swap">a</td>
+ <td style="font-family: optional-fallback">a</td>
+ <td style="font-family: optional-optional">a</td>
+ </tr>
+</table>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-display/font-display-failure-fallback.html b/testing/web-platform/tests/css/css-fonts/font-display/font-display-failure-fallback.html
new file mode 100644
index 0000000000..00b528298b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-display/font-display-failure-fallback.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-display-timeline">
+<script nonce="abc" src="/resources/testharness.js"></script>
+<script nonce="abc" src="/resources/testharnessreport.js"></script>
+<style>
+@font-face {
+ font-family: 'TestFace';
+ src: url('/fonts/Ahem.ttf?pipe=trickle(d0.5)'),
+ url('/fonts/Ahem.ttf?fallback-src');
+ font-display: optional;
+}
+
+@font-face {
+ font-family: 'FallbackFace';
+ src: url('/fonts/Ahem.ttf?fallback-face');
+}
+
+.test {
+ font-family: 'TestFace','FallbackFace';
+}
+</style>
+<div class="test">hello</div>
+<script>
+function numberOfDownloads(url) {
+ assert_true(!!window.PerformanceResourceTiming, "ResourceTiming not supported");
+ var absoluteURL = new URL(url, location.href).href;
+ return performance.getEntriesByName(absoluteURL).length;
+}
+
+promise_test(function() {
+ return document.fonts.ready.then(function() {
+ assert_equals(numberOfDownloads('/fonts/Ahem.ttf?pipe=trickle(d0.5)'), 1, 'first source should be loaded');
+ assert_equals(numberOfDownloads('/fonts/Ahem.ttf?fallback-src'), 0, 'fallback source should not be loaded');
+ assert_equals(numberOfDownloads('/fonts/Ahem.ttf?fallback-face'), 1, 'fallback font face should be loaded');
+ });
+}, "Fallback for font failure period");
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/font-display/font-display-feature-policy-02.tentative-ref.html b/testing/web-platform/tests/css/css-fonts/font-display/font-display-feature-policy-02.tentative-ref.html
new file mode 100644
index 0000000000..019043fd11
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-display/font-display-feature-policy-02.tentative-ref.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<title>Test for font-display-late-swap feature policy behavior when set to report-only</title>
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+.ahem {
+ font-family: 'Ahem';
+}
+.arial {
+ font-family: 'Arial';
+}
+</style>
+<p>None of the font-display values should be changed</p>
+<table id="container">
+ <tr>
+ <th>not-set</th>
+ <th>auto</th>
+ <th>block</th>
+ <th>swap</th>
+ <th>fallback</th>
+ <th>optional</th>
+ </tr>
+ <tr>
+ <td class="ahem">a</td>
+ <td class="ahem">a</td>
+ <td class="ahem">a</td>
+ <td class="ahem">a</td>
+ <td class="ahem">a</td>
+ <td class="arial">a</td>
+ </tr>
+</table>
diff --git a/testing/web-platform/tests/css/css-fonts/font-display/font-display-feature-policy-02.tentative.html b/testing/web-platform/tests/css/css-fonts/font-display/font-display-feature-policy-02.tentative.html
new file mode 100644
index 0000000000..65f76b0784
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-display/font-display-feature-policy-02.tentative.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<title>Test for font-display-late-swap feature policy behavior when set to report-only</title>
+<link rel="help" href="https://github.com/w3c/webappsec-feature-policy/blob/master/policies/font-display-late-swap.md">
+<link rel="match" href="font-display-feature-policy-02.tentative-ref.html">
+<style>
+</style>
+<p>None of the font-display values should be changed</p>
+<table id="container">
+ <tr>
+ <th>not-set</th>
+ <th>auto</th>
+ <th>block</th>
+ <th>swap</th>
+ <th>fallback</th>
+ <th>optional</th>
+ </tr>
+</table>
+<script>
+const fontDisplayValues = ['', 'auto', 'block', 'swap', 'fallback', 'optional'];
+const table = document.getElementById('container');
+
+function makeFontFaceDeclaration(family, display) {
+ url = '/fonts/Ahem.ttf?pipe=trickle(d1)'; // Before the swap period is over
+ return '@font-face { font-family: ' + family + '; src: url("' + url + '"); font-display: ' + display + '; }';
+}
+
+window.onload = () => {
+ let tr = document.createElement('tr');
+ for (let display of fontDisplayValues) {
+ const family = display + '-face';
+ const rule = makeFontFaceDeclaration(family, display);
+ document.styleSheets[0].insertRule(rule, 0);
+ let td = document.createElement('td');
+ td.textContent = 'a';
+ td.style.fontFamily = family + ', Arial';
+ tr.appendChild(td);
+ }
+ table.appendChild(tr);
+ const timeoutMilliSec = 1500; // After the font is loaded
+ setTimeout(() => {
+ document.documentElement.classList.remove("reftest-wait");
+ }, timeoutMilliSec);
+}
+</script>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-display/font-display-feature-policy-02.tentative.html.headers b/testing/web-platform/tests/css/css-fonts/font-display/font-display-feature-policy-02.tentative.html.headers
new file mode 100644
index 0000000000..e6c4898d5d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-display/font-display-feature-policy-02.tentative.html.headers
@@ -0,0 +1 @@
+Feature-Policy-Report-Only: font-display-late-swap 'none'; \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-display/font-display-preload-ref.html b/testing/web-platform/tests/css/css-fonts/font-display/font-display-preload-ref.html
new file mode 100644
index 0000000000..e3ba8caa32
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-display/font-display-preload-ref.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+<title>font-display should work for preloaded fonts</title>
+<style>
+ .arial {
+ height: 20px;
+ font-family: Arial;
+ }
+</style>
+<div id="container">
+ <div class="arial"></div>
+ <div class="arial"></div>
+ <div class="arial">Swap</div>
+ <div class="arial">Fallback</div>
+ <div class="arial">Optional</div>
+</div>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-display/font-display-preload.html b/testing/web-platform/tests/css/css-fonts/font-display/font-display-preload.html
new file mode 100644
index 0000000000..46f392ff84
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-display/font-display-preload.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<title>font-display should work for preloaded fonts</title>
+<link id="link" href="/fonts/Ahem.ttf?pipe=trickle(d5)" as="font" type="font/ttf" crossorigin>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-display-desc">
+<link rel="match" href="font-display-preload-ref.html">
+<style>
+ @font-face {
+ font-family: 'Auto';
+ src: url('/fonts/Ahem.ttf?pipe=trickle(d5)');
+ font-display: auto;
+ }
+ @font-face {
+ font-family: 'Block';
+ src: url('/fonts/Ahem.ttf?pipe=trickle(d5)');
+ font-display: block;
+ }
+ @font-face {
+ font-family: 'Swap';
+ src: url('/fonts/Ahem.ttf?pipe=trickle(d5)');
+ font-display: swap;
+ }
+ @font-face {
+ font-family: 'Fallback';
+ src: url('/fonts/Ahem.ttf?pipe=trickle(d5)');
+ font-display: fallback;
+ }
+ @font-face {
+ font-family: 'Optional';
+ src: url('/fonts/Ahem.ttf?pipe=trickle(d5)');
+ font-display: optional;
+ }
+</style>
+<div id="container" hidden>
+ <div style="height: 20px; font-family: 'Auto', Arial">Auto</div>
+ <div style="height: 20px; font-family: 'Block', Arial">Block</div>
+ <div style="height: 20px; font-family: 'Swap', Arial">Swap</div>
+ <div style="height: 20px; font-family: 'Fallback', Arial">Fallback</div>
+ <div style="height: 20px; font-family: 'Optional', Arial">Optional</div>
+</div>
+<script>
+ window.onload = () => {
+ document.getElementById('link').rel = 'preload';
+ document.getElementById('container').hidden = false;
+ const timeoutMsec = 200; // Between the short limit and the long limit
+ setTimeout(() => {
+ document.documentElement.classList.remove("reftest-wait");
+ }, timeoutMsec);
+ };
+</script>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-display/font-display-ref.html b/testing/web-platform/tests/css/css-fonts/font-display/font-display-ref.html
new file mode 100644
index 0000000000..d75644e351
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-display/font-display-ref.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<title>Test for font-display @font-face descriptor</title>
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+.ahem {
+ font-family: Ahem;
+}
+.arial {
+ font-family: Arial;
+}
+</style>
+<p>Tests how text with a font that takes <i>delay</i> seconds to load look like after <i>T</i> seconds from load start.</p>
+<table>
+<tr>
+ <th>T[sec]</th>
+ <th>delay[sec]</th>
+ <th>block</th>
+ <th>swap</th>
+ <th>fallback</th>
+ <th>optional</th>
+</tr>
+<tr>
+ <td>0</td>
+ <td>1</td>
+ <td></td>
+ <td class="arial">a</td>
+ <td></td>
+ <td class="arial">a</td>
+</tr>
+<tr>
+ <td>1</td>
+ <td>0</td>
+ <td class="ahem">a</td>
+ <td class="ahem">a</td>
+ <td class="ahem">a</td>
+ <td class="ahem">a</td>
+</tr>
+<tr>
+ <td>1</td>
+ <td>0.5</td>
+ <td class="ahem">a</td>
+ <td class="ahem">a</td>
+ <td class="ahem">a</td>
+ <td class="arial">a</td>
+</tr>
+<tr>
+ <td>1</td>
+ <td>3</td>
+ <td></td>
+ <td class="arial">a</td>
+ <td class="arial">a</td>
+ <td class="arial">a</td>
+</tr>
+<tr>
+ <td>5</td>
+ <td>2</td>
+ <td class="ahem">a</td>
+ <td class="ahem">a</td>
+ <td class="ahem">a</td>
+ <td class="arial">a</td>
+</tr>
+<tr>
+ <td>5</td>
+ <td>4</td>
+ <td class="ahem">a</td>
+ <td class="ahem">a</td>
+ <td class="arial">a</td>
+ <td class="arial">a</td>
+</tr>
+<tr>
+ <td>5</td>
+ <td>8</td>
+ <td class="arial">a</td>
+ <td class="arial">a</td>
+ <td class="arial">a</td>
+ <td class="arial">a</td>
+</tr>
+</table>
diff --git a/testing/web-platform/tests/css/css-fonts/font-display/font-display.html b/testing/web-platform/tests/css/css-fonts/font-display/font-display.html
new file mode 100644
index 0000000000..a2b62c0676
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-display/font-display.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<title>Test for font-display @font-face descriptor</title>
+<meta name="timeout" content="long">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-display-desc">
+<link rel="match" href="font-display-ref.html">
+<link rel="preload" href="/fonts/Ahem.ttf?pipe=trickle(d0)" as="font" crossorigin>
+<style>
+.hidden { display: none; }
+</style>
+<p>Tests how text with a font that takes <i>delay</i> seconds to load look like after <i>T</i> seconds from load start.</p>
+<table id="container">
+ <tr>
+ <th>T[sec]</th>
+ <th>delay[sec]</th>
+ <th>block</th>
+ <th>swap</th>
+ <th>fallback</th>
+ <th>optional</th>
+ </tr>
+</table>
+<script>
+var fontDisplayValues = ['block', 'swap', 'fallback', 'optional'];
+var configs = [{time: 0, delay: 1000},
+ {time: 1000, delay: 0},
+ {time: 1000, delay: 500},
+ {time: 1000, delay: 3000},
+ {time: 5000, delay: 2000},
+ {time: 5000, delay: 4000},
+ {time: 5000, delay: 8000}];
+
+function makeFontFaceDeclaration(family, config, display) {
+ url = '/fonts/Ahem.ttf?pipe=trickle(d' + config.delay / 1000 + ')';
+ return '@font-face { font-family: ' + family + '; src: url("' + url + '"); font-display: ' + display + '; }';
+}
+
+
+var maxTime = Math.max.apply(null, configs.map((config) => config.time));
+var table = document.getElementById('container');
+
+window.onload = function() {
+ for (var config, i = 0; config = configs[i]; i++) {
+ var tr = document.createElement('tr');
+ tr.classList.add('hidden');
+ var td1 = document.createElement('td');
+ td1.textContent = config.time / 1000;
+ tr.appendChild(td1);
+ var td2 = document.createElement('td');
+ td2.textContent = config.delay / 1000;
+ tr.appendChild(td2);
+
+ for (var display, j = 0; display = fontDisplayValues[j]; j++) {
+ var family = [display, config.time, config.delay].join('-');
+ var rule = makeFontFaceDeclaration(family, config, display);
+ document.styleSheets[0].insertRule(rule, 0);
+ var td = document.createElement('td');
+ td.textContent = 'a';
+ td.style.fontFamily = family + ', Arial';
+ tr.appendChild(td);
+ }
+ table.appendChild(tr);
+ if (config.time == 0) {
+ setTimeout((function(tr){
+ tr.classList.remove('hidden');
+ document.documentElement.classList.remove("reftest-wait");
+ }).bind(null, tr), maxTime);
+ } else {
+ setTimeout((function(tr){tr.classList.remove('hidden')}).bind(null, tr), maxTime - config.time);
+ }
+ }
+}
+
+</script>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-face-local-css-wide-keyword-crash.html b/testing/web-platform/tests/css/css-fonts/font-face-local-css-wide-keyword-crash.html
new file mode 100644
index 0000000000..3ece8c7c48
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-face-local-css-wide-keyword-crash.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<title>Crash test for using unquoted CSS-wide keyword in local() font</title>
+<link rel="help" href="https://crbug.com/1342244">
+<style>
+ @font-face {
+ font-family: 'TestFont';
+ src: local(default);
+ }
+</style>
+<p style="font-family: TestFont">Test passes if it does not crash.</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-face-range-order.html b/testing/web-platform/tests/css/css-fonts/font-face-range-order.html
new file mode 100644
index 0000000000..b198a9fb57
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-face-range-order.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: Order of values in @font-face range descriptors</title>
+<link rel="author" title="Dominik Röttsches" href="mailto:drott@chromium.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-prop-desc">
+<meta name="assert" content="Allow ranges to be specified in reverse order.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<style>
+@font-face {
+font-family: reversed-range-test;
+font-stretch: 200% 50%;
+font-style: oblique 90deg -90deg;
+font-weight: 900 100;
+src: local(Ahem);
+}
+</style>
+<script>
+ promise_test(async (t) => {
+ const fonts = await document.fonts.load("12px reversed-range-test");
+ assert_equals(fonts[0].stretch, "200% 50%", "Stretch value must be returned as specified.");
+ assert_equals(fonts[0].style, "oblique 90deg -90deg", "Style value must be returned as specified.");
+ assert_equals(fonts[0].weight, "900 100", "Weight value must be returned as specified.");
+ });
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-face-stretch-auto-static-ref.html b/testing/web-platform/tests/css/css-fonts/font-face-stretch-auto-static-ref.html
new file mode 100644
index 0000000000..5b3c447733
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-face-stretch-auto-static-ref.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: Support for font-stretch:auto in @font-face</title>
+<style>
+ @font-face {
+ font-family: "Lato";
+ src: url('support/fonts/Lato-Medium.ttf') format('truetype');
+ font-display: swap;
+ font-stretch: normal;
+ }
+ .test {
+ font-family: "Lato";
+ font-size: 3em;
+ font-stretch: 125%;
+ }
+</style>
+
+<p class="test">text</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-face-stretch-auto-static.html b/testing/web-platform/tests/css/css-fonts/font-face-stretch-auto-static.html
new file mode 100644
index 0000000000..ce3c94fa2f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-face-stretch-auto-static.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: Support for font-stretch: auto in @font-face</title>
+<link rel="match" href="font-face-stretch-auto-static-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-prop-desc" />
+<meta name="assert" content="font-stretch: auto applies initial value for non-variable fonts in @font-face descriptor">
+<style>
+ @font-face {
+ font-family: "Lato";
+ src: url('support/fonts/Lato-Medium.ttf') format('truetype');
+ font-display: swap;
+ font-stretch: auto;
+ }
+ .test {
+ font-family: "Lato";
+ font-size: 3em;
+ font-stretch: 125%;
+ }
+</style>
+
+<p class="test">text</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-face-stretch-auto-variable-ref.html b/testing/web-platform/tests/css/css-fonts/font-face-stretch-auto-variable-ref.html
new file mode 100644
index 0000000000..0e56e2d520
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-face-stretch-auto-variable-ref.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: Support for font-stretch: auto in @font-face</title>
+<style>
+ @font-face {
+ font-family: "Roboto";
+ src: url('support/fonts/RobotoExtremo-VF.subset.ttf') format('truetype');
+ font-display: swap;
+ font-style: normal;
+ font-stretch: 75% 125%;
+ }
+ .stretch50 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-variation-settings: 'wdth' 50;
+ }
+ .stretch75 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-variation-settings: 'wdth' 75;
+ }
+ .stretch87 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-variation-settings: 'wdth' 87.5;
+ }
+ .stretch100 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-variation-settings: 'wdth' 100;
+ }
+ .stretch112 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-variation-settings: 'wdth' 112.5;
+ }
+ .stretch125 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-variation-settings: 'wdth' 125;
+ }
+ .stretch200 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-variation-settings: 'wdth' 200;
+ }
+</style>
+
+<p class="stretch50">text</p>
+<p class="stretch75">text</p>
+<p class="stretch87">text</p>
+<p class="stretch100">text</p>
+<p class="stretch112">text</p>
+<p class="stretch125">text</p>
+<p class="stretch200">text</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-face-stretch-auto-variable.html b/testing/web-platform/tests/css/css-fonts/font-face-stretch-auto-variable.html
new file mode 100644
index 0000000000..142f16bb31
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-face-stretch-auto-variable.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: Support for font-stretch: auto in @font-face</title>
+<link rel="match" href="font-face-stretch-auto-variable-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-prop-desc" />
+<meta name="assert" content="font-stretch: auto applies automatic width range for variable fonts in @font-face descriptor">
+<style>
+ @font-face {
+ font-family: "Roboto";
+ src: url('support/fonts/RobotoExtremo-VF.subset.ttf') format('truetype');
+ font-display: swap;
+ font-style: normal;
+ font-stretch: auto;
+ }
+ .stretch50 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-stretch: 50%;
+ }
+ .stretch75 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-stretch: 75%;
+ }
+ .stretch87 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-stretch: 87.5%;
+ }
+ .stretch100 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-stretch: 100%;
+ }
+ .stretch112 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-stretch: 112.5%;
+ }
+ .stretch125 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-stretch: 125%;
+ }
+ .stretch200 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-stretch: 200%;
+ }
+</style>
+
+<p class="stretch50">text</p>
+<p class="stretch75">text</p>
+<p class="stretch87">text</p>
+<p class="stretch100">text</p>
+<p class="stretch112">text</p>
+<p class="stretch125">text</p>
+<p class="stretch200">text</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-face-stretch-default-variable-ref.html b/testing/web-platform/tests/css/css-fonts/font-face-stretch-default-variable-ref.html
new file mode 100644
index 0000000000..ece40e7894
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-face-stretch-default-variable-ref.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: Support for font-stretch: auto in @font-face</title>
+<style>
+ @font-face {
+ font-family: "Roboto";
+ src: url('support/fonts/RobotoExtremo-VF.subset.ttf') format('truetype');
+ font-display: swap;
+ font-style: normal;
+ font-stretch: 75% 125%;
+ }
+ .stretch75 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-variation-settings: 'wdth' 75;
+ }
+ .stretch100 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-variation-settings: 'wdth' 100;
+ }
+ .stretch125 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-variation-settings: 'wdth' 125;
+ }
+</style>
+
+<p class="stretch75">text</p>
+<p class="stretch100">text</p>
+<p class="stretch125">text</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-face-stretch-default-variable.html b/testing/web-platform/tests/css/css-fonts/font-face-stretch-default-variable.html
new file mode 100644
index 0000000000..dfb7f95d12
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-face-stretch-default-variable.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: Support for font-stretch: auto in @font-face</title>
+<link rel="match" href="font-face-stretch-default-variable-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-prop-desc" />
+<meta name="assert" content="auto is default value for font-stretch in @font-face descriptor">
+<style>
+ @font-face {
+ font-family: "Roboto";
+ src: url('support/fonts/RobotoExtremo-VF.subset.ttf') format('truetype');
+ font-display: swap;
+ font-style: normal;
+ }
+ .stretch75 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-stretch: 75%;
+ }
+ .stretch100 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-stretch: 100%;
+ }
+ .stretch125 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-stretch: 125%;
+ }
+</style>
+
+<p class="stretch75">text</p>
+<p class="stretch100">text</p>
+<p class="stretch125">text</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-face-style-auto-static-ref.html b/testing/web-platform/tests/css/css-fonts/font-face-style-auto-static-ref.html
new file mode 100644
index 0000000000..375a6d4e3e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-face-style-auto-static-ref.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: Support for font-style: auto in @font-face</title>
+<style>
+ @font-face {
+ font-family: "Lato";
+ src: url('support/fonts/Lato-Medium.ttf') format('truetype');
+ font-display: swap;
+ font-style: normal;
+ }
+ .test {
+ font-family: "Lato";
+ font-size: 3em;
+ font-style: oblique 10deg;
+ }
+</style>
+
+<p class="test">text</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-face-style-auto-static.html b/testing/web-platform/tests/css/css-fonts/font-face-style-auto-static.html
new file mode 100644
index 0000000000..8c8cae3e91
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-face-style-auto-static.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: Support for font-stretch: auto in @font-face</title>
+<link rel="match" href="font-face-style-auto-static-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-prop-desc" />
+<meta name="assert" content="font-style: auto applies initial value for non-variable fonts in @font-face descriptor">
+<style>
+ @font-face {
+ font-family: "Lato";
+ src: url('support/fonts/Lato-Medium.ttf') format('truetype');
+ font-display: swap;
+ font-style: auto;
+ }
+ .test {
+ font-family: "Lato";
+ font-size: 3em;
+ font-style: oblique 10deg;
+ }
+</style>
+
+<p class="test">text</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-face-style-auto-variable-ref.html b/testing/web-platform/tests/css/css-fonts/font-face-style-auto-variable-ref.html
new file mode 100644
index 0000000000..5b9a5eeb13
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-face-style-auto-variable-ref.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: Support for font-style: auto in @font-face</title>
+<style>
+ @font-face {
+ font-family: "Inter";
+ src: url('support/fonts/Inter-VF.subset.ttf') format('truetype');
+ font-display: swap;
+ font-style: oblique 10deg 0deg;
+ }
+ .style10 {
+ font-family: "Inter";
+ font-size: 3em;
+ font-variation-settings: 'slnt' -10;
+ }
+ .style5 {
+ font-family: "Inter";
+ font-size: 3em;
+ font-variation-settings: 'slnt' -5;
+ }
+ .style0 {
+ font-family: "Inter";
+ font-size: 3em;
+ font-variation-settings: 'slnt' 0;
+ }
+</style>
+
+<p class="style10">text</p>
+<p class="style5">text</p>
+<p class="style0">text</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-face-style-auto-variable.html b/testing/web-platform/tests/css/css-fonts/font-face-style-auto-variable.html
new file mode 100644
index 0000000000..4e503865ce
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-face-style-auto-variable.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: Support for font-style: auto in @font-face</title>
+<link rel="match" href="font-face-style-auto-variable-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-prop-desc" />
+<meta name="assert" content="font-style: auto applies automatic slant range for variable fonts in @font-face descriptor">
+<style>
+ @font-face {
+ font-family: "Inter";
+ src: url('support/fonts/Inter-VF.subset.ttf') format('truetype');
+ font-display: swap;
+ font-style: auto;
+ }
+ .style10 {
+ font-family: "Inter";
+ font-size: 3em;
+ font-style: oblique 10deg;
+ }
+ .style5 {
+ font-family: "Inter";
+ font-size: 3em;
+ font-style: oblique 5deg;
+ }
+ .style0 {
+ font-family: "Inter";
+ font-size: 3em;
+ font-style: oblique 0deg;
+ }
+</style>
+
+<p class="style10">text</p>
+<p class="style5">text</p>
+<p class="style0">text</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-face-style-default-variable-ref.html b/testing/web-platform/tests/css/css-fonts/font-face-style-default-variable-ref.html
new file mode 100644
index 0000000000..ef5513afe8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-face-style-default-variable-ref.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: Support for font-style: auto in @font-face</title>
+<style>
+ @font-face {
+ font-family: "Inter";
+ src: url('support/fonts/Inter-VF.subset.ttf') format('truetype');
+ font-display: swap;
+ font-style: oblique 10deg 0deg;
+ }
+ .style10 {
+ font-family: "Inter";
+ font-size: 3em;
+ font-variation-settings: 'slnt' -10;
+ }
+ .style0 {
+ font-family: "Inter";
+ font-size: 3em;
+ font-variation-settings: 'slnt' 0;
+ }
+</style>
+
+<p class="style10">text</p>
+<p class="style0">text</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-face-style-default-variable.html b/testing/web-platform/tests/css/css-fonts/font-face-style-default-variable.html
new file mode 100644
index 0000000000..55ff17f6bd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-face-style-default-variable.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: Support for font-style: auto in @font-face</title>
+<link rel="match" href="font-face-style-default-variable-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-prop-desc" />
+<meta name="assert" content="auto is default value for font-style in @font-face descriptor">
+<style>
+ @font-face {
+ font-family: "Inter";
+ src: url('support/fonts/Inter-VF.subset.ttf') format('truetype');
+ font-display: swap;
+ }
+ .style10 {
+ font-family: "Inter";
+ font-size: 3em;
+ font-style: oblique 10deg;
+ }
+ .style0 {
+ font-family: "Inter";
+ font-size: 3em;
+ font-style: oblique 0deg;
+ }
+</style>
+
+<p class="style10">text</p>
+<p class="style0">text</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-face-unicode-range-2-ref.html b/testing/web-platform/tests/css/css-fonts/font-face-unicode-range-2-ref.html
new file mode 100644
index 0000000000..a338b8eb0f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-face-unicode-range-2-ref.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Reference: font-face unicode-range</title>
+<style>
+ @font-face {
+ font-family: base;
+ src: url(support/fonts/LigatureSymbolsWithSpaces.woff);
+ }
+ @font-face {
+ font-family: swoosh;
+ src: url(support/fonts/Rochester.otf);
+ }
+ .ref {
+ font-family: base;
+ }
+ .ref .amp {
+ font-family: swoosh, base;
+ }
+ div {
+ font-size: 5em;
+ }
+</style>
+<body>
+ <p>Test passes if the two lines look the same, with just the ampersand in italic</p>
+ <div class="ref">This <span class="amp">&amp;</span> That</div>
+ <div class="ref">This <span class="amp">&amp;</span> That</div>
+</body>
diff --git a/testing/web-platform/tests/css/css-fonts/font-face-unicode-range-2.html b/testing/web-platform/tests/css/css-fonts/font-face-unicode-range-2.html
new file mode 100644
index 0000000000..e94c1b235f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-face-unicode-range-2.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Test: font-face unicode-range</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="http://www.w3.org/TR/css-fonts-3/#unicode-range-desc">
+<link rel="match" href="font-face-unicode-range-2-ref.html">
+<meta name="assert" content="Check that font-face unicode-range restrics use of glyphs outside that range">
+<style>
+ @font-face {
+ font-family: base;
+ src: url(support/fonts/LigatureSymbolsWithSpaces.woff);
+ }
+ @font-face {
+ font-family: swoosh;
+ src: url(support/fonts/Rochester.otf);
+ unicode-range: U+26;
+ }
+ .test {
+ font-family: swoosh, base;
+ }
+ .ref {
+ font-family: base;
+ }
+ .ref .amp {
+ font-family: swoosh, base;
+ }
+ div {
+ font-size: 5em;
+ }
+</style>
+<body>
+ <p>Test passes if the two lines look the same, with just the ampersand in italic</p>
+ <div class="ref">This <span class="amp">&amp;</span> That</div>
+ <div class="test">This &amp; That</div>
+</body>
diff --git a/testing/web-platform/tests/css/css-fonts/font-face-unicode-range-nbsp-ref.html b/testing/web-platform/tests/css/css-fonts/font-face-unicode-range-nbsp-ref.html
new file mode 100644
index 0000000000..d8c3f4b5f6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-face-unicode-range-nbsp-ref.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>CSS Fonts reference</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<style>
+@font-face {
+ font-family: test;
+ src: url(/fonts/Ahem.ttf);
+ ascent-override: 80%;
+ descent-override: 20%;
+}
+@font-face {
+ font-family: fallback;
+ src: url(/fonts/GentiumPlus-R.woff);
+ ascent-override: 80%;
+ descent-override: 20%;
+}
+#test, #ref {
+ font: 24px/2 fallback, serif;
+}
+span {
+ font-family: test;
+}
+</style>
+<p>The first line should have much wider word spacing:</p>
+<div id=test>
+This<span>&nbsp;</span>is<span>&nbsp;</span>a<span>&nbsp;</span>test
+</div>
+<div id=ref>
+This is a test
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/font-face-unicode-range-nbsp.html b/testing/web-platform/tests/css/css-fonts/font-face-unicode-range-nbsp.html
new file mode 100644
index 0000000000..39c8fb8206
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-face-unicode-range-nbsp.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>CSS Fonts testcase: using unicode-range to target non-breaking space</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="match" href="font-face-unicode-range-nbsp-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#unicode-range-desc">
+<meta name="assert" content="Check that using unicode-range for non-breaking space works">
+<style>
+@font-face {
+ font-family: test;
+ src: url(/fonts/Ahem.ttf);
+ unicode-range: U+00A0;
+ /* override metrics to ensure they match across the fonts: */
+ ascent-override: 80%;
+ descent-override: 20%;
+}
+@font-face {
+ font-family: fallback;
+ src: url(/fonts/GentiumPlus-R.woff);
+ ascent-override: 80%;
+ descent-override: 20%;
+}
+#test, #ref {
+ font: 24px/2 test, fallback, serif;
+}
+</style>
+<p>The first line should have much wider word spacing:</p>
+<div id=test>
+This&nbsp;is&nbsp;a&nbsp;test
+</div>
+<div id=ref>
+This is a test
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/font-face-unicode-range.html b/testing/web-platform/tests/css/css-fonts/font-face-unicode-range.html
new file mode 100644
index 0000000000..f3cd9f0af5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-face-unicode-range.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Test: font-face unicode-range</title>
+<link rel="author" title="Intel" href="http://www.intel.com">
+<link rel="help" href="http://www.w3.org/TR/css-fonts-3/#unicode-range-desc">
+<meta name="assert" content="Check if the font-face unicode-range value impacts the content style">
+<style>
+ @font-face {
+ font-family: IMPACT;
+ src: url(support/fonts/LigatureSymbolsWithSpaces.woff);
+ unicode-range: U+0041-0044;
+ }
+ @font-face {
+ font-family: NOIMPACT;
+ src: url(support/fonts/LigatureSymbolsWithSpaces.woff);
+ unicode-range: U+0061-0064;
+ }
+ .impact {
+ font-family: IMPACT;
+ }
+ .noimpact {
+ font-family: NOIMPACT;
+ }
+</style>
+<body>
+ <p>Test passes if the letters size of two lines are different</p>
+ <div class="impact">ABCDEFG</div>
+ <div class="noimpact">ABCDEFG</div>
+</body>
diff --git a/testing/web-platform/tests/css/css-fonts/font-face-weight-auto-static-ref.html b/testing/web-platform/tests/css/css-fonts/font-face-weight-auto-static-ref.html
new file mode 100644
index 0000000000..34772a9418
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-face-weight-auto-static-ref.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: Support for font-weight:auto in @font-face</title>
+<style>
+ @font-face {
+ font-family: "Lato";
+ src: url('support/fonts/Lato-Medium.ttf') format('truetype');
+ font-display: swap;
+ font-weight: normal;
+ }
+ .test {
+ font-family: "Lato";
+ font-size: 3em;
+ font-weight: bold;
+ }
+</style>
+
+<p class="test">text</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-face-weight-auto-static.html b/testing/web-platform/tests/css/css-fonts/font-face-weight-auto-static.html
new file mode 100644
index 0000000000..af84d4b1f1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-face-weight-auto-static.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: Support for font-weight: auto in @font-face</title>
+<link rel="match" href="font-face-weight-auto-static-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-prop-desc" />
+<meta name="assert" content="font-weight: auto applies initial value for non-variable fonts in @font-face descriptor">
+<style>
+ @font-face {
+ font-family: "Lato";
+ src: url('support/fonts/Lato-Medium.ttf') format('truetype');
+ font-display: swap;
+ font-weight: auto;
+ }
+ .test {
+ font-family: "Lato";
+ font-size: 3em;
+ font-weight: bold;
+ }
+</style>
+
+<p class="test">text</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-face-weight-auto-variable-ref.html b/testing/web-platform/tests/css/css-fonts/font-face-weight-auto-variable-ref.html
new file mode 100644
index 0000000000..2f9399b150
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-face-weight-auto-variable-ref.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: Support for font-weight:auto in @font-face</title>
+<style>
+ @font-face {
+ font-family: "Roboto";
+ src: url('support/fonts/RobotoExtremo-VF.subset.ttf') format('truetype');
+ font-display: swap;
+ font-style: normal;
+ font-weight: 100 900;
+ }
+ .weight50 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-variation-settings: 'wght' 50;
+ }
+ .weight100 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-variation-settings: 'wght' 100;
+ }
+ .weight400 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-variation-settings: 'wght' 400;
+ }
+ .weight900 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-variation-settings: 'wght' 900;
+ }
+ .weight990 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-variation-settings: 'wght' 990;
+ }
+</style>
+
+<p class="weight50">text</p>
+<p class="weight100">text</p>
+<p class="weight400">text</p>
+<p class="weight900">text</p>
+<p class="weight990">text</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-face-weight-auto-variable.html b/testing/web-platform/tests/css/css-fonts/font-face-weight-auto-variable.html
new file mode 100644
index 0000000000..7baf646661
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-face-weight-auto-variable.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: Support for font-weight:auto in @font-face</title>
+<link rel="match" href="font-face-weight-auto-variable-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-prop-desc" />
+<meta name="assert" content="font-weight: auto applies automatic weight range for variable fonts in @font-face descriptor">
+<style>
+ @font-face {
+ font-family: "Roboto";
+ src: url('support/fonts/RobotoExtremo-VF.subset.ttf') format('truetype');
+ font-display: swap;
+ font-style: normal;
+ font-weight: auto;
+ }
+ .weight50 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-weight: 50;
+ }
+ .weight100 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-weight: 100;
+ }
+ .weight400 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-weight: 400;
+ }
+ .weight900 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-weight: 900;
+ }
+ .weight990 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-weight: 990;
+ }
+</style>
+
+<p class="weight50">text</p>
+<p class="weight100">text</p>
+<p class="weight400">text</p>
+<p class="weight900">text</p>
+<p class="weight990">text</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-face-weight-default-variable-ref.html b/testing/web-platform/tests/css/css-fonts/font-face-weight-default-variable-ref.html
new file mode 100644
index 0000000000..b3dde9a852
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-face-weight-default-variable-ref.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: Support for font-weight:auto in @font-face</title>
+<style>
+ @font-face {
+ font-family: "Roboto";
+ src: url('support/fonts/RobotoExtremo-VF.subset.ttf') format('truetype');
+ font-display: swap;
+ font-style: normal;
+ font-weight: 100 900;
+ }
+ .weight100 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-variation-settings: 'wght' 100;
+ }
+ .weight400 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-variation-settings: 'wght' 400;
+ }
+ .weight900 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-variation-settings: 'wght' 900;
+ }
+</style>
+
+<p class="weight100">text</p>
+<p class="weight400">text</p>
+<p class="weight900">text</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-face-weight-default-variable.html b/testing/web-platform/tests/css/css-fonts/font-face-weight-default-variable.html
new file mode 100644
index 0000000000..1d1c1d091f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-face-weight-default-variable.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: Support for font-weight:auto in @font-face</title>
+<link rel="match" href="font-face-weight-default-variable-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-prop-desc" />
+<meta name="assert" content="auto is default value for font-weight in @font-face descriptor">
+<style>
+ @font-face {
+ font-family: "Roboto";
+ src: url('support/fonts/RobotoExtremo-VF.subset.ttf') format('truetype');
+ font-display: swap;
+ font-style: normal;
+ }
+ .weight100 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-weight: 100;
+ }
+ .weight400 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-weight: 400;
+ }
+ .weight900 {
+ font-family: "Roboto";
+ font-size: 3em;
+ font-weight: 900;
+ }
+</style>
+
+<p class="weight100">text</p>
+<p class="weight400">text</p>
+<p class="weight900">text</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-000.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-000.xht
new file mode 100644
index 0000000000..2afa0bafc0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-000.xht
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: Test for prescense of test fonts</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+ <meta name="assert" content="Test will fail if CSSTest fonts are not installed" />
+ <style type="text/css">
+ div#test1 {
+ font-family: CSSTest Verify;
+ }
+ div#test2 {
+ font-family: CSSTest Unknown, CSSTest Fallback; /* should be no 'CSSTest Unknown' font installed */
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>Test passes if FAIL does not appear below.</p>
+ <p>Prerequisites: these tests require that CSSTest fonts be installed.</p>
+ <div id="test1">FAIL</div>
+ <div id="test2">FAIL</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-001.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-001.xht
new file mode 100644
index 0000000000..5bb7a66ebd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-001.xht
@@ -0,0 +1,24 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: font family name with no quotes</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+ <link rel="match" href="font-family-name-ref.xht"/>
+ <link rel="reviewer" href="mailto:chris@w3.org" title="Chris Lilley"/>
+ <meta name="assert" content="The 'font-family' property set to and installed font renders the appropriate font. Family name with no quotes." />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ p {
+ font-family: CSSTest FamilyName, CSSTest Fallback;
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>5678</p>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-002.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-002.xht
new file mode 100644
index 0000000000..3be21fa8df
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-002.xht
@@ -0,0 +1,24 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: font family name with no quotes, lowercase</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+ <link rel="reviewer" href="mailto:chris@w3.org" title="Chris Lilley"/>
+ <link rel="match" href="font-family-name-ref.xht"/>
+ <meta name="assert" content="The 'font-family' property set to and installed font renders the appropriate font. Family name with no quotes, lowercase." />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ p {
+ font-family: csstest familyname, CSSTest Fallback;
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>5678</p>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-003.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-003.xht
new file mode 100644
index 0000000000..7b9245b20d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-003.xht
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: font family name with no quotes, mixed case</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+ <link rel="match" href="font-family-name-ref.xht"/>
+ <meta name="assert" content="The 'font-family' property set to and installed font renders the appropriate font. Family name with no quotes, mixed case." />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ p {
+ font-family: cssTest familyName, CSSTest Fallback;
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>5678</p>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-004.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-004.xht
new file mode 100644
index 0000000000..5c27586fc9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-004.xht
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: quoted font family name with double quotes</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+ <link rel="match" href="font-family-name-ref.xht"/>
+ <meta name="assert" content="The 'font-family' property set to and installed font renders the appropriate font. Family name with double quotes." />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ p {
+ font-family: "CSSTest FamilyName", CSSTest Fallback;
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>5678</p>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-005.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-005.xht
new file mode 100644
index 0000000000..10e5a3186e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-005.xht
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: quoted font family name with single quotes</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+ <link rel="match" href="font-family-name-ref.xht"/>
+ <meta name="assert" content="The 'font-family' property set to and installed font renders the appropriate font. Family name with single quotes." />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ p {
+ font-family: 'CSSTest FamilyName', CSSTest Fallback;
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>5678</p>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-006.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-006.xht
new file mode 100644
index 0000000000..0d5790b9c4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-006.xht
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: unquoted font family name with extra whitespace</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+ <link rel="match" href="font-family-name-ref.xht"/>
+ <meta name="assert" content="The 'font-family' property set to and installed font renders the appropriate font. Family name with extra whitespace should be condensed to a single space." />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ p {
+ font-family: CSSTest FamilyName, CSSTest Fallback;
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>5678</p>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-007.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-007.xht
new file mode 100644
index 0000000000..b5b4e2bf3e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-007.xht
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: double quoted font family name with extra spaces should not match</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+ <link rel="match" href="font-family-name-ref.xht"/>
+ <meta name="assert" content="The 'font-family' property set to and installed font renders the appropriate font. Family name with spaces in double quotes should not match, spaces are not reduced." />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ p {
+ font-family: "CSSTest FamilyName", CSSTest Fallback;
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>1234</p>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-008.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-008.xht
new file mode 100644
index 0000000000..8d2b7d49b4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-008.xht
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: single quoted font family name with extra spaces should not match</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+ <link rel="match" href="font-family-name-ref.xht"/>
+ <meta name="assert" content="The 'font-family' property set to and installed font renders the appropriate font. Family name with spaces in single quotes should not match, spaces are not reduced." />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ p {
+ font-family: 'CSSTest FamilyName', CSSTest Fallback;
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>1234</p>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-009.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-009.xht
new file mode 100644
index 0000000000..b985b53e5c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-009.xht
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: font family name with escaped hexcode characters</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+ <link rel="match" href="font-family-name-ref.xht"/>
+ <meta name="assert" content="The 'font-family' property set to and installed font renders the appropriate font. Family name with escaped character." />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ p {
+ font-family: CSSTest \000046amilyName, CSSTest Fallback;
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>5678</p>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-010.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-010.xht
new file mode 100644
index 0000000000..63833e8cfb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-010.xht
@@ -0,0 +1,24 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: localized font family name</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+ <link rel="match" href="font-family-name-ref.xht"/>
+ <meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8" />
+ <meta name="assert" content="The 'font-family' property set to and installed font renders the appropriate font. Localized family names should match." />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ p {
+ font-family: CSSテスト フォント名, CSSTest Fallback;
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>5678</p>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-011.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-011.xht
new file mode 100644
index 0000000000..d506c149dc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-011.xht
@@ -0,0 +1,24 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: quoted localized font family name</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+ <link rel="match" href="font-family-name-ref.xht"/>
+ <meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8" />
+ <meta name="assert" content="The 'font-family' property set to and installed font renders the appropriate font. Quoted localized family names should match." />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ p {
+ font-family: "CSSテスト フォント名", CSSTest Fallback;
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>5678</p>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-012.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-012.xht
new file mode 100644
index 0000000000..dad90c4e9e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-012.xht
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: font family name with escaped characters</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+ <link rel="match" href="font-family-name-ref.xht"/>
+ <meta name="assert" content="The 'font-family' property set to and installed font renders the appropriate font. Family name with escaped characters." />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ p {
+ font-family: "CSSTest Family\Name", CSSTest Fallback;
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>5678</p>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-013.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-013.xht
new file mode 100644
index 0000000000..afc4161806
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-013.xht
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: font family name should not match font fullnames</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+ <link rel="match" href="font-family-name-ref.xht"/>
+ <meta name="assert" content="The 'font-family' property set to and installed font renders the appropriate font. Fullname name should not match, only family names." />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ p {
+ font-family: CSSTest FamilyName Bold, CSSTest Fallback;
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>1234</p>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-014.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-014.xht
new file mode 100644
index 0000000000..bc87ff5105
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-014.xht
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: font family name should not match Postscript name</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+ <link rel="match" href="font-family-name-ref.xht"/>
+ <meta name="assert" content="The 'font-family' property set to and installed font renders the appropriate font. Postscript name should not match, only family names." />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ p {
+ font-family: CSSTestFamilyNameBold, CSSTest Fallback;
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>1234</p>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-015.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-015.xht
new file mode 100644
index 0000000000..1c97fae52b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-015.xht
@@ -0,0 +1,24 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: font family name should not match localized font fullnames</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+ <link rel="match" href="font-family-name-ref.xht"/>
+ <meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8" />
+ <meta name="assert" content="The 'font-family' property set to and installed font renders the appropriate font. Localized fullname should not match." />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ p {
+ font-family: "CSSテスト フォント名 Bold", CSSTest Fallback;
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>1234</p>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-016-ref.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-016-ref.xht
new file mode 100644
index 0000000000..b9ca132ed9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-016-ref.xht
@@ -0,0 +1,20 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: font family name that includes numbers should match (ref)</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <meta name="assert" content="Unquoted font family names with numbers should not be matched (reference)" />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ p {
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>PASS</p>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-016.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-016.xht
new file mode 100644
index 0000000000..52a74e31bb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-016.xht
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: font family name that includes numbers should match</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+ <link rel="match" href="font-family-name-016-ref.xht"/>
+ <meta name="assert" content="Unquoted font family names with numbers should not be matched" />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ p {
+ font-family: CSSTest Weights 400;
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>PASS</p>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-017.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-017.xht
new file mode 100644
index 0000000000..031612f611
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-017.xht
@@ -0,0 +1,24 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: when unquoted font family not found, should not use font family list of body element</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+ <link rel="match" href="font-family-name-mixcase-ref.xht"/>
+ <meta name="assert" content="When an unquoted font family name is not found font fallback occurs, the rule is not treated as invalid, the font-family setting of the enclosed body should not be used." />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ body { font-family: CSSTest Fallback; }
+ p, div {
+ font-family: CSSTest Unknown;
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>PaSs</p>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-018.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-018.xht
new file mode 100644
index 0000000000..ef1f591d54
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-018.xht
@@ -0,0 +1,24 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: when quoted font family not found, should not use font family list of body element</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+ <link rel="match" href="font-family-name-mixcase-ref.xht"/>
+ <meta name="assert" content="When a quoted font family name is not found font fallback occurs, the rule is not treated as invalid, the font-family setting of the enclosed body should not be used." />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ body { font-family: CSSTest Fallback; }
+ p, div {
+ font-family: "CSSTest Unknown";
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>PaSs</p>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-019.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-019.xht
new file mode 100644
index 0000000000..de25caeabe
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-019.xht
@@ -0,0 +1,24 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: when unquoted font family not found, should not use font family list of parent element</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+ <link rel="match" href="font-family-name-mixcase-ref.xht"/>
+ <meta name="assert" content="When an unquoted font family name is not found font fallback occurs, the rule is not treated as invalid, the font-family setting of the enclosed div should not be used." />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ div#test { font-family: CSSTest Fallback; }
+ p {
+ font-family: CSSTest Unknown;
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <div id="test"><p>PaSs</p></div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-020.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-020.xht
new file mode 100644
index 0000000000..6241f7f1cb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-020.xht
@@ -0,0 +1,24 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: when quoted font family not found, should not use font family list of parent element</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+ <link rel="match" href="font-family-name-mixcase-ref.xht"/>
+ <meta name="assert" content="When a quoted font family name is not found font fallback occurs, the rule is not treated as invalid, the font-family setting of the enclosed div should not be used." />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ div#test { font-family: CSSTest Fallback; }
+ p {
+ font-family: "CSSTest Unknown";
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <div id="test"><p>PaSs</p></div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-021.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-021.xht
new file mode 100644
index 0000000000..7382167507
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-021.xht
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: mixed use of quotes in font family names is invalid syntax</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+ <link rel="match" href="font-family-name-ref.xht"/>
+ <meta name="flags" content="invalid" />
+ <meta name="assert" content="Mixing quoted name with unquoted portion is invalid syntax, rule is dropped." />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ body { font-family: "CSSTest FamilyName"; }
+ div { font-family: "CSSTest Unknown"; }
+ p {
+ font-family: "CSSTest" Fallback;
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>5678</p>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-022-ref.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-022-ref.xht
new file mode 100644
index 0000000000..acde1ea6f4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-022-ref.xht
@@ -0,0 +1,21 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: font shorthand parsing does not apply to font-family names (ref)</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <meta name="assert" content="Font shorthand parsing should not cause incorrect matching of font-family values (ref)" />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ p {
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <div><p>PaSs</p></div>
+ <div><p>PaSs</p></div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-022.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-022.xht
new file mode 100644
index 0000000000..6b9ee378af
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-022.xht
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: font shorthand parsing should not cause incorrect matching</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+ <link rel="match" href="font-family-name-022-ref.xht"/>
+ <meta name="assert" content="Font shorthand parsing should not cause incorrect matching of font-family values" />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ div { font-family: "CSSTest Unknown"; }
+ p {
+ }
+ p#test1 {
+ font-family: x-large CSSTest Fallback;
+ }
+ p#test4 {
+ font-family: caption CSSTest Fallback;
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <div><p id="test1">PaSs</p></div>
+ <div><p id="test4">PaSs</p></div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-023-ref.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-023-ref.xht
new file mode 100644
index 0000000000..78e1512de8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-023-ref.xht
@@ -0,0 +1,24 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: font family names that look like font shorthand (ref)</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <meta name="assert" content="The 'font-family' property set to and installed font renders the appropriate font. Family name with escaped characters." />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ p {
+ font-family: "CSSTest FamilyName";
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <div><p>PaSs</p></div>
+ <div><p>PaSs</p></div>
+ <div><p>PaSs</p></div>
+ <div><p>PaSs</p></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-023.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-023.xht
new file mode 100644
index 0000000000..9e82760bc1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-023.xht
@@ -0,0 +1,38 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: font family names that look like font shorthand</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+ <link rel="match" href="font-family-name-023-ref.xht"/>
+ <meta name="assert" content="Font family names that appear similar to font shorthand should match to fonts with those names" />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ div.test { font-family: CSSTest Fallback; }
+ p {
+ }
+ p#test1a {
+ font-family: "small-caps 1in CSSTest FamilyName Funky", CSSTest Fallback;
+ }
+ p#test2 {
+ font-family: x-large CSSTest FamilyName Funky, CSSTest Fallback;
+ }
+ p#test2a {
+ font-family: "x-large CSSTest FamilyName Funky", CSSTest Fallback;
+ }
+ p#test3a {
+ font-family: "12px CSSTest FamilyName Funky", CSSTest Fallback;
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <div class="test"><p id="test1a">PaSs</p></div>
+ <div class="test"><p id="test2">PaSs</p></div>
+ <div class="test"><p id="test2a">PaSs</p></div>
+ <div class="test"><p id="test3a">PaSs</p></div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-024-ref.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-024-ref.xht
new file mode 100644
index 0000000000..0f4fa3f787
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-024-ref.xht
@@ -0,0 +1,20 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: system font names in font-family lists (ref)</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <meta name="assert" content="The 'font-family' property set to and installed font renders the appropriate font. Family name with escaped characters." />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ p {
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>PASS</p>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-024.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-024.xht
new file mode 100644
index 0000000000..20aec304fa
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-024.xht
@@ -0,0 +1,47 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: system font names in font-family lists</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+ <link rel="match" href="font-family-name-024-ref.xht"/>
+ <meta name="assert" content="System font names are only allowed with the font shorthand, not in font-family rules" />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ div.test { font-family: CSSTest Fallback; }
+ p {
+ }
+ p#test1 {
+ font-family: caption, CSSTest Fallback;
+ }
+ p#test2 {
+ font-family: icon, CSSTest Fallback;
+ }
+ p#test3 {
+ font-family: menu, CSSTest Fallback;
+ }
+ p#test4 {
+ font-family: message-box, CSSTest Fallback;
+ }
+ p#test5 {
+ font-family: small-caption, CSSTest Fallback;
+ }
+ p#test6 {
+ font-family: status-bar, CSSTest Fallback;
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>PASS</p>
+ <div class="test"><p id="test1">FAIL</p></div>
+ <div class="test"><p id="test2">FAIL</p></div>
+ <div class="test"><p id="test3">FAIL</p></div>
+ <div class="test"><p id="test4">FAIL</p></div>
+ <div class="test"><p id="test5">FAIL</p></div>
+ <div class="test"><p id="test6">FAIL</p></div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-025-ref.html b/testing/web-platform/tests/css/css-fonts/font-family-name-025-ref.html
new file mode 100644
index 0000000000..5ed4361b7a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-025-ref.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<title>CSS Test: PASS rendering</title>
+<link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+<link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+<meta name="assert" content="The 'font-family' property set to and installed font renders the appropriate font." />
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style type="text/css">
+body { font-size: 36px; }
+span#verify { font-family: CSSTest Verify; }
+p {
+ font-family: ahem, monospace;
+}
+</style>
+<div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+<p>These two lines should use the same font.</p>
+<p>These two lines should use the same font.</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-025.html b/testing/web-platform/tests/css/css-fonts/font-family-name-025.html
new file mode 100644
index 0000000000..a4d5359fbf
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-025.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<title>CSS Test: font family name should not match postscript font name</title>
+<link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+<link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+<link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop" />
+<link rel="match" href="font-family-name-025-ref.html" />
+<meta name="assert" content="The 'font-family' property set to and installed font renders the appropriate font. Postscript name should not match." />
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+body { font-size: 36px; }
+span#verify { font-family: CSSTest Verify; }
+p.test {
+ /* Verdana-Bold is a standard supplied font on Windows, Mac, and Linux
+ allowing this test to actually work on most systems without the CSS
+ test fonts. */
+ font-family: CSSTestBasic-Bold, Verdana-Bold, ahem, monospace;
+}
+p {
+ font-family: ahem, monospace;
+}
+</style>
+<div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+<p class="test">These two lines should use the same font.</p>
+<p>These two lines should use the same font.</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-mixcase-ref.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-mixcase-ref.xht
new file mode 100644
index 0000000000..6d722390ab
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-mixcase-ref.xht
@@ -0,0 +1,20 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: PaSs rendered with default font</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <meta name="assert" content="The 'font-family' property set to and installed font renders the appropriate font." />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest Verify; }
+ p {
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>PaSs</p>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-name-ref.xht b/testing/web-platform/tests/css/css-fonts/font-family-name-ref.xht
new file mode 100644
index 0000000000..fe1b07d111
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-name-ref.xht
@@ -0,0 +1,21 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: PASS rendering</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" />
+ <meta name="assert" content="The 'font-family' property set to and installed font renders the appropriate font." />
+ <style type="text/css">
+ body { font-size: 36px; }
+ span#verify { font-family: CSSTest ASCII; }
+ p {
+ font-family: CSSTest Verify;
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">PASS</span></div>
+ <p>PASS</p>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-family-src-quoted.html b/testing/web-platform/tests/css/css-fonts/font-family-src-quoted.html
new file mode 100644
index 0000000000..a279e99153
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-family-src-quoted.html
@@ -0,0 +1,74 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<meta charset=utf-8>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-face-src-formats" />
+<meta name="assert" content="Tests that local() and url() in serialization of @font-face blocks are quoted"/>
+<script type="text/javascript" src="/resources/testharness.js"></script>
+<script type="text/javascript" src="/resources/testharnessreport.js"></script>
+<style id="style">
+/* 0 */
+@font-face {
+ font-family: "A";
+ src: local("B");
+}
+/* 1 */
+@font-face {
+ font-family: "C";
+ src: url("D") format("opentype");
+}
+/* 2 */
+@font-face {
+ font-family: "E";
+ src: url("F") format("opentype");
+}
+/* 3 */
+@font-face {
+ font-family: "M";
+ src: url("N\"O") format("opentype");
+}
+/* 4 */
+@font-face {
+ font-family: "P";
+ src: url("Q\A R") format("opentype");
+}
+/* 5 */
+@font-face {
+ font-family: "S";
+ src: url("T\\U") format("opentype");
+}
+/* 6 */
+@font-face {
+ font-family: "V";
+ src: local("W\"X");
+}
+/* 7 */
+@font-face {
+ font-family: "Y";
+ src: local("Z\A A");
+}
+/* 8 */
+@font-face {
+ font-family: "B";
+ src: local("C\\D");
+}
+</style>
+</head>
+<body>
+<script>
+test(function(t) {
+ let rules = document.getElementById("style").sheet.cssRules;
+ assert_not_equals(rules[0].cssText.indexOf('local("B")'), -1);
+ assert_not_equals(rules[1].cssText.indexOf('opentype'), -1);
+ assert_not_equals(rules[2].cssText.indexOf('F")'), -1);
+ assert_not_equals(rules[3].cssText.indexOf('url(\"N\\\"O\")'), -1);
+ assert_not_equals(rules[4].cssText.indexOf('url(\"Q\\a R\")'), -1);
+ assert_not_equals(rules[5].cssText.indexOf('url(\"T\\\\U\")'), -1);
+ assert_not_equals(rules[6].cssText.indexOf('local(\"W\\\"X\")'), -1);
+ assert_not_equals(rules[7].cssText.indexOf('local(\"Z\\a A\")'), -1);
+ assert_not_equals(rules[8].cssText.indexOf('local(\"C\\\\D\")'), -1);
+});
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-feature-resolution-001-ref.html b/testing/web-platform/tests/css/css-fonts/font-feature-resolution-001-ref.html
new file mode 100644
index 0000000000..261b93f5db
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-feature-resolution-001-ref.html
@@ -0,0 +1,356 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>CSS Test: feature property settings are resolved in the correct order for 'liga'.</title>
+<link rel="author" title="Ben Wagner" href="bungeman@chromium.org" />
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#feature-precedence" />
+<style>
+ @font-face {
+ font-family: lato-ffs-;
+ src: url(support/fonts/Lato-Medium-Liga.ttf);
+ }
+ .test, .ref {
+ font-family: lato-ffs-;
+ font-size: 2em;
+ position: absolute;
+ }
+ .test { color: green; }
+ .ref { color: red; }
+
+ .align { width: 1em; }
+
+ .ls-0 { letter-spacing: 0em; }
+ .ls-1 { letter-spacing: 0.1em; }
+</style>
+</head>
+<body>
+<p>Test passes if there is no red visible.</p>
+<table class="ref"><tr>
+
+ <td class="align ff- fvl- ls- ffs- ">&#xfb01;</td>
+ <td class="align ff- fvl- ls- ffs-n">&#xfb01;</td>
+ <td class="align ff- fvl- ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl- ls- ffs-1">&#xfb01;</td>
+ <td class="align ff- fvl- ls-0 ffs- ">&#xfb01;</td>
+ <td class="align ff- fvl- ls-0 ffs-n">&#xfb01;</td>
+ <td class="align ff- fvl- ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl- ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff- fvl- ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff- fvl- ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff- fvl- ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl- ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff- fvl-n ls- ffs- ">&#xfb01;</td>
+ <td class="align ff- fvl-n ls- ffs-n">&#xfb01;</td>
+ <td class="align ff- fvl-n ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-n ls- ffs-1">&#xfb01;</td>
+ <td class="align ff- fvl-n ls-0 ffs- ">&#xfb01;</td>
+ <td class="align ff- fvl-n ls-0 ffs-n">&#xfb01;</td>
+ <td class="align ff- fvl-n ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-n ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff- fvl-n ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff- fvl-n ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff- fvl-n ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-n ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff- fvl-0 ls- ffs- ">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls- ffs-n">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls- ffs-1">&#xfb01;</td>
+ <td class="align ff- fvl-0 ls-0 ffs- ">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls-0 ffs-n">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff- fvl-0 ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff- fvl-1 ls- ffs- ">&#xfb01;</td>
+ <td class="align ff- fvl-1 ls- ffs-n">&#xfb01;</td>
+ <td class="align ff- fvl-1 ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-1 ls- ffs-1">&#xfb01;</td>
+ <td class="align ff- fvl-1 ls-0 ffs- ">&#xfb01;</td>
+ <td class="align ff- fvl-1 ls-0 ffs-n">&#xfb01;</td>
+ <td class="align ff- fvl-1 ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-1 ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff- fvl-1 ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff- fvl-1 ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff- fvl-1 ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-1 ls-1 ffs-1">&#xfb01;</td>
+
+</tr><tr>
+
+ <td class="align ff-0 fvl- ls- ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls- ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls- ffs-1">&#xfb01;</td>
+ <td class="align ff-0 fvl- ls-0 ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls-0 ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff-0 fvl- ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff-0 fvl-n ls- ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls- ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls- ffs-1">&#xfb01;</td>
+ <td class="align ff-0 fvl-n ls-0 ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls-0 ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff-0 fvl-n ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff-0 fvl-0 ls- ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls- ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls- ffs-1">&#xfb01;</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff-0 fvl-1 ls- ffs- ">&#xfb01;</td>
+ <td class="align ff-0 fvl-1 ls- ffs-n">&#xfb01;</td>
+ <td class="align ff-0 fvl-1 ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-1 ls- ffs-1">&#xfb01;</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs- ">&#xfb01;</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs-n">&#xfb01;</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs-1">&#xfb01;</td>
+
+</tr><tr>
+
+ <td class="align ff-1 fvl- ls- ffs- ">&#xfb01;</td>
+ <td class="align ff-1 fvl- ls- ffs-n">&#xfb01;</td>
+ <td class="align ff-1 fvl- ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl- ls- ffs-1">&#xfb01;</td>
+ <td class="align ff-1 fvl- ls-0 ffs- ">&#xfb01;</td>
+ <td class="align ff-1 fvl- ls-0 ffs-n">&#xfb01;</td>
+ <td class="align ff-1 fvl- ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl- ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff-1 fvl- ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff-1 fvl- ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff-1 fvl- ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl- ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff-1 fvl-n ls- ffs- ">&#xfb01;</td>
+ <td class="align ff-1 fvl-n ls- ffs-n">&#xfb01;</td>
+ <td class="align ff-1 fvl-n ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-n ls- ffs-1">&#xfb01;</td>
+ <td class="align ff-1 fvl-n ls-0 ffs- ">&#xfb01;</td>
+ <td class="align ff-1 fvl-n ls-0 ffs-n">&#xfb01;</td>
+ <td class="align ff-1 fvl-n ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-n ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff-1 fvl-n ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff-1 fvl-n ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff-1 fvl-n ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-n ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff-1 fvl-0 ls- ffs- ">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls- ffs-n">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls- ffs-1">&#xfb01;</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs- ">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs-n">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff-1 fvl-1 ls- ffs- ">&#xfb01;</td>
+ <td class="align ff-1 fvl-1 ls- ffs-n">&#xfb01;</td>
+ <td class="align ff-1 fvl-1 ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-1 ls- ffs-1">&#xfb01;</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs- ">&#xfb01;</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs-n">&#xfb01;</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs-1">&#xfb01;</td>
+
+</tr></table>
+<table class="test"><tr>
+
+ <td class="align ff- fvl- ls- ffs- ">&#xfb01;</td>
+ <td class="align ff- fvl- ls- ffs-n">&#xfb01;</td>
+ <td class="align ff- fvl- ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl- ls- ffs-1">&#xfb01;</td>
+ <td class="align ff- fvl- ls-0 ffs- ">&#xfb01;</td>
+ <td class="align ff- fvl- ls-0 ffs-n">&#xfb01;</td>
+ <td class="align ff- fvl- ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl- ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff- fvl- ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff- fvl- ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff- fvl- ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl- ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff- fvl-n ls- ffs- ">&#xfb01;</td>
+ <td class="align ff- fvl-n ls- ffs-n">&#xfb01;</td>
+ <td class="align ff- fvl-n ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-n ls- ffs-1">&#xfb01;</td>
+ <td class="align ff- fvl-n ls-0 ffs- ">&#xfb01;</td>
+ <td class="align ff- fvl-n ls-0 ffs-n">&#xfb01;</td>
+ <td class="align ff- fvl-n ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-n ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff- fvl-n ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff- fvl-n ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff- fvl-n ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-n ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff- fvl-0 ls- ffs- ">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls- ffs-n">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls- ffs-1">&#xfb01;</td>
+ <td class="align ff- fvl-0 ls-0 ffs- ">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls-0 ffs-n">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff- fvl-0 ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff- fvl-1 ls- ffs- ">&#xfb01;</td>
+ <td class="align ff- fvl-1 ls- ffs-n">&#xfb01;</td>
+ <td class="align ff- fvl-1 ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-1 ls- ffs-1">&#xfb01;</td>
+ <td class="align ff- fvl-1 ls-0 ffs- ">&#xfb01;</td>
+ <td class="align ff- fvl-1 ls-0 ffs-n">&#xfb01;</td>
+ <td class="align ff- fvl-1 ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-1 ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff- fvl-1 ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff- fvl-1 ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff- fvl-1 ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-1 ls-1 ffs-1">&#xfb01;</td>
+
+</tr><tr>
+
+ <td class="align ff-0 fvl- ls- ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls- ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls- ffs-1">&#xfb01;</td>
+ <td class="align ff-0 fvl- ls-0 ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls-0 ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff-0 fvl- ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff-0 fvl-n ls- ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls- ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls- ffs-1">&#xfb01;</td>
+ <td class="align ff-0 fvl-n ls-0 ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls-0 ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff-0 fvl-n ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff-0 fvl-0 ls- ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls- ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls- ffs-1">&#xfb01;</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff-0 fvl-1 ls- ffs- ">&#xfb01;</td>
+ <td class="align ff-0 fvl-1 ls- ffs-n">&#xfb01;</td>
+ <td class="align ff-0 fvl-1 ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-1 ls- ffs-1">&#xfb01;</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs- ">&#xfb01;</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs-n">&#xfb01;</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs-1">&#xfb01;</td>
+
+</tr><tr>
+
+ <td class="align ff-1 fvl- ls- ffs- ">&#xfb01;</td>
+ <td class="align ff-1 fvl- ls- ffs-n">&#xfb01;</td>
+ <td class="align ff-1 fvl- ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl- ls- ffs-1">&#xfb01;</td>
+ <td class="align ff-1 fvl- ls-0 ffs- ">&#xfb01;</td>
+ <td class="align ff-1 fvl- ls-0 ffs-n">&#xfb01;</td>
+ <td class="align ff-1 fvl- ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl- ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff-1 fvl- ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff-1 fvl- ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff-1 fvl- ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl- ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff-1 fvl-n ls- ffs- ">&#xfb01;</td>
+ <td class="align ff-1 fvl-n ls- ffs-n">&#xfb01;</td>
+ <td class="align ff-1 fvl-n ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-n ls- ffs-1">&#xfb01;</td>
+ <td class="align ff-1 fvl-n ls-0 ffs- ">&#xfb01;</td>
+ <td class="align ff-1 fvl-n ls-0 ffs-n">&#xfb01;</td>
+ <td class="align ff-1 fvl-n ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-n ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff-1 fvl-n ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff-1 fvl-n ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff-1 fvl-n ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-n ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff-1 fvl-0 ls- ffs- ">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls- ffs-n">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls- ffs-1">&#xfb01;</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs- ">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs-n">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff-1 fvl-1 ls- ffs- ">&#xfb01;</td>
+ <td class="align ff-1 fvl-1 ls- ffs-n">&#xfb01;</td>
+ <td class="align ff-1 fvl-1 ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-1 ls- ffs-1">&#xfb01;</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs- ">&#xfb01;</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs-n">&#xfb01;</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs-1">&#xfb01;</td>
+
+</tr></table>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-feature-resolution-001.html b/testing/web-platform/tests/css/css-fonts/font-feature-resolution-001.html
new file mode 100644
index 0000000000..45f316af5c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-feature-resolution-001.html
@@ -0,0 +1,383 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>CSS Test: feature property settings are resolved in the correct order for 'liga'.</title>
+<link rel="author" title="Ben Wagner" href="bungeman@chromium.org" />
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#feature-precedence" />
+<link rel="match" href="font-feature-resolution-001-ref.html" />
+<meta name="assert" content="default < @font-face < font-variant < letter-spacing < font-feature-settings" />
+<style>
+ @font-face {
+ font-family: lato-ffs-;
+ src: url(support/fonts/Lato-Medium-Liga.ttf);
+ }
+ @font-face {
+ font-family: lato-ffs-0;
+ src: url(support/fonts/Lato-Medium-Liga.ttf);
+ font-feature-settings: 'liga' off;
+ }
+ @font-face {
+ font-family: lato-ffs-1;
+ src: url(support/fonts/Lato-Medium-Liga.ttf);
+ font-feature-settings: 'liga' on;
+ }
+ .test, .ref {
+ font-family: lato-ffs-;
+ font-size: 2em;
+ position: absolute;
+ }
+ .test { color: green; }
+ .ref { color: red; }
+
+ .align { width: 1em; }
+
+ .ff- { font-family: lato-ffs- ; }
+ .ff-0 { font-family: lato-ffs-0; }
+ .ff-1 { font-family: lato-ffs-1; }
+
+ .fvl- { }
+ .fvl-n { font-variant-ligatures: normal; }
+ .fvl-0 { font-variant-ligatures: no-common-ligatures; }
+ .fvl-1 { font-variant-ligatures: common-ligatures; }
+
+ .ls- { }
+ .ls-0 { letter-spacing: 0em; }
+ .ls-1 { letter-spacing: 0.1em; }
+
+ .ffs- { }
+ .ffs-n { font-feature-settings: normal; }
+ .ffs-0 { font-feature-settings: 'liga' off; }
+ .ffs-1 { font-feature-settings: 'liga' on; }
+</style>
+</head>
+<body>
+<p>Test passes if there is no red visible.</p>
+<table class="ref"><tr>
+
+ <td class="align ff- fvl- ls- ffs- ">&#xfb01;</td>
+ <td class="align ff- fvl- ls- ffs-n">&#xfb01;</td>
+ <td class="align ff- fvl- ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl- ls- ffs-1">&#xfb01;</td>
+ <td class="align ff- fvl- ls-0 ffs- ">&#xfb01;</td>
+ <td class="align ff- fvl- ls-0 ffs-n">&#xfb01;</td>
+ <td class="align ff- fvl- ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl- ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff- fvl- ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff- fvl- ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff- fvl- ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl- ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff- fvl-n ls- ffs- ">&#xfb01;</td>
+ <td class="align ff- fvl-n ls- ffs-n">&#xfb01;</td>
+ <td class="align ff- fvl-n ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-n ls- ffs-1">&#xfb01;</td>
+ <td class="align ff- fvl-n ls-0 ffs- ">&#xfb01;</td>
+ <td class="align ff- fvl-n ls-0 ffs-n">&#xfb01;</td>
+ <td class="align ff- fvl-n ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-n ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff- fvl-n ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff- fvl-n ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff- fvl-n ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-n ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff- fvl-0 ls- ffs- ">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls- ffs-n">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls- ffs-1">&#xfb01;</td>
+ <td class="align ff- fvl-0 ls-0 ffs- ">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls-0 ffs-n">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff- fvl-0 ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-0 ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff- fvl-1 ls- ffs- ">&#xfb01;</td>
+ <td class="align ff- fvl-1 ls- ffs-n">&#xfb01;</td>
+ <td class="align ff- fvl-1 ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-1 ls- ffs-1">&#xfb01;</td>
+ <td class="align ff- fvl-1 ls-0 ffs- ">&#xfb01;</td>
+ <td class="align ff- fvl-1 ls-0 ffs-n">&#xfb01;</td>
+ <td class="align ff- fvl-1 ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-1 ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff- fvl-1 ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff- fvl-1 ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff- fvl-1 ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff- fvl-1 ls-1 ffs-1">&#xfb01;</td>
+
+</tr><tr>
+
+ <td class="align ff-0 fvl- ls- ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls- ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls- ffs-1">&#xfb01;</td>
+ <td class="align ff-0 fvl- ls-0 ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls-0 ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff-0 fvl- ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl- ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff-0 fvl-n ls- ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls- ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls- ffs-1">&#xfb01;</td>
+ <td class="align ff-0 fvl-n ls-0 ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls-0 ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff-0 fvl-n ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-n ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff-0 fvl-0 ls- ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls- ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls- ffs-1">&#xfb01;</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff-0 fvl-1 ls- ffs- ">&#xfb01;</td>
+ <td class="align ff-0 fvl-1 ls- ffs-n">&#xfb01;</td>
+ <td class="align ff-0 fvl-1 ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-1 ls- ffs-1">&#xfb01;</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs- ">&#xfb01;</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs-n">&#xfb01;</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs-1">&#xfb01;</td>
+
+</tr><tr>
+
+ <td class="align ff-1 fvl- ls- ffs- ">&#xfb01;</td>
+ <td class="align ff-1 fvl- ls- ffs-n">&#xfb01;</td>
+ <td class="align ff-1 fvl- ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl- ls- ffs-1">&#xfb01;</td>
+ <td class="align ff-1 fvl- ls-0 ffs- ">&#xfb01;</td>
+ <td class="align ff-1 fvl- ls-0 ffs-n">&#xfb01;</td>
+ <td class="align ff-1 fvl- ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl- ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff-1 fvl- ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff-1 fvl- ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff-1 fvl- ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl- ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff-1 fvl-n ls- ffs- ">&#xfb01;</td>
+ <td class="align ff-1 fvl-n ls- ffs-n">&#xfb01;</td>
+ <td class="align ff-1 fvl-n ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-n ls- ffs-1">&#xfb01;</td>
+ <td class="align ff-1 fvl-n ls-0 ffs- ">&#xfb01;</td>
+ <td class="align ff-1 fvl-n ls-0 ffs-n">&#xfb01;</td>
+ <td class="align ff-1 fvl-n ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-n ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff-1 fvl-n ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff-1 fvl-n ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff-1 fvl-n ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-n ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff-1 fvl-0 ls- ffs- ">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls- ffs-n">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls- ffs-1">&#xfb01;</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs- ">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs-n">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs-1">&#xfb01;</td>
+</tr><tr>
+ <td class="align ff-1 fvl-1 ls- ffs- ">&#xfb01;</td>
+ <td class="align ff-1 fvl-1 ls- ffs-n">&#xfb01;</td>
+ <td class="align ff-1 fvl-1 ls- ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-1 ls- ffs-1">&#xfb01;</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs- ">&#xfb01;</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs-n">&#xfb01;</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs-1">&#xfb01;</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs- ">f&zwnj;i</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs-n">f&zwnj;i</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs-0">f&zwnj;i</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs-1">&#xfb01;</td>
+
+</tr></table>
+<table class="test"><tr>
+
+ <td class="align ff- fvl- ls- ffs- ">fi</td>
+ <td class="align ff- fvl- ls- ffs-n">fi</td>
+ <td class="align ff- fvl- ls- ffs-0">fi</td>
+ <td class="align ff- fvl- ls- ffs-1">fi</td>
+ <td class="align ff- fvl- ls-0 ffs- ">fi</td>
+ <td class="align ff- fvl- ls-0 ffs-n">fi</td>
+ <td class="align ff- fvl- ls-0 ffs-0">fi</td>
+ <td class="align ff- fvl- ls-0 ffs-1">fi</td>
+ <td class="align ff- fvl- ls-1 ffs- ">fi</td>
+ <td class="align ff- fvl- ls-1 ffs-n">fi</td>
+ <td class="align ff- fvl- ls-1 ffs-0">fi</td>
+ <td class="align ff- fvl- ls-1 ffs-1">fi</td>
+</tr><tr>
+ <td class="align ff- fvl-n ls- ffs- ">fi</td>
+ <td class="align ff- fvl-n ls- ffs-n">fi</td>
+ <td class="align ff- fvl-n ls- ffs-0">fi</td>
+ <td class="align ff- fvl-n ls- ffs-1">fi</td>
+ <td class="align ff- fvl-n ls-0 ffs- ">fi</td>
+ <td class="align ff- fvl-n ls-0 ffs-n">fi</td>
+ <td class="align ff- fvl-n ls-0 ffs-0">fi</td>
+ <td class="align ff- fvl-n ls-0 ffs-1">fi</td>
+ <td class="align ff- fvl-n ls-1 ffs- ">fi</td>
+ <td class="align ff- fvl-n ls-1 ffs-n">fi</td>
+ <td class="align ff- fvl-n ls-1 ffs-0">fi</td>
+ <td class="align ff- fvl-n ls-1 ffs-1">fi</td>
+</tr><tr>
+ <td class="align ff- fvl-0 ls- ffs- ">fi</td>
+ <td class="align ff- fvl-0 ls- ffs-n">fi</td>
+ <td class="align ff- fvl-0 ls- ffs-0">fi</td>
+ <td class="align ff- fvl-0 ls- ffs-1">fi</td>
+ <td class="align ff- fvl-0 ls-0 ffs- ">fi</td>
+ <td class="align ff- fvl-0 ls-0 ffs-n">fi</td>
+ <td class="align ff- fvl-0 ls-0 ffs-0">fi</td>
+ <td class="align ff- fvl-0 ls-0 ffs-1">fi</td>
+ <td class="align ff- fvl-0 ls-1 ffs- ">fi</td>
+ <td class="align ff- fvl-0 ls-1 ffs-n">fi</td>
+ <td class="align ff- fvl-0 ls-1 ffs-0">fi</td>
+ <td class="align ff- fvl-0 ls-1 ffs-1">fi</td>
+</tr><tr>
+ <td class="align ff- fvl-1 ls- ffs- ">fi</td>
+ <td class="align ff- fvl-1 ls- ffs-n">fi</td>
+ <td class="align ff- fvl-1 ls- ffs-0">fi</td>
+ <td class="align ff- fvl-1 ls- ffs-1">fi</td>
+ <td class="align ff- fvl-1 ls-0 ffs- ">fi</td>
+ <td class="align ff- fvl-1 ls-0 ffs-n">fi</td>
+ <td class="align ff- fvl-1 ls-0 ffs-0">fi</td>
+ <td class="align ff- fvl-1 ls-0 ffs-1">fi</td>
+ <td class="align ff- fvl-1 ls-1 ffs- ">fi</td>
+ <td class="align ff- fvl-1 ls-1 ffs-n">fi</td>
+ <td class="align ff- fvl-1 ls-1 ffs-0">fi</td>
+ <td class="align ff- fvl-1 ls-1 ffs-1">fi</td>
+
+</tr><tr>
+
+ <td class="align ff-0 fvl- ls- ffs- ">fi</td>
+ <td class="align ff-0 fvl- ls- ffs-n">fi</td>
+ <td class="align ff-0 fvl- ls- ffs-0">fi</td>
+ <td class="align ff-0 fvl- ls- ffs-1">fi</td>
+ <td class="align ff-0 fvl- ls-0 ffs- ">fi</td>
+ <td class="align ff-0 fvl- ls-0 ffs-n">fi</td>
+ <td class="align ff-0 fvl- ls-0 ffs-0">fi</td>
+ <td class="align ff-0 fvl- ls-0 ffs-1">fi</td>
+ <td class="align ff-0 fvl- ls-1 ffs- ">fi</td>
+ <td class="align ff-0 fvl- ls-1 ffs-n">fi</td>
+ <td class="align ff-0 fvl- ls-1 ffs-0">fi</td>
+ <td class="align ff-0 fvl- ls-1 ffs-1">fi</td>
+</tr><tr>
+ <td class="align ff-0 fvl-n ls- ffs- ">fi</td>
+ <td class="align ff-0 fvl-n ls- ffs-n">fi</td>
+ <td class="align ff-0 fvl-n ls- ffs-0">fi</td>
+ <td class="align ff-0 fvl-n ls- ffs-1">fi</td>
+ <td class="align ff-0 fvl-n ls-0 ffs- ">fi</td>
+ <td class="align ff-0 fvl-n ls-0 ffs-n">fi</td>
+ <td class="align ff-0 fvl-n ls-0 ffs-0">fi</td>
+ <td class="align ff-0 fvl-n ls-0 ffs-1">fi</td>
+ <td class="align ff-0 fvl-n ls-1 ffs- ">fi</td>
+ <td class="align ff-0 fvl-n ls-1 ffs-n">fi</td>
+ <td class="align ff-0 fvl-n ls-1 ffs-0">fi</td>
+ <td class="align ff-0 fvl-n ls-1 ffs-1">fi</td>
+</tr><tr>
+ <td class="align ff-0 fvl-0 ls- ffs- ">fi</td>
+ <td class="align ff-0 fvl-0 ls- ffs-n">fi</td>
+ <td class="align ff-0 fvl-0 ls- ffs-0">fi</td>
+ <td class="align ff-0 fvl-0 ls- ffs-1">fi</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs- ">fi</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs-n">fi</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs-0">fi</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs-1">fi</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs- ">fi</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs-n">fi</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs-0">fi</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs-1">fi</td>
+</tr><tr>
+ <td class="align ff-0 fvl-1 ls- ffs- ">fi</td>
+ <td class="align ff-0 fvl-1 ls- ffs-n">fi</td>
+ <td class="align ff-0 fvl-1 ls- ffs-0">fi</td>
+ <td class="align ff-0 fvl-1 ls- ffs-1">fi</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs- ">fi</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs-n">fi</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs-0">fi</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs-1">fi</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs- ">fi</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs-n">fi</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs-0">fi</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs-1">fi</td>
+
+</tr><tr>
+
+ <td class="align ff-1 fvl- ls- ffs- ">fi</td>
+ <td class="align ff-1 fvl- ls- ffs-n">fi</td>
+ <td class="align ff-1 fvl- ls- ffs-0">fi</td>
+ <td class="align ff-1 fvl- ls- ffs-1">fi</td>
+ <td class="align ff-1 fvl- ls-0 ffs- ">fi</td>
+ <td class="align ff-1 fvl- ls-0 ffs-n">fi</td>
+ <td class="align ff-1 fvl- ls-0 ffs-0">fi</td>
+ <td class="align ff-1 fvl- ls-0 ffs-1">fi</td>
+ <td class="align ff-1 fvl- ls-1 ffs- ">fi</td>
+ <td class="align ff-1 fvl- ls-1 ffs-n">fi</td>
+ <td class="align ff-1 fvl- ls-1 ffs-0">fi</td>
+ <td class="align ff-1 fvl- ls-1 ffs-1">fi</td>
+</tr><tr>
+ <td class="align ff-1 fvl-n ls- ffs- ">fi</td>
+ <td class="align ff-1 fvl-n ls- ffs-n">fi</td>
+ <td class="align ff-1 fvl-n ls- ffs-0">fi</td>
+ <td class="align ff-1 fvl-n ls- ffs-1">fi</td>
+ <td class="align ff-1 fvl-n ls-0 ffs- ">fi</td>
+ <td class="align ff-1 fvl-n ls-0 ffs-n">fi</td>
+ <td class="align ff-1 fvl-n ls-0 ffs-0">fi</td>
+ <td class="align ff-1 fvl-n ls-0 ffs-1">fi</td>
+ <td class="align ff-1 fvl-n ls-1 ffs- ">fi</td>
+ <td class="align ff-1 fvl-n ls-1 ffs-n">fi</td>
+ <td class="align ff-1 fvl-n ls-1 ffs-0">fi</td>
+ <td class="align ff-1 fvl-n ls-1 ffs-1">fi</td>
+</tr><tr>
+ <td class="align ff-1 fvl-0 ls- ffs- ">fi</td>
+ <td class="align ff-1 fvl-0 ls- ffs-n">fi</td>
+ <td class="align ff-1 fvl-0 ls- ffs-0">fi</td>
+ <td class="align ff-1 fvl-0 ls- ffs-1">fi</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs- ">fi</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs-n">fi</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs-0">fi</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs-1">fi</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs- ">fi</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs-n">fi</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs-0">fi</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs-1">fi</td>
+</tr><tr>
+ <td class="align ff-1 fvl-1 ls- ffs- ">fi</td>
+ <td class="align ff-1 fvl-1 ls- ffs-n">fi</td>
+ <td class="align ff-1 fvl-1 ls- ffs-0">fi</td>
+ <td class="align ff-1 fvl-1 ls- ffs-1">fi</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs- ">fi</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs-n">fi</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs-0">fi</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs-1">fi</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs- ">fi</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs-n">fi</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs-0">fi</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs-1">fi</td>
+
+</tr></table>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-feature-resolution-002-ref.html b/testing/web-platform/tests/css/css-fonts/font-feature-resolution-002-ref.html
new file mode 100644
index 0000000000..9908422414
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-feature-resolution-002-ref.html
@@ -0,0 +1,356 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>CSS Test: feature property settings are resolved in the correct order for 'dlig'.</title>
+<link rel="author" title="Ben Wagner" href="bungeman@chromium.org" />
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#feature-precedence" />
+<style>
+ @font-face {
+ font-family: lato-ffs-;
+ src: url(support/fonts/Lato-Medium-Liga.ttf);
+ }
+ .test, .ref {
+ font-family: lato-ffs-;
+ font-size: 2em;
+ position: absolute;
+ }
+ .test { color: green; }
+ .ref { color: red; }
+
+ .align { width: 1em; }
+
+ .ls-0 { letter-spacing: 0em; }
+ .ls-1 { letter-spacing: 0.1em; }
+</style>
+</head>
+<body>
+<p>Test passes if there is no red visible.</p>
+<table class="ref"><tr>
+
+ <td class="align ff- fvl- ls- ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl- ls- ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl- ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl- ls- ffs-1">&#xfb06;</td>
+ <td class="align ff- fvl- ls-0 ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl- ls-0 ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl- ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl- ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff- fvl- ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl- ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl- ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl- ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff- fvl-n ls- ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls- ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls- ffs-1">&#xfb06;</td>
+ <td class="align ff- fvl-n ls-0 ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls-0 ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff- fvl-n ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff- fvl-0 ls- ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls- ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls- ffs-1">&#xfb06;</td>
+ <td class="align ff- fvl-0 ls-0 ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls-0 ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff- fvl-0 ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff- fvl-1 ls- ffs- ">&#xfb06;</td>
+ <td class="align ff- fvl-1 ls- ffs-n">&#xfb06;</td>
+ <td class="align ff- fvl-1 ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-1 ls- ffs-1">&#xfb06;</td>
+ <td class="align ff- fvl-1 ls-0 ffs- ">&#xfb06;</td>
+ <td class="align ff- fvl-1 ls-0 ffs-n">&#xfb06;</td>
+ <td class="align ff- fvl-1 ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-1 ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff- fvl-1 ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl-1 ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl-1 ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-1 ls-1 ffs-1">&#xfb06;</td>
+
+</tr><tr>
+
+ <td class="align ff-0 fvl- ls- ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls- ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls- ffs-1">&#xfb06;</td>
+ <td class="align ff-0 fvl- ls-0 ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls-0 ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff-0 fvl- ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff-0 fvl-n ls- ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls- ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls- ffs-1">&#xfb06;</td>
+ <td class="align ff-0 fvl-n ls-0 ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls-0 ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff-0 fvl-n ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff-0 fvl-0 ls- ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls- ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls- ffs-1">&#xfb06;</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff-0 fvl-1 ls- ffs- ">&#xfb06;</td>
+ <td class="align ff-0 fvl-1 ls- ffs-n">&#xfb06;</td>
+ <td class="align ff-0 fvl-1 ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-1 ls- ffs-1">&#xfb06;</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs- ">&#xfb06;</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs-n">&#xfb06;</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs-1">&#xfb06;</td>
+
+</tr><tr>
+
+ <td class="align ff-1 fvl- ls- ffs- ">&#xfb06;</td>
+ <td class="align ff-1 fvl- ls- ffs-n">&#xfb06;</td>
+ <td class="align ff-1 fvl- ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl- ls- ffs-1">&#xfb06;</td>
+ <td class="align ff-1 fvl- ls-0 ffs- ">&#xfb06;</td>
+ <td class="align ff-1 fvl- ls-0 ffs-n">&#xfb06;</td>
+ <td class="align ff-1 fvl- ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl- ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff-1 fvl- ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff-1 fvl- ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff-1 fvl- ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl- ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff-1 fvl-n ls- ffs- ">&#xfb06;</td>
+ <td class="align ff-1 fvl-n ls- ffs-n">&#xfb06;</td>
+ <td class="align ff-1 fvl-n ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-n ls- ffs-1">&#xfb06;</td>
+ <td class="align ff-1 fvl-n ls-0 ffs- ">&#xfb06;</td>
+ <td class="align ff-1 fvl-n ls-0 ffs-n">&#xfb06;</td>
+ <td class="align ff-1 fvl-n ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-n ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff-1 fvl-n ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff-1 fvl-n ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff-1 fvl-n ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-n ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff-1 fvl-0 ls- ffs- ">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls- ffs-n">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls- ffs-1">&#xfb06;</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs- ">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs-n">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff-1 fvl-1 ls- ffs- ">&#xfb06;</td>
+ <td class="align ff-1 fvl-1 ls- ffs-n">&#xfb06;</td>
+ <td class="align ff-1 fvl-1 ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-1 ls- ffs-1">&#xfb06;</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs- ">&#xfb06;</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs-n">&#xfb06;</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs-1">&#xfb06;</td>
+
+</tr></table>
+<table class="test"><tr>
+
+ <td class="align ff- fvl- ls- ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl- ls- ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl- ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl- ls- ffs-1">&#xfb06;</td>
+ <td class="align ff- fvl- ls-0 ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl- ls-0 ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl- ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl- ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff- fvl- ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl- ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl- ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl- ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff- fvl-n ls- ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls- ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls- ffs-1">&#xfb06;</td>
+ <td class="align ff- fvl-n ls-0 ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls-0 ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff- fvl-n ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff- fvl-0 ls- ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls- ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls- ffs-1">&#xfb06;</td>
+ <td class="align ff- fvl-0 ls-0 ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls-0 ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff- fvl-0 ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff- fvl-1 ls- ffs- ">&#xfb06;</td>
+ <td class="align ff- fvl-1 ls- ffs-n">&#xfb06;</td>
+ <td class="align ff- fvl-1 ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-1 ls- ffs-1">&#xfb06;</td>
+ <td class="align ff- fvl-1 ls-0 ffs- ">&#xfb06;</td>
+ <td class="align ff- fvl-1 ls-0 ffs-n">&#xfb06;</td>
+ <td class="align ff- fvl-1 ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-1 ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff- fvl-1 ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl-1 ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl-1 ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-1 ls-1 ffs-1">&#xfb06;</td>
+
+</tr><tr>
+
+ <td class="align ff-0 fvl- ls- ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls- ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls- ffs-1">&#xfb06;</td>
+ <td class="align ff-0 fvl- ls-0 ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls-0 ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff-0 fvl- ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff-0 fvl-n ls- ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls- ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls- ffs-1">&#xfb06;</td>
+ <td class="align ff-0 fvl-n ls-0 ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls-0 ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff-0 fvl-n ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff-0 fvl-0 ls- ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls- ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls- ffs-1">&#xfb06;</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff-0 fvl-1 ls- ffs- ">&#xfb06;</td>
+ <td class="align ff-0 fvl-1 ls- ffs-n">&#xfb06;</td>
+ <td class="align ff-0 fvl-1 ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-1 ls- ffs-1">&#xfb06;</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs- ">&#xfb06;</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs-n">&#xfb06;</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs-1">&#xfb06;</td>
+
+</tr><tr>
+
+ <td class="align ff-1 fvl- ls- ffs- ">&#xfb06;</td>
+ <td class="align ff-1 fvl- ls- ffs-n">&#xfb06;</td>
+ <td class="align ff-1 fvl- ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl- ls- ffs-1">&#xfb06;</td>
+ <td class="align ff-1 fvl- ls-0 ffs- ">&#xfb06;</td>
+ <td class="align ff-1 fvl- ls-0 ffs-n">&#xfb06;</td>
+ <td class="align ff-1 fvl- ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl- ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff-1 fvl- ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff-1 fvl- ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff-1 fvl- ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl- ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff-1 fvl-n ls- ffs- ">&#xfb06;</td>
+ <td class="align ff-1 fvl-n ls- ffs-n">&#xfb06;</td>
+ <td class="align ff-1 fvl-n ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-n ls- ffs-1">&#xfb06;</td>
+ <td class="align ff-1 fvl-n ls-0 ffs- ">&#xfb06;</td>
+ <td class="align ff-1 fvl-n ls-0 ffs-n">&#xfb06;</td>
+ <td class="align ff-1 fvl-n ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-n ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff-1 fvl-n ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff-1 fvl-n ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff-1 fvl-n ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-n ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff-1 fvl-0 ls- ffs- ">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls- ffs-n">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls- ffs-1">&#xfb06;</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs- ">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs-n">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff-1 fvl-1 ls- ffs- ">&#xfb06;</td>
+ <td class="align ff-1 fvl-1 ls- ffs-n">&#xfb06;</td>
+ <td class="align ff-1 fvl-1 ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-1 ls- ffs-1">&#xfb06;</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs- ">&#xfb06;</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs-n">&#xfb06;</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs-1">&#xfb06;</td>
+
+</tr></table>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-feature-resolution-002.html b/testing/web-platform/tests/css/css-fonts/font-feature-resolution-002.html
new file mode 100644
index 0000000000..05cc4db746
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-feature-resolution-002.html
@@ -0,0 +1,383 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>CSS Test: feature property settings are resolved in the correct order for 'dlig'.</title>
+<link rel="author" title="Ben Wagner" href="bungeman@chromium.org" />
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#feature-precedence" />
+<link rel="match" href="font-feature-resolution-002-ref.html" />
+<meta name="assert" content="default < @font-face < font-variant < letter-spacing < font-feature-settings" />
+<style>
+ @font-face {
+ font-family: lato-ffs-;
+ src: url(support/fonts/Lato-Medium-Liga.ttf);
+ }
+ @font-face {
+ font-family: lato-ffs-0;
+ src: url(support/fonts/Lato-Medium-Liga.ttf);
+ font-feature-settings: 'dlig' off;
+ }
+ @font-face {
+ font-family: lato-ffs-1;
+ src: url(support/fonts/Lato-Medium-Liga.ttf);
+ font-feature-settings: 'dlig' on;
+ }
+ .test, .ref {
+ font-family: lato-ffs-;
+ font-size: 2em;
+ position: absolute;
+ }
+ .test { color: green; }
+ .ref { color: red; }
+
+ .align { width: 1em; }
+
+ .ff- { font-family: lato-ffs- ; }
+ .ff-0 { font-family: lato-ffs-0; }
+ .ff-1 { font-family: lato-ffs-1; }
+
+ .fvl- { }
+ .fvl-n { font-variant-ligatures: normal; }
+ .fvl-0 { font-variant-ligatures: no-discretionary-ligatures; }
+ .fvl-1 { font-variant-ligatures: discretionary-ligatures; }
+
+ .ls- { }
+ .ls-0 { letter-spacing: 0em; }
+ .ls-1 { letter-spacing: 0.1em; }
+
+ .ffs- { }
+ .ffs-n { font-feature-settings: normal; }
+ .ffs-0 { font-feature-settings: 'dlig' off; }
+ .ffs-1 { font-feature-settings: 'dlig' on; }
+</style>
+</head>
+<body>
+<p>Test passes if there is no red visible.</p>
+<table class="ref"><tr>
+
+ <td class="align ff- fvl- ls- ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl- ls- ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl- ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl- ls- ffs-1">&#xfb06;</td>
+ <td class="align ff- fvl- ls-0 ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl- ls-0 ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl- ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl- ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff- fvl- ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl- ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl- ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl- ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff- fvl-n ls- ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls- ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls- ffs-1">&#xfb06;</td>
+ <td class="align ff- fvl-n ls-0 ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls-0 ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff- fvl-n ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-n ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff- fvl-0 ls- ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls- ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls- ffs-1">&#xfb06;</td>
+ <td class="align ff- fvl-0 ls-0 ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls-0 ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff- fvl-0 ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-0 ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff- fvl-1 ls- ffs- ">&#xfb06;</td>
+ <td class="align ff- fvl-1 ls- ffs-n">&#xfb06;</td>
+ <td class="align ff- fvl-1 ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-1 ls- ffs-1">&#xfb06;</td>
+ <td class="align ff- fvl-1 ls-0 ffs- ">&#xfb06;</td>
+ <td class="align ff- fvl-1 ls-0 ffs-n">&#xfb06;</td>
+ <td class="align ff- fvl-1 ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-1 ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff- fvl-1 ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff- fvl-1 ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff- fvl-1 ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff- fvl-1 ls-1 ffs-1">&#xfb06;</td>
+
+</tr><tr>
+
+ <td class="align ff-0 fvl- ls- ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls- ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls- ffs-1">&#xfb06;</td>
+ <td class="align ff-0 fvl- ls-0 ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls-0 ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff-0 fvl- ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl- ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff-0 fvl-n ls- ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls- ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls- ffs-1">&#xfb06;</td>
+ <td class="align ff-0 fvl-n ls-0 ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls-0 ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff-0 fvl-n ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-n ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff-0 fvl-0 ls- ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls- ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls- ffs-1">&#xfb06;</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff-0 fvl-1 ls- ffs- ">&#xfb06;</td>
+ <td class="align ff-0 fvl-1 ls- ffs-n">&#xfb06;</td>
+ <td class="align ff-0 fvl-1 ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-1 ls- ffs-1">&#xfb06;</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs- ">&#xfb06;</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs-n">&#xfb06;</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs-1">&#xfb06;</td>
+
+</tr><tr>
+
+ <td class="align ff-1 fvl- ls- ffs- ">&#xfb06;</td>
+ <td class="align ff-1 fvl- ls- ffs-n">&#xfb06;</td>
+ <td class="align ff-1 fvl- ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl- ls- ffs-1">&#xfb06;</td>
+ <td class="align ff-1 fvl- ls-0 ffs- ">&#xfb06;</td>
+ <td class="align ff-1 fvl- ls-0 ffs-n">&#xfb06;</td>
+ <td class="align ff-1 fvl- ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl- ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff-1 fvl- ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff-1 fvl- ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff-1 fvl- ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl- ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff-1 fvl-n ls- ffs- ">&#xfb06;</td>
+ <td class="align ff-1 fvl-n ls- ffs-n">&#xfb06;</td>
+ <td class="align ff-1 fvl-n ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-n ls- ffs-1">&#xfb06;</td>
+ <td class="align ff-1 fvl-n ls-0 ffs- ">&#xfb06;</td>
+ <td class="align ff-1 fvl-n ls-0 ffs-n">&#xfb06;</td>
+ <td class="align ff-1 fvl-n ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-n ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff-1 fvl-n ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff-1 fvl-n ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff-1 fvl-n ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-n ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff-1 fvl-0 ls- ffs- ">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls- ffs-n">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls- ffs-1">&#xfb06;</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs- ">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs-n">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs-1">&#xfb06;</td>
+</tr><tr>
+ <td class="align ff-1 fvl-1 ls- ffs- ">&#xfb06;</td>
+ <td class="align ff-1 fvl-1 ls- ffs-n">&#xfb06;</td>
+ <td class="align ff-1 fvl-1 ls- ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-1 ls- ffs-1">&#xfb06;</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs- ">&#xfb06;</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs-n">&#xfb06;</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs-1">&#xfb06;</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs- ">s&zwnj;t</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs-n">s&zwnj;t</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs-0">s&zwnj;t</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs-1">&#xfb06;</td>
+
+</tr></table>
+<table class="test"><tr>
+
+ <td class="align ff- fvl- ls- ffs- ">st</td>
+ <td class="align ff- fvl- ls- ffs-n">st</td>
+ <td class="align ff- fvl- ls- ffs-0">st</td>
+ <td class="align ff- fvl- ls- ffs-1">st</td>
+ <td class="align ff- fvl- ls-0 ffs- ">st</td>
+ <td class="align ff- fvl- ls-0 ffs-n">st</td>
+ <td class="align ff- fvl- ls-0 ffs-0">st</td>
+ <td class="align ff- fvl- ls-0 ffs-1">st</td>
+ <td class="align ff- fvl- ls-1 ffs- ">st</td>
+ <td class="align ff- fvl- ls-1 ffs-n">st</td>
+ <td class="align ff- fvl- ls-1 ffs-0">st</td>
+ <td class="align ff- fvl- ls-1 ffs-1">st</td>
+</tr><tr>
+ <td class="align ff- fvl-n ls- ffs- ">st</td>
+ <td class="align ff- fvl-n ls- ffs-n">st</td>
+ <td class="align ff- fvl-n ls- ffs-0">st</td>
+ <td class="align ff- fvl-n ls- ffs-1">st</td>
+ <td class="align ff- fvl-n ls-0 ffs- ">st</td>
+ <td class="align ff- fvl-n ls-0 ffs-n">st</td>
+ <td class="align ff- fvl-n ls-0 ffs-0">st</td>
+ <td class="align ff- fvl-n ls-0 ffs-1">st</td>
+ <td class="align ff- fvl-n ls-1 ffs- ">st</td>
+ <td class="align ff- fvl-n ls-1 ffs-n">st</td>
+ <td class="align ff- fvl-n ls-1 ffs-0">st</td>
+ <td class="align ff- fvl-n ls-1 ffs-1">st</td>
+</tr><tr>
+ <td class="align ff- fvl-0 ls- ffs- ">st</td>
+ <td class="align ff- fvl-0 ls- ffs-n">st</td>
+ <td class="align ff- fvl-0 ls- ffs-0">st</td>
+ <td class="align ff- fvl-0 ls- ffs-1">st</td>
+ <td class="align ff- fvl-0 ls-0 ffs- ">st</td>
+ <td class="align ff- fvl-0 ls-0 ffs-n">st</td>
+ <td class="align ff- fvl-0 ls-0 ffs-0">st</td>
+ <td class="align ff- fvl-0 ls-0 ffs-1">st</td>
+ <td class="align ff- fvl-0 ls-1 ffs- ">st</td>
+ <td class="align ff- fvl-0 ls-1 ffs-n">st</td>
+ <td class="align ff- fvl-0 ls-1 ffs-0">st</td>
+ <td class="align ff- fvl-0 ls-1 ffs-1">st</td>
+</tr><tr>
+ <td class="align ff- fvl-1 ls- ffs- ">st</td>
+ <td class="align ff- fvl-1 ls- ffs-n">st</td>
+ <td class="align ff- fvl-1 ls- ffs-0">st</td>
+ <td class="align ff- fvl-1 ls- ffs-1">st</td>
+ <td class="align ff- fvl-1 ls-0 ffs- ">st</td>
+ <td class="align ff- fvl-1 ls-0 ffs-n">st</td>
+ <td class="align ff- fvl-1 ls-0 ffs-0">st</td>
+ <td class="align ff- fvl-1 ls-0 ffs-1">st</td>
+ <td class="align ff- fvl-1 ls-1 ffs- ">st</td>
+ <td class="align ff- fvl-1 ls-1 ffs-n">st</td>
+ <td class="align ff- fvl-1 ls-1 ffs-0">st</td>
+ <td class="align ff- fvl-1 ls-1 ffs-1">st</td>
+
+</tr><tr>
+
+ <td class="align ff-0 fvl- ls- ffs- ">st</td>
+ <td class="align ff-0 fvl- ls- ffs-n">st</td>
+ <td class="align ff-0 fvl- ls- ffs-0">st</td>
+ <td class="align ff-0 fvl- ls- ffs-1">st</td>
+ <td class="align ff-0 fvl- ls-0 ffs- ">st</td>
+ <td class="align ff-0 fvl- ls-0 ffs-n">st</td>
+ <td class="align ff-0 fvl- ls-0 ffs-0">st</td>
+ <td class="align ff-0 fvl- ls-0 ffs-1">st</td>
+ <td class="align ff-0 fvl- ls-1 ffs- ">st</td>
+ <td class="align ff-0 fvl- ls-1 ffs-n">st</td>
+ <td class="align ff-0 fvl- ls-1 ffs-0">st</td>
+ <td class="align ff-0 fvl- ls-1 ffs-1">st</td>
+</tr><tr>
+ <td class="align ff-0 fvl-n ls- ffs- ">st</td>
+ <td class="align ff-0 fvl-n ls- ffs-n">st</td>
+ <td class="align ff-0 fvl-n ls- ffs-0">st</td>
+ <td class="align ff-0 fvl-n ls- ffs-1">st</td>
+ <td class="align ff-0 fvl-n ls-0 ffs- ">st</td>
+ <td class="align ff-0 fvl-n ls-0 ffs-n">st</td>
+ <td class="align ff-0 fvl-n ls-0 ffs-0">st</td>
+ <td class="align ff-0 fvl-n ls-0 ffs-1">st</td>
+ <td class="align ff-0 fvl-n ls-1 ffs- ">st</td>
+ <td class="align ff-0 fvl-n ls-1 ffs-n">st</td>
+ <td class="align ff-0 fvl-n ls-1 ffs-0">st</td>
+ <td class="align ff-0 fvl-n ls-1 ffs-1">st</td>
+</tr><tr>
+ <td class="align ff-0 fvl-0 ls- ffs- ">st</td>
+ <td class="align ff-0 fvl-0 ls- ffs-n">st</td>
+ <td class="align ff-0 fvl-0 ls- ffs-0">st</td>
+ <td class="align ff-0 fvl-0 ls- ffs-1">st</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs- ">st</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs-n">st</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs-0">st</td>
+ <td class="align ff-0 fvl-0 ls-0 ffs-1">st</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs- ">st</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs-n">st</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs-0">st</td>
+ <td class="align ff-0 fvl-0 ls-1 ffs-1">st</td>
+</tr><tr>
+ <td class="align ff-0 fvl-1 ls- ffs- ">st</td>
+ <td class="align ff-0 fvl-1 ls- ffs-n">st</td>
+ <td class="align ff-0 fvl-1 ls- ffs-0">st</td>
+ <td class="align ff-0 fvl-1 ls- ffs-1">st</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs- ">st</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs-n">st</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs-0">st</td>
+ <td class="align ff-0 fvl-1 ls-0 ffs-1">st</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs- ">st</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs-n">st</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs-0">st</td>
+ <td class="align ff-0 fvl-1 ls-1 ffs-1">st</td>
+
+</tr><tr>
+
+ <td class="align ff-1 fvl- ls- ffs- ">st</td>
+ <td class="align ff-1 fvl- ls- ffs-n">st</td>
+ <td class="align ff-1 fvl- ls- ffs-0">st</td>
+ <td class="align ff-1 fvl- ls- ffs-1">st</td>
+ <td class="align ff-1 fvl- ls-0 ffs- ">st</td>
+ <td class="align ff-1 fvl- ls-0 ffs-n">st</td>
+ <td class="align ff-1 fvl- ls-0 ffs-0">st</td>
+ <td class="align ff-1 fvl- ls-0 ffs-1">st</td>
+ <td class="align ff-1 fvl- ls-1 ffs- ">st</td>
+ <td class="align ff-1 fvl- ls-1 ffs-n">st</td>
+ <td class="align ff-1 fvl- ls-1 ffs-0">st</td>
+ <td class="align ff-1 fvl- ls-1 ffs-1">st</td>
+</tr><tr>
+ <td class="align ff-1 fvl-n ls- ffs- ">st</td>
+ <td class="align ff-1 fvl-n ls- ffs-n">st</td>
+ <td class="align ff-1 fvl-n ls- ffs-0">st</td>
+ <td class="align ff-1 fvl-n ls- ffs-1">st</td>
+ <td class="align ff-1 fvl-n ls-0 ffs- ">st</td>
+ <td class="align ff-1 fvl-n ls-0 ffs-n">st</td>
+ <td class="align ff-1 fvl-n ls-0 ffs-0">st</td>
+ <td class="align ff-1 fvl-n ls-0 ffs-1">st</td>
+ <td class="align ff-1 fvl-n ls-1 ffs- ">st</td>
+ <td class="align ff-1 fvl-n ls-1 ffs-n">st</td>
+ <td class="align ff-1 fvl-n ls-1 ffs-0">st</td>
+ <td class="align ff-1 fvl-n ls-1 ffs-1">st</td>
+</tr><tr>
+ <td class="align ff-1 fvl-0 ls- ffs- ">st</td>
+ <td class="align ff-1 fvl-0 ls- ffs-n">st</td>
+ <td class="align ff-1 fvl-0 ls- ffs-0">st</td>
+ <td class="align ff-1 fvl-0 ls- ffs-1">st</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs- ">st</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs-n">st</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs-0">st</td>
+ <td class="align ff-1 fvl-0 ls-0 ffs-1">st</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs- ">st</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs-n">st</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs-0">st</td>
+ <td class="align ff-1 fvl-0 ls-1 ffs-1">st</td>
+</tr><tr>
+ <td class="align ff-1 fvl-1 ls- ffs- ">st</td>
+ <td class="align ff-1 fvl-1 ls- ffs-n">st</td>
+ <td class="align ff-1 fvl-1 ls- ffs-0">st</td>
+ <td class="align ff-1 fvl-1 ls- ffs-1">st</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs- ">st</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs-n">st</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs-0">st</td>
+ <td class="align ff-1 fvl-1 ls-0 ffs-1">st</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs- ">st</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs-n">st</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs-0">st</td>
+ <td class="align ff-1 fvl-1 ls-1 ffs-1">st</td>
+
+</tr></table>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-feature-settings-descriptor-01-ref.html b/testing/web-platform/tests/css/css-fonts/font-feature-settings-descriptor-01-ref.html
new file mode 100644
index 0000000000..4a1723e690
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-feature-settings-descriptor-01-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-feature-settings descriptor</title>
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2.4em;
+ line-height: 1.1;
+ }
+</style>
+
+<body>
+<p>Test passes if the three lines below are identical, with eight check marks (✓). </p>
+<section class="test">
+ <p class="ref">AAAAAAAA</p>
+ <p class="ref">AAAAAAAA</p>
+ <p class="ref">AAAAAAAA</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-feature-settings-descriptor-01.html b/testing/web-platform/tests/css/css-fonts/font-feature-settings-descriptor-01.html
new file mode 100644
index 0000000000..8f7c50661a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-feature-settings-descriptor-01.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-feature-settings descriptor</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-rend-desc">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-feature-settings-descriptor-01-ref.html">
+<meta name="assert" content="These descriptors define initial settings that apply when the font defined by an @font-face rule is rendered">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ @font-face {
+ font-family: fwf2;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ font-feature-settings: "liga" on, "clig" on, "calt" on, "hlig" on, "dlig" on, "onum" on, "smcp" on, "jp90" on;
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2.4em;
+ line-height: 1.1;
+ }
+ .test>p.descriptor {
+ font-family: fwf2;
+ }
+ .property {
+ font-feature-settings: "liga" on, "clig" on, "calt" on, "hlig" on, "dlig" on, "onum" on, "smcp" on, "jp90" on;
+ }
+</style>
+
+<body>
+<p>Test passes if the three lines below are identical, with eight check marks (✓). </p>
+<section class="test">
+ <p class="descriptor">CDGFEJQa</p>
+ <p class="property">CDGFEJQa</p>
+ <p class="ref">AAAAAAAA</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-feature-settings-serialization-001.html b/testing/web-platform/tests/css/css-fonts/font-feature-settings-serialization-001.html
new file mode 100644
index 0000000000..031dd7d330
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-feature-settings-serialization-001.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test: font-feature-settings serialization</title>
+<link rel="author" title="Chris Nardi" href="mailto:cnardi@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-3/#feature-tag-value">
+<link rel="help" href="https://drafts.csswg.org/cssom/#common-serializing-idioms">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+ #test {
+ font-feature-settings: "vert" 1;
+ }
+ #test1 {
+ font-feature-settings: 'vert' 1;
+ }
+ #test2 {
+ font-feature-settings: "vert" off;
+ }
+</style>
+<div id="test"></div>
+<div id="test1"></div>
+<div id="test2"></div>
+<script>
+ const div = document.querySelector("#test");
+ const div1 = document.querySelector("#test1");
+ const div2 = document.querySelector("#test2");
+ test(function() {
+ assert_equals(getComputedStyle(div).fontFeatureSettings, '"vert"');
+ assert_equals(getComputedStyle(div1).fontFeatureSettings, '"vert"');
+ }, "font-feature-settings should be serialized with double quotes, and the default value of 1 should be omitted");
+ test(function() {
+ assert_equals(getComputedStyle(div2).fontFeatureSettings, '"vert" 0');
+ }, "font-feature-settings should serialize 0 instead of off, given it's shorter");
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/font-feature-settings-tibetan-ref.html b/testing/web-platform/tests/css/css-fonts/font-feature-settings-tibetan-ref.html
new file mode 100644
index 0000000000..83bfe74459
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-feature-settings-tibetan-ref.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-feature-settings Liga and Tibetan shaping</title>
+<body>
+<p>Test passes if the three lines below are identical.</p>
+<section class="test" lang="bo">
+ <p>རྒྱུ</p>
+ <p>རྒྱུ</p>
+ <p>རྒྱུ</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-feature-settings-tibetan.html b/testing/web-platform/tests/css/css-fonts/font-feature-settings-tibetan.html
new file mode 100644
index 0000000000..45cde9acb5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-feature-settings-tibetan.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-feature-settings Liga and Tibetan shaping</title>
+<link rel="author" title="Dominik Röttsches" href="drott@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-feature-settings-tibetan-ref.html">
+<meta name="assert" content="Test that Tibetan shaping works with ligatures disabled.">
+<style>
+ .letter-spacing {
+ letter-spacing: .2px;
+ }
+
+ .liga-off {
+ font-feature-settings: "liga" off;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical.</p>
+<section class="test" lang="bo">
+ <p>རྒྱུ</p>
+ <p class="letter-spacing">རྒྱུ</p>
+ <p class="liga-off">རྒྱུ</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-features-across-space-1-ref.html b/testing/web-platform/tests/css/css-fonts/font-features-across-space-1-ref.html
new file mode 100644
index 0000000000..ef6988ce77
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-features-across-space-1-ref.html
@@ -0,0 +1,44 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>CSS Test: ligatures should match across spaces</title>
+<link rel="author" title="John Daggett" href="mailto:jdaggett@mozilla.com"/>
+<link rel="reviewer" title="Chris Lilley" href="mailto:chris@w3.org" />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<style type="text/css">
+@font-face {
+ font-family: ligsym;
+ src: url(support/fonts/LigatureSymbolsWithSpaces.woff);
+}
+
+td {
+ padding: 10px 5px;
+}
+
+.test {
+ font-family: ligsym;
+ font-size: 150%;
+ font-feature-settings: "liga" on;
+}
+</style>
+</head>
+
+<body>
+
+<table>
+<tr><td>calendar</td><td class="test">&#xe15e;</td></tr>
+<tr><td>daily calendar</td><td class="test">&#xe025;</td></tr>
+<tr><td>align left</td><td class="test">&#xe005;</td></tr>
+<tr><td>align center</td><td class="test">&#xe004;</td></tr>
+<tr><td>align right</td><td class="test">&#xe006;</td></tr>
+<tr><td>volume</td><td class="test">&#xe13b;</td></tr>
+<tr><td>volume down</td><td class="test">&#xe13c;</td></tr>
+<tr><td>volume up</td><td class="test">&#xe13d;</td></tr>
+<tr><td>zoom in</td><td class="test">&#xe142;</td></tr>
+<tr><td>zoom out</td><td class="test">&#xe143;</td></tr>
+<tr><td>heart</td><td class="test">&#xe06e;</td></tr>
+<tr><td>heart empty</td><td class="test">&#xe06f;</td></tr>
+</table>
+
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-features-across-space-1.html b/testing/web-platform/tests/css/css-fonts/font-features-across-space-1.html
new file mode 100644
index 0000000000..a01d05e059
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-features-across-space-1.html
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>CSS Test: ligatures should match across spaces</title>
+<link rel="author" title="John Daggett" href="mailto:jdaggett@mozilla.com"/>
+<link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-variant-ligatures-prop"/>
+<link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop"/>
+<link rel="match" href="font-features-across-space-1-ref.html"/>
+<link rel="reviewer" title="Chris Lilley" href="mailto:chris@w3.org" />
+<meta name="assert" content="Ligature features should be handled across spaces with font-feature-settings"/>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<style type="text/css">
+@font-face {
+ font-family: ligsym;
+ src: url(support/fonts/LigatureSymbolsWithSpaces.woff);
+}
+
+td {
+ padding: 10px 5px;
+}
+
+.test {
+ font-family: ligsym;
+ font-size: 150%;
+ font-feature-settings: "liga" on;
+}
+</style>
+</head>
+
+<body>
+
+<table>
+<tr><td>calendar</td><td class="test">calendar</td></tr>
+<tr><td>daily calendar</td><td class="test">daily calendar</td></tr>
+<tr><td>align left</td><td class="test">align left</td></tr>
+<tr><td>align center</td><td class="test">align center</td></tr>
+<tr><td>align right</td><td class="test">align right</td></tr>
+<tr><td>volume</td><td class="test">volume</td></tr>
+<tr><td>volume down</td><td class="test">volume down</td></tr>
+<tr><td>volume up</td><td class="test">volume up</td></tr>
+<tr><td>zoom in</td><td class="test">zoom in</td></tr>
+<tr><td>zoom out</td><td class="test">zoom out</td></tr>
+<tr><td>heart</td><td class="test">heart</td></tr>
+<tr><td>heart empty</td><td class="test">heart empty</td></tr>
+</table>
+
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-features-across-space-2.html b/testing/web-platform/tests/css/css-fonts/font-features-across-space-2.html
new file mode 100644
index 0000000000..2aaeb245cb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-features-across-space-2.html
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>CSS Test: ligatures should match across spaces</title>
+<link rel="author" title="John Daggett" href="mailto:jdaggett@mozilla.com"/>
+<link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-variant-ligatures-prop"/>
+<link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop"/>
+<link rel="reviewer" title="Chris Lilley" href="mailto:chris@w3.org" />
+<link rel="match" href="font-features-across-space-1-ref.html"/>
+<meta name="assert" content="Ligature features should be handled across spaces with font-variant-ligatures"/>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<style type="text/css">
+@font-face {
+ font-family: ligsym;
+ src: url(support/fonts/LigatureSymbolsWithSpaces.woff);
+}
+
+td {
+ padding: 10px 5px;
+}
+
+.test {
+ font-family: ligsym;
+ font-size: 150%;
+ font-variant-ligatures: common-ligatures;
+}
+</style>
+</head>
+
+<body>
+
+<table>
+<tr><td>calendar</td><td class="test">calendar</td></tr>
+<tr><td>daily calendar</td><td class="test">daily calendar</td></tr>
+<tr><td>align left</td><td class="test">align left</td></tr>
+<tr><td>align center</td><td class="test">align center</td></tr>
+<tr><td>align right</td><td class="test">align right</td></tr>
+<tr><td>volume</td><td class="test">volume</td></tr>
+<tr><td>volume down</td><td class="test">volume down</td></tr>
+<tr><td>volume up</td><td class="test">volume up</td></tr>
+<tr><td>zoom in</td><td class="test">zoom in</td></tr>
+<tr><td>zoom out</td><td class="test">zoom out</td></tr>
+<tr><td>heart</td><td class="test">heart</td></tr>
+<tr><td>heart empty</td><td class="test">heart empty</td></tr>
+</table>
+
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-features-across-space-3.html b/testing/web-platform/tests/css/css-fonts/font-features-across-space-3.html
new file mode 100644
index 0000000000..751f2cc216
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-features-across-space-3.html
@@ -0,0 +1,50 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>CSS Test: ligatures should match across spaces</title>
+<link rel="author" title="John Daggett" href="mailto:jdaggett@mozilla.com"/>
+<link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-variant-ligatures-prop"/>
+<link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop"/>
+<link rel="match" href="font-features-across-space-1-ref.html"/>
+<link rel="reviewer" title="Chris Lilley" href="mailto:chris@w3.org" />
+<meta name="assert" content="Ligature features should be handled across spaces with interacting font feature properties"/>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<style type="text/css">
+@font-face {
+ font-family: ligsym;
+ src: url(support/fonts/LigatureSymbolsWithSpaces.woff);
+ font-feature-settings: "liga" 0;
+}
+
+td {
+ padding: 10px 5px;
+}
+
+.test {
+ font-family: ligsym;
+ font-size: 150%;
+ font-variant-ligatures: none;
+ font-feature-settings: "liga" on;
+}
+</style>
+</head>
+
+<body>
+
+<table>
+<tr><td>calendar</td><td class="test">calendar</td></tr>
+<tr><td>daily calendar</td><td class="test">daily calendar</td></tr>
+<tr><td>align left</td><td class="test">align left</td></tr>
+<tr><td>align center</td><td class="test">align center</td></tr>
+<tr><td>align right</td><td class="test">align right</td></tr>
+<tr><td>volume</td><td class="test">volume</td></tr>
+<tr><td>volume down</td><td class="test">volume down</td></tr>
+<tr><td>volume up</td><td class="test">volume up</td></tr>
+<tr><td>zoom in</td><td class="test">zoom in</td></tr>
+<tr><td>zoom out</td><td class="test">zoom out</td></tr>
+<tr><td>heart</td><td class="test">heart</td></tr>
+<tr><td>heart empty</td><td class="test">heart empty</td></tr>
+</table>
+
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-features-two-stylesheets-crash.html b/testing/web-platform/tests/css/css-fonts/font-features-two-stylesheets-crash.html
new file mode 100644
index 0000000000..0e6490974c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-features-two-stylesheets-crash.html
@@ -0,0 +1,10 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>CSS Test: @font-feature-values crashes with two stylesheets</title>
+<link rel="author" href="mailto:sesse@chromium.org">
+<link rel="help" href="https://crbug.com/1444274">
+<meta http-equiv="Content-type" content="text/html; charset=utf-8">
+<style></style><iframe></iframe><style>@font-feature-values x {</style>
+</head>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-kerning-01-ref.html b/testing/web-platform/tests/css/css-fonts/font-kerning-01-ref.html
new file mode 100644
index 0000000000..7dbaebe0dd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-kerning-01-ref.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-kerning basic syntax support</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ .test {
+ margin: 20px;
+ width: 100px;
+ height: 100px;
+ background-color: green
+ }
+</style>
+<body>
+
+<p>Test passes if there is a green square, and no red. </p>
+<section class="test">
+
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-kerning-01.html b/testing/web-platform/tests/css/css-fonts/font-kerning-01.html
new file mode 100644
index 0000000000..6755500fd2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-kerning-01.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-kerning basic syntax support</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-kerning-01-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-kerning-prop">
+<meta name="assert" content="">
+<style>
+ .test {
+ margin: 20px;
+ width: 100px;
+ height: 100px;
+ background-color: red
+ }
+ @supports (font-kerning: auto) {
+ section.test { background-color: green; }
+ }
+</style>
+<body>
+
+<p>Test passes if there is a green square, and no red. </p>
+<section class="test">
+
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-kerning-02-ref.html b/testing/web-platform/tests/css/css-fonts/font-kerning-02-ref.html
new file mode 100644
index 0000000000..b461f15905
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-kerning-02-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-kerning: normal; low-level equivalence test</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines of text below are identical, with one check mark (✓) followed by one cross (✗). </p>
+<section class="test">
+<p class="ref">AB</p>
+<p class="ref">AB</p>
+<p class="ref">AB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-kerning-02.html b/testing/web-platform/tests/css/css-fonts/font-kerning-02.html
new file mode 100644
index 0000000000..1990cfc2dd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-kerning-02.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-kerning: normal; low-level equivalence test</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-kerning-02-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-kerning-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<meta name="assert" content="When kerning is enabled, the OpenType kern feature is enabled">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+ .high {
+ font-kerning: normal;
+ }
+ .low {
+ font-feature-settings: "kern" on;
+ }
+
+</style>
+<body>
+
+<p>Test passes if the three lines of text below are identical, with one check mark (✓) followed by one cross (✗). </p>
+<section class="test">
+<p class="high">¿À</p>
+<p class="low">¿À</p>
+<p class="ref">AB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-kerning-03-ref.html b/testing/web-platform/tests/css/css-fonts/font-kerning-03-ref.html
new file mode 100644
index 0000000000..96040a57ee
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-kerning-03-ref.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-kerning: normal; low-level equivalence test</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ writing-mode: vertical-rl;
+ text-orientation: upright;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines of <em>vertical</em> text below are identical, with one cross (✗) followed by one check mark (✓). </p>
+<section class="test">
+<p class="ref">BA</p>
+<p class="ref">BA</p>
+<p class="ref">BA</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-kerning-03.html b/testing/web-platform/tests/css/css-fonts/font-kerning-03.html
new file mode 100644
index 0000000000..550f26ebc7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-kerning-03.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-kerning: normal; low-level equivalence test</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-kerning-03-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-kerning-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<meta name="assert" content="(for vertical text runs the vkrn feature is enabled instead)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ writing-mode: vertical-rl;
+ text-orientation: upright;
+ }
+ .high {
+ font-kerning: normal;
+ }
+ .low {
+ font-feature-settings: "vkrn" on;
+ }
+
+</style>
+<body>
+
+<p>Test passes if the three lines of <em>vertical</em> text below are identical, with one cross (✗) followed by one check mark (✓). </p>
+<section class="test">
+<p class="high">¿À</p>
+<p class="low">¿À</p>
+<p class="ref">BA</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-kerning-04-ref.html b/testing/web-platform/tests/css/css-fonts/font-kerning-04-ref.html
new file mode 100644
index 0000000000..6e1110a173
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-kerning-04-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-kerning: none; low-level equivalence test</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines of text below are identical, with two crosses (✗). </p>
+<section class="test">
+<p class="ref">BB</p>
+<p class="ref">BB</p>
+<p class="ref">BB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-kerning-04.html b/testing/web-platform/tests/css/css-fonts/font-kerning-04.html
new file mode 100644
index 0000000000..e4e8e09ff5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-kerning-04.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-kerning: none; low-level equivalence test</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-kerning-04-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-kerning-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<meta name="assert" content="When kerning is disabled, the OpenType kern feature is disabled">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+ .high {
+ font-kerning: none;
+ }
+ .low {
+ font-feature-settings: "kern" off, "vkrn" off;
+ }
+
+</style>
+<body>
+
+<p>Test passes if the three lines of text below are identical, with two crosses (✗). </p>
+<section class="test">
+<p class="high">¿À</p>
+<p class="low">¿À</p>
+<p class="ref">BB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-kerning-05-ref.html b/testing/web-platform/tests/css/css-fonts/font-kerning-05-ref.html
new file mode 100644
index 0000000000..0b3d0d5524
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-kerning-05-ref.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-kerning: none; low-level equivalence test</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ writing-mode: vertical-rl;
+ text-orientation: upright;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines of <em>vertical</em> text below are identical, with two crosses (✗). </p>
+<section class="test">
+<p class="ref">BB</p>
+<p class="ref">BB</p>
+<p class="ref">BB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-kerning-05.html b/testing/web-platform/tests/css/css-fonts/font-kerning-05.html
new file mode 100644
index 0000000000..4faf67de22
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-kerning-05.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-kerning: none; low-level equivalence test</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-kerning-05-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-kerning-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<meta name="assert" content="(for vertical text runs the vkrn feature is disabled instead)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ writing-mode: vertical-rl;
+ text-orientation: upright;
+ }
+ .high {
+ font-kerning: none;
+ }
+ .low {
+ font-feature-settings: "kern" off, "vkrn" off;
+ }
+
+</style>
+<body>
+
+<p>Test passes if the three lines of <em>vertical</em> text below are identical, with two crosses (✗). </p>
+<section class="test">
+<p class="high">¿À</p>
+<p class="low">¿À</p>
+<p class="ref">BB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-language-override-01-ref.html b/testing/web-platform/tests/css/css-fonts/font-language-override-01-ref.html
new file mode 100644
index 0000000000..81170c88b8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-language-override-01-ref.html
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>CSS Test reference</title>
+<style>
+@font-face {
+ font-family: Libertine;
+ src: url(support/fonts/LinLibertine_Re-4.7.5.woff);
+}
+body {
+ font-family: sans-serif;
+}
+div {
+ margin: 1em;
+ font: 32px Libertine;
+}
+.ref {
+ font-feature-settings: "liga" 0;
+}
+</style>
+</head>
+<body>
+<p>Test passes if the "fi" below does NOT form a ligature:
+<div class=ref>fi</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-language-override-01.html b/testing/web-platform/tests/css/css-fonts/font-language-override-01.html
new file mode 100644
index 0000000000..51826794e3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-language-override-01.html
@@ -0,0 +1,31 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>CSS Test: font-language-override</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-language-override-prop"/>
+<link rel="match" href="font-language-override-01-ref.html"/>
+<meta name="assert" content="the specified OpenType language system should be used"/>
+<style>
+@font-face {
+ font-family: Libertine;
+ src: url(support/fonts/LinLibertine_Re-4.7.5.woff);
+}
+body {
+ font-family: sans-serif;
+}
+div {
+ margin: 1em;
+ font: 32px Libertine;
+}
+.test {
+ font-language-override: "TRK";
+}
+</style>
+</head>
+<body>
+<p>Test passes if the "fi" below does NOT form a ligature:
+<div class=test>fi</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-language-override-02-notref.html b/testing/web-platform/tests/css/css-fonts/font-language-override-02-notref.html
new file mode 100644
index 0000000000..d817983f90
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-language-override-02-notref.html
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>CSS Test reference</title>
+<style>
+@font-face {
+ font-family: Libertine;
+ src: url(support/fonts/LinLibertine_Re-4.7.5.woff);
+}
+body {
+ font-family: sans-serif;
+}
+div {
+ margin: 1em;
+ font: 32px Libertine;
+}
+.notref {
+ font-feature-settings: "liga" 0;
+}
+</style>
+</head>
+<body>
+<p>Test passes if the "fi" below DOES form a ligature:
+<div class=notref>fi</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-language-override-02-ref.html b/testing/web-platform/tests/css/css-fonts/font-language-override-02-ref.html
new file mode 100644
index 0000000000..77154ed49a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-language-override-02-ref.html
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>CSS Test reference</title>
+<style>
+@font-face {
+ font-family: Libertine;
+ src: url(support/fonts/LinLibertine_Re-4.7.5.woff);
+}
+body {
+ font-family: sans-serif;
+}
+div {
+ margin: 1em;
+ font: 32px Libertine;
+}
+.ref {
+ font-feature-settings: "liga" 1;
+}
+</style>
+</head>
+<body>
+<p>Test passes if the "fi" below DOES form a ligature:
+<div class=ref>fi</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-language-override-02.html b/testing/web-platform/tests/css/css-fonts/font-language-override-02.html
new file mode 100644
index 0000000000..3f05c9e97e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-language-override-02.html
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML>
+<html lang="tr">
+<head>
+<meta charset="utf-8"/>
+<title>CSS Test: font-language-override</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-language-override-prop"/>
+<link rel="match" href="font-language-override-02-ref.html"/>
+<link rel="mismatch" href="font-language-override-02-notref.html"/>
+<meta name="assert" content="the specified OpenType language system should be used"/>
+<style>
+@font-face {
+ font-family: Libertine;
+ src: url(support/fonts/LinLibertine_Re-4.7.5.woff);
+}
+body {
+ font-family: sans-serif;
+}
+div {
+ margin: 1em;
+ font: 32px Libertine;
+}
+.test {
+ font-language-override: "DEU";
+}
+</style>
+</head>
+<body>
+<p>Test passes if the "fi" below DOES form a ligature:
+<div class=test>fi</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-language-override-03.html b/testing/web-platform/tests/css/css-fonts/font-language-override-03.html
new file mode 100644
index 0000000000..5bda1d7a01
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-language-override-03.html
@@ -0,0 +1,31 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<title>CSS Test: font-language-override</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-language-override-prop"/>
+<link rel="match" href="font-language-override-02-ref.html"/>
+<meta name="assert" content="the specified OpenType language system should be used"/>
+<style>
+@font-face {
+ font-family: Libertine;
+ src: url(support/fonts/LinLibertine_Re-4.7.5.woff);
+}
+body {
+ font-family: sans-serif;
+}
+div {
+ margin: 1em;
+ font: 32px Libertine;
+}
+.test {
+ font-language-override: "trk"; /* NOT the tag for Turkish */
+}
+</style>
+</head>
+<body>
+<p>Test passes if the "fi" below DOES form a ligature:
+<div class=test>fi</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-10-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-10-ref.html
new file mode 100644
index 0000000000..9d1454cc33
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-10-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 0;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-10.html b/testing/web-platform/tests/css/css-fonts/font-palette-10.html
new file mode 100644
index 0000000000..83b1dd917b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-10.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="font-palette-10-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: normal;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-11-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-11-ref.html
new file mode 100644
index 0000000000..41ab181328
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-11-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: light;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-11.html b/testing/web-platform/tests/css/css-fonts/font-palette-11.html
new file mode 100644
index 0000000000..5c62968e86
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-11.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="font-palette-11-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: light;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-12-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-12-ref.html
new file mode 100644
index 0000000000..a30cb38778
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-12-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: dark;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-12.html b/testing/web-platform/tests/css/css-fonts/font-palette-12.html
new file mode 100644
index 0000000000..be3a593569
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-12.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="font-palette-12-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: dark;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-13-notref.html b/testing/web-platform/tests/css/css-fonts/font-palette-13-notref.html
new file mode 100644
index 0000000000..7ff3f7d80b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-13-notref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 7;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-13.html b/testing/web-platform/tests/css/css-fonts/font-palette-13.html
new file mode 100644
index 0000000000..9d7cc21d92
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-13.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="mismatch" href="font-palette-13-notref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 6;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-14-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-14-ref.html
new file mode 100644
index 0000000000..2c1f2a7faa
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-14-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 2;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-14.html b/testing/web-platform/tests/css/css-fonts/font-palette-14.html
new file mode 100644
index 0000000000..da3d3ebd1a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-14.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="font-palette-14-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: light;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-15-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-15-ref.html
new file mode 100644
index 0000000000..ae75b37048
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-15-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 3;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-15.html b/testing/web-platform/tests/css/css-fonts/font-palette-15.html
new file mode 100644
index 0000000000..2fb28993bc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-15.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="font-palette-15-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: dark;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-16-notref.html b/testing/web-platform/tests/css/css-fonts/font-palette-16-notref.html
new file mode 100644
index 0000000000..a30cb38778
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-16-notref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: dark;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-16.html b/testing/web-platform/tests/css/css-fonts/font-palette-16.html
new file mode 100644
index 0000000000..a28ba4bb13
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-16.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="mismatch" href="font-palette-16-notref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: light;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-17-notref.html b/testing/web-platform/tests/css/css-fonts/font-palette-17-notref.html
new file mode 100644
index 0000000000..7ff3f7d80b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-17-notref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 7;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-17.html b/testing/web-platform/tests/css/css-fonts/font-palette-17.html
new file mode 100644
index 0000000000..dcc6aa5b2e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-17.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="mismatch" href="font-palette-17-notref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: light;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-18-notref.html b/testing/web-platform/tests/css/css-fonts/font-palette-18-notref.html
new file mode 100644
index 0000000000..b584f25d6d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-18-notref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 6;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-18.html b/testing/web-platform/tests/css/css-fonts/font-palette-18.html
new file mode 100644
index 0000000000..441daebb9d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-18.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="mismatch" href="font-palette-18-notref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: dark;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-19-notref.html b/testing/web-platform/tests/css/css-fonts/font-palette-19-notref.html
new file mode 100644
index 0000000000..60e3437b4b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-19-notref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-19.html b/testing/web-platform/tests/css/css-fonts/font-palette-19.html
new file mode 100644
index 0000000000..abc70c9c3a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-19.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="mismatch" href="font-palette-19-notref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ override-colors: 7 #00FF00;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-2-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-2-ref.html
new file mode 100644
index 0000000000..1cb2fd3259
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-2-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 3;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-2.html b/testing/web-platform/tests/css/css-fonts/font-palette-2.html
new file mode 100644
index 0000000000..960c683ae1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-2.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="font-palette-2-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: dark;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-20-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-20-ref.html
new file mode 100644
index 0000000000..2c1f2a7faa
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-20-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 2;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-20.html b/testing/web-platform/tests/css/css-fonts/font-palette-20.html
new file mode 100644
index 0000000000..3fbdab80af
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-20.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="font-palette-20-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ override-colors: 3 #FF00FF, 7 #FF0000;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-21-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-21-ref.html
new file mode 100644
index 0000000000..f7e3a7f4c1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-21-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ override-colors: 3 #FF00FF;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-21.html b/testing/web-platform/tests/css/css-fonts/font-palette-21.html
new file mode 100644
index 0000000000..75709ccdc6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-21.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="font-palette-21-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ override-colors: 3 #FF0000, 3 #FF00FF;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-22-notref.html b/testing/web-platform/tests/css/css-fonts/font-palette-22-notref.html
new file mode 100644
index 0000000000..e10d9ebb64
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-22-notref.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 2;
+ override-colors: 3 #FF00FF;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-22.html b/testing/web-platform/tests/css/css-fonts/font-palette-22.html
new file mode 100644
index 0000000000..ca2457e008
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-22.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="mismatch" href="font-palette-22-notref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 1;
+ override-colors: 3 #FF00FF;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-23-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-23-ref.html
new file mode 100644
index 0000000000..f7e3a7f4c1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-23-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ override-colors: 3 #FF00FF;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-23.html b/testing/web-platform/tests/css/css-fonts/font-palette-23.html
new file mode 100644
index 0000000000..1217b0fcae
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-23.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="font-palette-23-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ override-colors: 99999 #FF0000, 3 #FF00FF;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-24-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-24-ref.html
new file mode 100644
index 0000000000..9d1454cc33
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-24-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 0;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-24.html b/testing/web-platform/tests/css/css-fonts/font-palette-24.html
new file mode 100644
index 0000000000..57607d9791
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-24.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="font-palette-24-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 99999;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-25-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-25-ref.html
new file mode 100644
index 0000000000..d6afa3c5af
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-25-ref.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font-no-light-dark.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: normal;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-25.html b/testing/web-platform/tests/css/css-fonts/font-palette-25.html
new file mode 100644
index 0000000000..2c58fb95e7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-25.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="font-palette-25-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font-no-light-dark.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: light;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-26-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-26-ref.html
new file mode 100644
index 0000000000..d6afa3c5af
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-26-ref.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font-no-light-dark.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: normal;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-26.html b/testing/web-platform/tests/css/css-fonts/font-palette-26.html
new file mode 100644
index 0000000000..29b86e015d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-26.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="font-palette-26-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font-no-light-dark.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: dark;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-27-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-27-ref.html
new file mode 100644
index 0000000000..507d85db78
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-27-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font-no-light-dark.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 0;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-27.html b/testing/web-platform/tests/css/css-fonts/font-palette-27.html
new file mode 100644
index 0000000000..928b956167
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-27.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="font-palette-27-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font-no-light-dark.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: light;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-28-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-28-ref.html
new file mode 100644
index 0000000000..507d85db78
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-28-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font-no-light-dark.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 0;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-28.html b/testing/web-platform/tests/css/css-fonts/font-palette-28.html
new file mode 100644
index 0000000000..a0b638f4ff
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-28.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="font-palette-27-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font-no-light-dark.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: dark;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-29-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-29-ref.html
new file mode 100644
index 0000000000..6c14d93e58
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-29-ref.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-face {
+ font-family: "COLR-test-font-no-light-dark";
+ src: url("resources/COLR-palettes-test-font-no-light-dark.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette1 {
+ font-family: "COLR-test-font";
+ base-palette: 3;
+}
+
+@font-palette-values --MyPalette2 {
+ font-family: "COLR-test-font-no-light-dark";
+ base-palette: 1;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font-size: 48px;"><span style="font-family: 'COLR-test-font'; font-palette: --MyPalette1;">A</span><span style="font-family: 'COLR-test-font-no-light-dark'; font-palette: --MyPalette2;">A</span></div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-29.html b/testing/web-platform/tests/css/css-fonts/font-palette-29.html
new file mode 100644
index 0000000000..56e136f32d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-29.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="font-palette-29-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-face {
+ font-family: "COLR-test-font-no-light-dark";
+ src: url("resources/COLR-palettes-test-font-no-light-dark.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 3;
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font-no-light-dark";
+ base-palette: 1;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font-size: 48px; font-palette: --MyPalette;"><span style="font-family: 'COLR-test-font';">A</span><span style="font-family: 'COLR-test-font-no-light-dark';">A</span></div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-3-notref.html b/testing/web-platform/tests/css/css-fonts/font-palette-3-notref.html
new file mode 100644
index 0000000000..31dbd232ef
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-3-notref.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font';">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-3.html b/testing/web-platform/tests/css/css-fonts/font-palette-3.html
new file mode 100644
index 0000000000..9599b3cf84
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-3.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="mismatch" href="font-palette-3-notref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: light;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-30-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-30-ref.html
new file mode 100644
index 0000000000..dc7814994b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-30-ref.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font1";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-face {
+ font-family: "COLR-test-font2";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette1 {
+ font-family: "COLR-test-font1";
+ base-palette: 3;
+}
+
+@font-palette-values --MyPalette2 {
+ font-family: "COLR-test-font2";
+ base-palette: 2;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font-size: 48px;"><div style="display: inline-block; width: 1px; height: 100px;"></div><span style="font-family: 'COLR-test-font1'; font-palette: --MyPalette1;">A</span><span style="font-family: 'COLR-test-font2'; font-palette: --MyPalette2;">A</span></div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-30.html b/testing/web-platform/tests/css/css-fonts/font-palette-30.html
new file mode 100644
index 0000000000..ea9c907613
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-30.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="font-palette-30-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette1 {
+ font-family: "COLR-test-font";
+ base-palette: 3;
+}
+
+@font-palette-values --MyPalette2 {
+ font-family: "COLR-test-font";
+ base-palette: 2;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font';"><div style="display: inline-block; width: 1px; height: 100px;"></div><span style="font-palette: --MyPalette1;">A</span><span style="font-palette: --MyPalette2;">A</span></div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-31-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-31-ref.html
new file mode 100644
index 0000000000..2475be9769
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-31-ref.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette1 {
+ font-family: "COLR-test-font";
+ base-palette: 5;
+}
+
+@font-palette-values --MyPalette2 {
+ font-family: "COLR-test-font";
+ base-palette: 2;
+}
+</style>
+</head>
+<body>
+<div style="font: 48px 'COLR-test-font';"><span style="font-palette: --MyPalette1;">A</span><span style="font-palette: --MyPalette2;">BCDEF</span></div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-31.html b/testing/web-platform/tests/css/css-fonts/font-palette-31.html
new file mode 100644
index 0000000000..26f47a9ee6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-31.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="font-palette-31-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font1";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+ unicode-range: U+41;
+}
+
+@font-face {
+ font-family: "COLR-test-font2";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font1";
+ base-palette: 5;
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font2";
+ base-palette: 2;
+}
+</style>
+</head>
+<body>
+<div style="font: 48px 'COLR-test-font1', 'COLR-test-font2', Helvetica; font-palette: --MyPalette;">ABCDEF</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-32-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-32-ref.html
new file mode 100644
index 0000000000..2c1f2a7faa
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-32-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 2;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-32.html b/testing/web-platform/tests/css/css-fonts/font-palette-32.html
new file mode 100644
index 0000000000..af6f62d485
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-32.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="font-palette-32-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 1;
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 2;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-33-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-33-ref.html
new file mode 100644
index 0000000000..2c1f2a7faa
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-33-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 2;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-33.html b/testing/web-platform/tests/css/css-fonts/font-palette-33.html
new file mode 100644
index 0000000000..afd094458c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-33.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="font-palette-33-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 1;
+}
+
+@font-palette-values --MyPalette {
+ font-family: "CoLr-tEsT-FoNt";
+ base-palette: 2;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-34-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-34-ref.html
new file mode 100644
index 0000000000..4fe9d815f8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-34-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 1;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-34.html b/testing/web-platform/tests/css/css-fonts/font-palette-34.html
new file mode 100644
index 0000000000..ebc80d780c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-34.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="font-palette-34-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 1;
+}
+
+@font-palette-values --MyPaLeTte {
+ font-family: "COLR-test-font";
+ base-palette: 2;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-35-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-35-ref.html
new file mode 100644
index 0000000000..45c5a9873e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-35-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Dominik Röttsches" href="mailto:drott@chromium.org">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ override-colors: 3 #FF0000, 7 #0000FF;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-35.html b/testing/web-platform/tests/css/css-fonts/font-palette-35.html
new file mode 100644
index 0000000000..bef0dcdd2d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-35.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Dominik Röttsches" href="mailto:drott@chromium.org">
+<link rel="match" href="font-palette-35-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ override-colors: 3 red, 7 blue;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-36-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-36-ref.html
new file mode 100644
index 0000000000..a82be2072a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-36-ref.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 2;
+}
+</style>
+</head>
+<body>
+<div style="font: 48px 'COLR-test-font'; font-palette: --MyPalette">A</div>
+<div style="font: 48px 'COLR-test-font'; font-palette: --MyPalette">A</div>
+<div style="font: 48px 'COLR-test-font'; font-palette: --MyPalette">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-36.html b/testing/web-platform/tests/css/css-fonts/font-palette-36.html
new file mode 100644
index 0000000000..8a0fd7f6b5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-36.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>font-palette multiple family-name and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="match" href="font-palette-36-ref.html">
+<meta name="assert" content="A single @font-palette-values can be applied to multiple font-families">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+@font-face {
+ font-family: "foo bar";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+@font-face {
+ font-family: foo;
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font", "foo bar", foo;
+ base-palette: light;
+}
+</style>
+</head>
+<body>
+<div style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+<div style="font: 48px foo; font-palette: --MyPalette;">A</div>
+<div style="font: 48px 'foo bar'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-4-notref.html b/testing/web-platform/tests/css/css-fonts/font-palette-4-notref.html
new file mode 100644
index 0000000000..31dbd232ef
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-4-notref.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font';">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-4.html b/testing/web-platform/tests/css/css-fonts/font-palette-4.html
new file mode 100644
index 0000000000..540ba25421
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-4.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="mismatch" href="font-palette-4-notref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: dark;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-5-notref.html b/testing/web-platform/tests/css/css-fonts/font-palette-5-notref.html
new file mode 100644
index 0000000000..8e7e85db73
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-5-notref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 5;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-5.html b/testing/web-platform/tests/css/css-fonts/font-palette-5.html
new file mode 100644
index 0000000000..7c5139daba
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-5.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="mismatch" href="font-palette-5-notref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: light;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-6-notref.html b/testing/web-platform/tests/css/css-fonts/font-palette-6-notref.html
new file mode 100644
index 0000000000..8e7e85db73
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-6-notref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 5;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-6.html b/testing/web-platform/tests/css/css-fonts/font-palette-6.html
new file mode 100644
index 0000000000..947716ab6b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-6.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="mismatch" href="font-palette-6-notref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: dark;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-7-notref.html b/testing/web-platform/tests/css/css-fonts/font-palette-7-notref.html
new file mode 100644
index 0000000000..69c19cb45d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-7-notref.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: light;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-7.html b/testing/web-platform/tests/css/css-fonts/font-palette-7.html
new file mode 100644
index 0000000000..253c7f4dd6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-7.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="mismatch" href="font-palette-7-notref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: dark;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-8-notref.html b/testing/web-platform/tests/css/css-fonts/font-palette-8-notref.html
new file mode 100644
index 0000000000..69c19cb45d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-8-notref.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: light;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-8.html b/testing/web-platform/tests/css/css-fonts/font-palette-8.html
new file mode 100644
index 0000000000..ce842ff794
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-8.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="mismatch" href="font-palette-8-notref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: normal;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-9-notref.html b/testing/web-platform/tests/css/css-fonts/font-palette-9-notref.html
new file mode 100644
index 0000000000..2af0737b67
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-9-notref.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: dark;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-9.html b/testing/web-platform/tests/css/css-fonts/font-palette-9.html
new file mode 100644
index 0000000000..e5e3915bb6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-9.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="mismatch" href="font-palette-9-notref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: normal;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-add-2-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-add-2-ref.html
new file mode 100644
index 0000000000..8dee069b3a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-add-2-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests that dynamically adding font-palette causes the necessary rendering update</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 1;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-add-2.html b/testing/web-platform/tests/css/css-fonts/font-palette-add-2.html
new file mode 100644
index 0000000000..1a9b00eaf1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-add-2.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<head>
+<meta charset="utf-8">
+<title>Tests that dynamically adding font-palette causes the necessary rendering update</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="font-palette-add-2-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 1;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font';">A</div>
+<script>
+let count = 0;
+function tick() {
+ if (count > 3) {
+ document.getElementById("target").style.setProperty("font-palette", "--MyPalette");
+ document.documentElement.classList.remove("reftest-wait");
+ } else {
+ ++count;
+ requestAnimationFrame(tick);
+ }
+}
+[...document.fonts][0].load().then(tick);
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-add-notref.html b/testing/web-platform/tests/css/css-fonts/font-palette-add-notref.html
new file mode 100644
index 0000000000..db06864cb3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-add-notref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests that dynamically adding font-palette causes the necessary rendering update</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 1;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font';">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-add.html b/testing/web-platform/tests/css/css-fonts/font-palette-add.html
new file mode 100644
index 0000000000..a38c619097
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-add.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<head>
+<meta charset="utf-8">
+<title>Tests that dynamically adding font-palette causes the necessary rendering update</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="mismatch" href="font-palette-add-notref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 1;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font';">A</div>
+<script>
+let count = 0;
+function tick() {
+ if (count > 3) {
+ document.getElementById("target").style.setProperty("font-palette", "--MyPalette");
+ document.documentElement.classList.remove("reftest-wait");
+ } else {
+ ++count;
+ requestAnimationFrame(tick);
+ }
+}
+[...document.fonts][0].load().then(tick);
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-empty-font-family-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-empty-font-family-ref.html
new file mode 100644
index 0000000000..e4f26eeb16
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-empty-font-family-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests that an empty font family name is handled correctly</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-family-2-desc">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 1;
+}
+</style>
+</head>
+<body>
+<div style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-empty-font-family.html b/testing/web-platform/tests/css/css-fonts/font-palette-empty-font-family.html
new file mode 100644
index 0000000000..eb69f8fbc8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-empty-font-family.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests that an empty font family name is handled correctly</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-family-2-desc">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="font-palette-empty-font-family-ref.html">
+<style>
+@font-face {
+ font-family: "";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "";
+ base-palette: 1;
+}
+</style>
+</head>
+<body>
+<div style="font: 48px ''; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-modify-2-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-modify-2-ref.html
new file mode 100644
index 0000000000..5573fad683
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-modify-2-ref.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests that dynamically modifying font-palette causes the necessary rendering update</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 1;
+}
+
+@font-palette-values --MyPalette2 {
+ font-family: "COLR-test-font";
+ base-palette: 0;
+ override-colors: 1 #00FF00;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette2;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-modify-2.html b/testing/web-platform/tests/css/css-fonts/font-palette-modify-2.html
new file mode 100644
index 0000000000..7a19924192
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-modify-2.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<head>
+<meta charset="utf-8">
+<title>Tests that dynamically modifying font-palette causes the necessary rendering update</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="font-palette-modify-2-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 1;
+}
+
+@font-palette-values --MyPalette2 {
+ font-family: "COLR-test-font";
+ base-palette: 0;
+ override-colors: 1 #00FF00;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+<script>
+let count = 0;
+function tick() {
+ if (count > 3) {
+ document.getElementById("target").style.setProperty("font-palette", "--MyPalette2");
+ document.documentElement.classList.remove("reftest-wait");
+ } else {
+ ++count;
+ requestAnimationFrame(tick);
+ }
+}
+[...document.fonts][0].load().then(tick);
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-modify-notref.html b/testing/web-platform/tests/css/css-fonts/font-palette-modify-notref.html
new file mode 100644
index 0000000000..170cd8baaf
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-modify-notref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests that dynamically modifying font-palette causes the necessary rendering update</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 1;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-modify.html b/testing/web-platform/tests/css/css-fonts/font-palette-modify.html
new file mode 100644
index 0000000000..49992ad8a1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-modify.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<head>
+<meta charset="utf-8">
+<title>Tests that dynamically modifying font-palette causes the necessary rendering update</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="mismatch" href="font-palette-modify-notref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 1;
+}
+
+@font-palette-values --MyPalette2 {
+ font-family: "COLR-test-font";
+ base-palette: 0;
+ /* Glyph 'A' uses palette indices 3 and 7. */
+ override-colors: 3 #00FF00;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+<script>
+let count = 0;
+function tick() {
+ if (count > 3) {
+ document.getElementById("target").style.setProperty("font-palette", "--MyPalette2");
+ document.documentElement.classList.remove("reftest-wait");
+ } else {
+ ++count;
+ requestAnimationFrame(tick);
+ }
+}
+[...document.fonts][0].load().then(tick);
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-non-ident-font-family-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-non-ident-font-family-ref.html
new file mode 100644
index 0000000000..42915d3a5f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-non-ident-font-family-ref.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests that a non-ident font family name is handled correctly</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-family-2-desc">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 1;
+}
+</style>
+</head>
+<body>
+<div style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-non-ident-font-family.html b/testing/web-platform/tests/css/css-fonts/font-palette-non-ident-font-family.html
new file mode 100644
index 0000000000..8d6ec751a3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-non-ident-font-family.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests that a non-ident font family name is handled correctly</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-family-2-desc">
+<link rel="author" title="Matthieu Dubet" href="mailto:m_dubet@apple.com">
+<link rel="match" href="font-palette-non-ident-font-family-ref.html">
+<style>
+@font-face {
+ font-family: "foo bar";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "foo bar";
+ base-palette: 1;
+}
+</style>
+</head>
+<body>
+<div style="font: 48px 'foo bar'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-ref.html
new file mode 100644
index 0000000000..79b3299f75
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 2;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-remove-2-ref.html b/testing/web-platform/tests/css/css-fonts/font-palette-remove-2-ref.html
new file mode 100644
index 0000000000..feb80c31d3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-remove-2-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests that dynamically removing font-palette causes the necessary rendering update</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 1;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font';">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-remove-2.html b/testing/web-platform/tests/css/css-fonts/font-palette-remove-2.html
new file mode 100644
index 0000000000..2cdb070a2c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-remove-2.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<head>
+<meta charset="utf-8">
+<title>Tests that dynamically removing font-palette causes the necessary rendering update</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="font-palette-remove-2-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 1;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+<script>
+let count = 0;
+function tick() {
+ if (count > 3) {
+ document.getElementById("target").style.removeProperty("font-palette");
+ document.documentElement.classList.remove("reftest-wait");
+ } else {
+ ++count;
+ requestAnimationFrame(tick);
+ }
+}
+[...document.fonts][0].load().then(tick);
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-remove-notref.html b/testing/web-platform/tests/css/css-fonts/font-palette-remove-notref.html
new file mode 100644
index 0000000000..b2c06f72be
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-remove-notref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests that dynamically removing font-palette causes the necessary rendering update</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 1;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-remove.html b/testing/web-platform/tests/css/css-fonts/font-palette-remove.html
new file mode 100644
index 0000000000..16b5acaec5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-remove.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<head>
+<meta charset="utf-8">
+<title>Tests that dynamically removing font-palette causes the necessary rendering update</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="mismatch" href="font-palette-remove-notref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 1;
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+<script>
+let count = 0;
+function tick() {
+ if (count > 3) {
+ document.getElementById("target").style.removeProperty("font-palette");
+ document.documentElement.classList.remove("reftest-wait");
+ } else {
+ ++count;
+ requestAnimationFrame(tick);
+ }
+}
+[...document.fonts][0].load().then(tick);
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette-vs-shorthand.html b/testing/web-platform/tests/css/css-fonts/font-palette-vs-shorthand.html
new file mode 100644
index 0000000000..fa8308ef00
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette-vs-shorthand.html
@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: interaction of font-palette and font shorthand</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-prop">
+<meta name="assert" content="font-palette is NOT reset to normal by font shorthand.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style id="style">
+@font-face {
+ font-family: colr;
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+div {
+ margin: 10px;
+}
+#a {
+ font: 50px colr;
+ font-palette: dark; /* should NOT cause the shorthand to be empty */
+}
+#b {
+ font-palette: dark;
+ font: 50px colr; /* should NOT reset font-palette to normal */
+}
+#c {
+ font-palette: dark;
+ font-size: 50px;
+ font-family: colr;
+}
+#d {
+ font-palette: dark;
+ font-size: 50px;
+ font-family: colr;
+ font-palette: normal;
+}
+</style>
+</head>
+<body>
+<p>The first three examples should use the 'dark' palette; the fourth, 'normal'.</p>
+<div id=a>A</div>
+<div id=b>A</div>
+<div id=c>A</div>
+<div id=d>A</div>
+<script>
+test(function() {
+ let testElem = document.getElementById("a");
+ let computed = window.getComputedStyle(testElem);
+ assert_equals(computed.fontPalette, "dark");
+ assert_not_equals(computed.font, "");
+ /* The exact form of the font shorthand varies, but should include these pieces: */
+ assert_not_equals(computed.font.indexOf("50px"), -1);
+ assert_not_equals(computed.font.indexOf("colr"), -1);
+ assert_equals(computed.fontFamily, "colr");
+ assert_equals(computed.fontSize, "50px");
+});
+
+test(function() {
+ let testElem = document.getElementById("b");
+ let computed = window.getComputedStyle(testElem);
+ assert_equals(computed.fontPalette, "dark");
+ assert_not_equals(computed.font, "");
+ assert_not_equals(computed.font.indexOf("50px"), -1);
+ assert_not_equals(computed.font.indexOf("colr"), -1);
+ assert_equals(computed.fontFamily, "colr");
+ assert_equals(computed.fontSize, "50px");
+});
+
+test(function() {
+ let testElem = document.getElementById("c");
+ let computed = window.getComputedStyle(testElem);
+ assert_equals(computed.fontPalette, "dark");
+ assert_not_equals(computed.font.indexOf("50px"), -1);
+ assert_not_equals(computed.font.indexOf("colr"), -1);
+ assert_equals(computed.fontFamily, "colr");
+ assert_equals(computed.fontSize, "50px");
+});
+
+test(function() {
+ let testElem = document.getElementById("d");
+ let computed = window.getComputedStyle(testElem);
+ assert_equals(computed.fontPalette, "normal");
+ assert_not_equals(computed.font.indexOf("50px"), -1);
+ assert_not_equals(computed.font.indexOf("colr"), -1);
+ assert_equals(computed.fontFamily, "colr");
+ assert_equals(computed.fontSize, "50px");
+});
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-palette.html b/testing/web-platform/tests/css/css-fonts/font-palette.html
new file mode 100644
index 0000000000..091df36431
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-palette.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests for font-palette and @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="font-palette-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<div id="target" style="font: 48px 'COLR-test-font'; font-palette: light;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-shorthand-serialization-001.html b/testing/web-platform/tests/css/css-fonts/font-shorthand-serialization-001.html
new file mode 100644
index 0000000000..e44cc7b7c8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-shorthand-serialization-001.html
@@ -0,0 +1,19 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test: font shorthand serialization</title>
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#propdef-font">
+<link rel="help" href="https://drafts.csswg.org/cssom/">
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/1564">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1436031">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div style="font: bold medium serif"></div>
+<script>
+test(function() {
+ assert_equals(
+ document.querySelector('div').style.font, "bold medium serif",
+ "Default values of the longhands don't get serialized on the font shorthand"
+ );
+}, "Default values of the longhands don't get serialized on the font shorthand");
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/font-shorthand-serialization-font-stretch.html b/testing/web-platform/tests/css/css-fonts/font-shorthand-serialization-font-stretch.html
new file mode 100644
index 0000000000..e39d6c6b19
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-shorthand-serialization-font-stretch.html
@@ -0,0 +1,87 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test: font shorthand serialization with font-stretch values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#propdef-font">
+<link rel="help" href="https://drafts.csswg.org/cssom-1/#serializing-css-values">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="test" style="font: medium serif"></div>
+<script>
+test(function() {
+ const div = document.getElementById("test");
+ div.style.fontStretch = "ultra-condensed";
+ assert_equals(div.style.fontStretch, "ultra-condensed");
+ assert_equals(div.style.font, "ultra-condensed medium serif");
+ div.style.fontStretch = "extra-condensed";
+ assert_equals(div.style.fontStretch, "extra-condensed");
+ assert_equals(div.style.font, "extra-condensed medium serif");
+ div.style.fontStretch = "condensed";
+ assert_equals(div.style.fontStretch, "condensed");
+ assert_equals(div.style.font, "condensed medium serif");
+ div.style.fontStretch = "semi-condensed";
+ assert_equals(div.style.fontStretch, "semi-condensed");
+ assert_equals(div.style.font, "semi-condensed medium serif");
+ div.style.fontStretch = "normal";
+ assert_equals(div.style.fontStretch, "normal");
+ assert_equals(div.style.font, "medium serif", "The keyword normal should be omitted");
+ div.style.fontStretch = "semi-expanded";
+ assert_equals(div.style.fontStretch, "semi-expanded");
+ assert_equals(div.style.font, "semi-expanded medium serif");
+ div.style.fontStretch = "expanded";
+ assert_equals(div.style.fontStretch, "expanded");
+ assert_equals(div.style.font, "expanded medium serif");
+ div.style.fontStretch = "extra-expanded";
+ assert_equals(div.style.fontStretch, "extra-expanded");
+ assert_equals(div.style.font, "extra-expanded medium serif");
+ div.style.fontStretch = "ultra-expanded";
+ assert_equals(div.style.fontStretch, "ultra-expanded");
+ assert_equals(div.style.font, "ultra-expanded medium serif");
+}, "Keywords should appear in serialization of font and fontStretch");
+
+test(function() {
+ const div = document.getElementById("test");
+ div.style.fontStretch = "50%";
+ assert_equals(div.style.fontStretch, "50%");
+ assert_equals(div.style.font, "ultra-condensed medium serif");
+ div.style.fontStretch = "62.5%";
+ assert_equals(div.style.fontStretch, "62.5%");
+ assert_equals(div.style.font, "extra-condensed medium serif");
+ div.style.fontStretch = "75%";
+ assert_equals(div.style.fontStretch, "75%");
+ assert_equals(div.style.font, "condensed medium serif");
+ div.style.fontStretch = "87.5%";
+ assert_equals(div.style.fontStretch, "87.5%");
+ assert_equals(div.style.font, "semi-condensed medium serif");
+ div.style.fontStretch = "100%";
+ assert_equals(div.style.fontStretch, "100%");
+ assert_equals(div.style.font, "medium serif", "The keyword normal should be omitted");
+ div.style.fontStretch = "112.5%";
+ assert_equals(div.style.fontStretch, "112.5%");
+ assert_equals(div.style.font, "semi-expanded medium serif");
+ div.style.fontStretch = "125%";
+ assert_equals(div.style.fontStretch, "125%");
+ assert_equals(div.style.font, "expanded medium serif");
+ div.style.fontStretch = "150%";
+ assert_equals(div.style.fontStretch, "150%");
+ assert_equals(div.style.font, "extra-expanded medium serif");
+ div.style.fontStretch = "200%";
+ assert_equals(div.style.fontStretch, "200%");
+ assert_equals(div.style.font, "ultra-expanded medium serif");
+ div.style.fontStretch = "50.00000%";
+ assert_equals(div.style.fontStretch, "50%");
+ assert_equals(div.style.font, "ultra-condensed medium serif");
+}, "Percentages which can be transformed into keywords should be for serialization of font, but not of fontStretch");
+
+test(function() {
+ const div = document.getElementById("test");
+ div.style.fontStretch = "25%";
+ assert_equals(div.style.fontStretch, "25%");
+ assert_equals(div.style.font, "");
+ div.style.fontStretch = "101%";
+ assert_equals(div.style.fontStretch, "101%");
+ assert_equals(div.style.font, "");
+ div.style.fontStretch = "50.01%";
+ assert_equals(div.style.fontStretch, "50.01%");
+ assert_equals(div.style.font, "");
+}, "Percentages which cannot be transformed into keywords should prevent the font shorthand from serializing, but not fontStretch");
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/font-shorthand-serialization-prevention.html b/testing/web-platform/tests/css/css-fonts/font-shorthand-serialization-prevention.html
new file mode 100644
index 0000000000..f6a1ea9e61
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-shorthand-serialization-prevention.html
@@ -0,0 +1,96 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test: font shorthand serialization prevention for font subproperty values the shorthand cannot express</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#propdef-font">
+<link rel="help" href="https://drafts.csswg.org/cssom-1/#serializing-css-values">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="test"></div>
+<script>
+
+function is_property_supported(property) {
+ const element = document.getElementById('test')
+ element.style = ''
+ element.style = property + ': initial'
+ return element.style[property] == 'initial'
+}
+
+function overwrite_font_shorthand(property, value) {
+ const element = document.getElementById('test')
+ element.style = ''
+ element.style.font = '16px serif'
+ element.style[property] = value
+}
+
+function test_font_shorthand_specified_serializable_after_setting_subproperty(property, value) {
+ test(() => {
+ overwrite_font_shorthand(property, value)
+ assert_not_equals(document.getElementById('test').style.font, '')
+ }, 'Setting ' + property + ' to ' + value + ' should not prevent the font shorthand from serializing in specified style')
+}
+
+function test_font_shorthand_computed_serializable_after_setting_subproperty(property, value) {
+ test(() => {
+ overwrite_font_shorthand(property, value)
+ assert_not_equals(getComputedStyle(document.getElementById('test')).font, '')
+ }, 'Setting ' + property + ' to ' + value + ' should not prevent the font shorthand from serializing in computed style')
+}
+
+function test_font_shorthand_specified_unserializable_after_setting_subproperty(property, value) {
+ test(() => {
+ overwrite_font_shorthand(property, value)
+ assert_equals(document.getElementById('test').style.font, '')
+ }, 'Setting ' + property + ' to ' + value + ' should prevent the font shorthand from serializing in specified style')
+}
+
+function test_font_shorthand_computed_unserializable_after_setting_subproperty(property, value) {
+ test(() => {
+ overwrite_font_shorthand(property, value)
+ assert_equals(getComputedStyle(document.getElementById('test')).font, '')
+ }, 'Setting ' + property + ' to ' + value + ' should prevent the font shorthand from serializing in computed style')
+}
+
+function test_font_shorthand_serializable_after_setting_subproperty(property, value) {
+ test_font_shorthand_specified_serializable_after_setting_subproperty(property, value)
+ test_font_shorthand_computed_serializable_after_setting_subproperty(property, value)
+}
+
+function test_font_shorthand_unserializable_after_setting_subproperty(property, value) {
+ test_font_shorthand_specified_unserializable_after_setting_subproperty(property, value)
+ test_font_shorthand_computed_unserializable_after_setting_subproperty(property, value)
+}
+
+function test_font_shorthand_serialization_after_setting_subproperty(property, defaultValue, otherValue) {
+ if (!is_property_supported(property))
+ return
+ const keywords = [ 'initial', 'inherit', 'unset', 'revert', 'revert-layer' ]
+ keywords.forEach(keyword => {
+ test_font_shorthand_specified_unserializable_after_setting_subproperty(property, keyword)
+ test_font_shorthand_computed_serializable_after_setting_subproperty(property, keyword)
+ });
+ test_font_shorthand_serializable_after_setting_subproperty(property, defaultValue)
+ test_font_shorthand_unserializable_after_setting_subproperty(property, otherValue)
+}
+
+test_font_shorthand_serializable_after_setting_subproperty('font-family', 'sans-serif')
+
+test_font_shorthand_serialization_after_setting_subproperty('font-variant', 'normal', 'none')
+test_font_shorthand_serializable_after_setting_subproperty('font-variant', 'small-caps')
+test_font_shorthand_unserializable_after_setting_subproperty('font-variant', 'all-small-caps')
+
+test_font_shorthand_serialization_after_setting_subproperty('font-variant-caps', 'small-caps', 'all-small-caps')
+test_font_shorthand_serialization_after_setting_subproperty('font-stretch', 'normal', '95%')
+test_font_shorthand_serialization_after_setting_subproperty('font-size-adjust', 'none', '0')
+test_font_shorthand_serialization_after_setting_subproperty('font-kerning', 'auto', 'normal')
+test_font_shorthand_serialization_after_setting_subproperty('font-variant-ligatures', 'normal', 'none')
+test_font_shorthand_serialization_after_setting_subproperty('font-variant-position', 'normal', 'sub')
+test_font_shorthand_serialization_after_setting_subproperty('font-variant-numeric', 'normal', 'ordinal')
+test_font_shorthand_serialization_after_setting_subproperty('font-variant-alternates', 'normal', 'historical-forms')
+test_font_shorthand_serialization_after_setting_subproperty('font-variant-east-asian', 'normal', 'full-width')
+test_font_shorthand_serialization_after_setting_subproperty('font-variant-emoji', 'normal', 'text')
+test_font_shorthand_serialization_after_setting_subproperty('font-feature-settings', 'normal', '"sinf"')
+test_font_shorthand_serialization_after_setting_subproperty('font-language-override', 'normal', '"SRB"')
+test_font_shorthand_serialization_after_setting_subproperty('font-optical-sizing', 'auto', 'none')
+test_font_shorthand_serialization_after_setting_subproperty('font-variation-settings', 'normal', '"aaaa" 1')
+
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/font-shorthand-subproperties-reset.html b/testing/web-platform/tests/css/css-fonts/font-shorthand-subproperties-reset.html
new file mode 100644
index 0000000000..4ed91e8fd3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-shorthand-subproperties-reset.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: Resetting font shorthand subproperties</title>
+<link rel="author" title="Munira Tursunova" href="moonira@google.com">
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-prop">
+<meta name="assert" content="All subproperties of the font property are first reset to their initial values.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="test"></div>
+<script>
+
+function set_font_subproperty(property, value) {
+ const element = document.getElementById('test')
+ element.style = ''
+ element.style[property] = value
+}
+
+function test_font_shorthand_resetting_subproperty(property, newValue) {
+ if (!CSS.supports(property, newValue))
+ return
+ test(() => {
+ let testElem = document.getElementById('test');
+ let computed = window.getComputedStyle(testElem);
+ let initialValue = computed[property];
+ set_font_subproperty(property, newValue);
+ document.getElementById('test').style.font = '16px serif';
+ assert_equals(computed[property], initialValue);
+ assert_not_equals(computed.font, "");
+ }, 'Property ' + property + ' should be reset to its initial value.')
+}
+
+test_font_shorthand_resetting_subproperty('font-size-adjust', '0')
+test_font_shorthand_resetting_subproperty('font-kerning', 'normal')
+test_font_shorthand_resetting_subproperty('font-variant-caps', 'all-small-caps')
+test_font_shorthand_resetting_subproperty('font-variant-ligatures', 'none')
+test_font_shorthand_resetting_subproperty('font-variant-position', 'sub')
+test_font_shorthand_resetting_subproperty('font-variant-numeric', 'ordinal')
+test_font_shorthand_resetting_subproperty('font-variant-alternates', 'historical-forms')
+test_font_shorthand_resetting_subproperty('font-variant-east-asian', 'full-width')
+test_font_shorthand_resetting_subproperty('font-variant-emoji', 'text')
+test_font_shorthand_resetting_subproperty('font-feature-settings', '"sinf"')
+test_font_shorthand_resetting_subproperty('font-language-override', '"SRB"')
+test_font_shorthand_resetting_subproperty('font-optical-sizing', 'none')
+test_font_shorthand_resetting_subproperty('font-variation-settings', '"aaaa" 1')
+
+</script> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-001-ref.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-001-ref.html
new file mode 100644
index 0000000000..609e8d1d4b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-001-ref.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Fonts Reference: font-size-adjust - greater than aspect value of font</title>
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+ div {
+ position: absolute;
+ font: 40px/40px Ahem;
+ color: orange;
+ }
+ #test {
+ color: blue;
+ font-size: 45px;
+ }
+</style>
+<body>
+ <p>Test passes if the size of the blue rectangle is greater than the orange rectangle.</p>
+ <div id="test">FillerText</div>
+ <div>FillerText</div>
+</body>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-001.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-001.html
new file mode 100644
index 0000000000..1397d33f25
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-001.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Fonts Test: font-size-adjust - greater than aspect value of font</title>
+<link rel="author" title="Intel" href="http://www.intel.com/">
+<link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com">
+<link rel="help" title="3.6 Relative sizing: the font-size-adjust property" href="http://www.w3.org/TR/css-fonts-3/#font-size-adjust-prop">
+<meta name="flags" content="Ahem">
+<meta name="assert" content="Test checks that the actual font size is greater than the specified size when the value of font-size-adjust
+is greater than the aspect value of font">
+<link rel="match" href="font-size-adjust-001-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+ div {
+ position: absolute;
+ font: 40px/40px Ahem;
+ color: orange;
+ }
+ #test {
+ color: blue;
+ font-size-adjust: 0.9;
+ }
+</style>
+<body>
+ <p>Test passes if the size of the blue rectangle is greater than the orange rectangle.</p>
+ <div id="test">FillerText</div>
+ <div>FillerText</div>
+</body>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-002-ref.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-002-ref.html
new file mode 100644
index 0000000000..7bfa3bad5a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-002-ref.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Fonts Reference: font-size-adjust - less than aspect value of font</title>
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+ div {
+ position: absolute;
+ font: 40px/40px Ahem;
+ color: blue;
+ }
+ #test {
+ color: orange;
+ font-size: 10px;
+ }
+</style>
+<body>
+ <p>Test passes if the size of the blue rectangle is greater than the orange rectangle.</p>
+ <div>FillerText</div>
+ <div id="test">FillerText</div>
+</body>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-002.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-002.html
new file mode 100644
index 0000000000..e4d87538c8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-002.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Fonts Test: font-size-adjust - less than aspect value of font</title>
+<link rel="author" title="Intel" href="http://www.intel.com/">
+<link rel="author" title="Shiyou Tan" href="mailto:shiyoux.tan@intel.com">
+<link rel="help" title="3.6 Relative sizing: the font-size-adjust property" href="http://www.w3.org/TR/css-fonts-3/#font-size-adjust-prop">
+<link rel="match" href="font-size-adjust-002-ref.html">
+<meta name="flags" content="Ahem">
+<meta name="assert" content="Test checks that the actual font size is less than the specified size when the value of font-size-adjust
+is less than the aspect value of font">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+ div {
+ position: absolute;
+ font: 40px/40px Ahem;
+ color: blue;
+ }
+ #test {
+ color: orange;
+ font-size-adjust: 0.2;
+ }
+</style>
+<body>
+ <p>Test passes if the size of the blue rectangle is greater than the orange rectangle.</p>
+ <div>FillerText</div>
+ <div id="test">FillerText</div>
+</body>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-003.xht b/testing/web-platform/tests/css/css-fonts/font-size-adjust-003.xht
new file mode 100644
index 0000000000..1886ccc6bf
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-003.xht
@@ -0,0 +1,147 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+ <head>
+
+ <title>CSS Fonts Test: font-size-adjust - first available and installed font</title>
+
+ <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-size-adjust-prop" title="3.6 Relative sizing: the font-size-adjust property" />
+ <link rel="bookmark" href="http://lists.w3.org/Archives/Public/www-style/2013May/0384.html" title="[css3-fonts] font-size-adjust and em/ex values" />
+ <link rel="bookmark" href="https://code.google.com/p/chromium/issues/detail?id=451346" title="Issue 451346: Add support for font-size-adjust" />
+ <link rel="bookmark" href="https://bugs.webkit.org/show_bug.cgi?id=15257" title="Bug 15257: Support CSS 3 font-size-adjust" />
+
+ <!--
+ font-relative lengths are calculated against
+ the [computed? used?] font-size.
+
+ In situations where font fallback occurs, fallback fonts
+ may not share the same aspect ratio as the desired font
+ family and will thus appear less readable. The
+ font-size-adjust property is a way to preserve the
+ readability of text when font fallback occurs. It does
+ this by adjusting the font-size so that the x-height
+ is the same regardless of the font used.
+ http://lists.w3.org/Archives/Public/www-style/2013May/0384.html
+
+ "May I include your sample to my patch as a blink test case?"
+ https://code.google.com/p/chromium/issues/detail?id=451346#c6
+ Yes you can ... as long as my name is listed somewhere as the original author.
+ Gérard
+
+ It's "Oxygen-Sans" (with a hyphen!) and not "Oxygen Sans"
+ -->
+
+ <meta content="In this test, span.test's first 3 fallback fonts are unavailable and the next fallback fonts have a relatively big aspect value with regards to each fonts listed, declared in span.reference rule (0.450). This test checks that 'font-size-adjust' property adjusts the relative height of lowercase letters of available, installed fallback fonts listed, declared in span.test rule (0.530-0.545) to match the relative height of lowercase letters of fonts listed, declared in span.reference rule (0.450)." name="assert" />
+
+ <meta name="DC.date.created" content="2015-01-01T09:54:03+11:00" scheme="W3CDTF" />
+ <meta name="DC.date.modified" content="2017-03-22T09:54:03+11:00" scheme="W3CDTF" />
+
+ <style type="text/css"><![CDATA[
+ div.wrapper
+ {
+ font-size: 200px;
+ line-height: 1;
+ }
+ /*
+ The 'line-height: 1' declaration
+ is not part of the test. Its
+ sole purpose is to not increase
+ document box height unneedlessly.
+ */
+
+ img
+ {
+ height: 1px;
+ margin-right: -100%;
+ width: 100%;
+ }
+
+ img.top-x-height
+ {
+ vertical-align: 90px;
+ }
+ /* 200px mult by 0.450 == 90px */
+
+ img.baseline
+ {
+ vertical-align: -1px;
+ }
+ /*
+ We want the bottom green line to be flush with the bottom of
+ glyphs and not be overlapped by the bottom of glyphs. Therefore
+ this 'vertical-align: -1px' declaration.
+ */
+
+ span.test
+ {
+ font-family: uninstalled, notavailable, bogus, "DejaVu Sans", "Oxygen-Sans", "Liberation Sans", Verdana, Tahoma;
+ /*
+ This test presumes that the tester will have at least
+ one of the following font installed on his/her operating system:
+ "DejaVu Sans", "Oxygen-Sans", "Liberation Sans", Verdana, Tahoma
+ */
+ font-size-adjust: 0.450;
+ }
+
+ /*
+ List of 5 font faces with relatively big aspect values
+
+ DejaVu Sans' aspect value == 0.547
+ Oxygen-Sans' aspect value == 0.540
+ Liberation Sans' aspect value == 0.530
+ (DejaVu Sans, Oxygen-Sans and Liberation Sans are font
+ faces very often installed under Linux Debian-distributions)
+
+ Verdana's aspect value == 0.545
+ Tahoma's aspect value == 0.545
+ (Verdana and Tahoma are font faces very often pre-installed
+ under Windows operating systems.)
+ */
+
+ span.reference
+ {
+ font-family: Rachana, "Nimbus Roman No9 L", "Times New Roman";
+ }
+
+ /*
+ Rachana's aspect value == 0.450
+ Nimbus Roman No9 L's aspect value == 0.450
+ (Rachana and Nimbus Roman No9 L are font
+ faces often installed under Linux Debian-distributions)
+
+ Times New Roman's aspect value == 0.448
+ (Times New Roman is a font face is very often pre-installed
+ under Windows operating systems.)
+ */
+
+ /*
+ This test presumes that the tester will have at least
+ one of the following font installed on his/her operating system:
+ Rachana, "Nimbus Roman No9 L", "Times New Roman"
+ */
+ ]]></style>
+
+ </head>
+
+ <body>
+
+ <p>Test passes if each pair of "x" and "z" <strong>letters have the same height</strong>; the thin wide and bright green horizontal lines are not part of this test and only serve to help visually compare the height of tested pairs of letters.</p>
+
+ <div class="wrapper">
+ <img class="top-x-height" src="support/1x1-lime.png" alt="Image download support must be enabled" /><img class="baseline" src="support/1x1-lime.png" alt="Image download support must be enabled" />
+ <span class="test">x</span>
+
+ <span class="reference">x</span>
+ </div>
+
+ <div class="wrapper">
+ <img class="top-x-height" src="support/1x1-lime.png" alt="Image download support must be enabled" /><img class="baseline" src="support/1x1-lime.png" alt="Image download support must be enabled" />
+ <span class="test">z</span>
+
+ <span class="reference">z</span>
+ </div>
+
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-005.xht b/testing/web-platform/tests/css/css-fonts/font-size-adjust-005.xht
new file mode 100644
index 0000000000..4f73773f55
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-005.xht
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+ <head>
+
+ <title>CSS Fonts Test: font-size-adjust - 0 value implies a 0px used font-size</title>
+
+ <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-size-adjust-prop" title="3.6 Relative sizing: the font-size-adjust property" />
+ <link rel="bookmark" href="https://lists.w3.org/Archives/Public/www-style/2015Mar/0282.html" title="[css-fonts] What does font-size-adjust for '0' look like?" />
+ <link rel="bookmark" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1144885" title="Bug 1144885: font-size-adjust:0 interpreted as font-size-adjust:none " />
+ <link rel="match" href="../CSS2/reference/ref-if-there-is-no-red.xht" />
+
+ <meta content="ahem" name="flags" />
+ <meta content="This test checks that a 0 value implies that used font-size must be 0px." name="assert" />
+
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style type="text/css"><![CDATA[
+ div#zero-value-test
+ {
+ color: red;
+ font: 100px/1 Ahem; /* computes to 100px/100px */
+ font-size-adjust: 0;
+ }
+ ]]></style>
+
+ </head>
+
+ <body>
+
+ <p>Test passes if there is <strong>no red</strong>.</p>
+
+ <div id="zero-value-test">FAIL</div>
+
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-006.xht b/testing/web-platform/tests/css/css-fonts/font-size-adjust-006.xht
new file mode 100644
index 0000000000..0b96ff1c43
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-006.xht
@@ -0,0 +1,48 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+ <head>
+
+ <title>CSS Fonts Test: font-size-adjust - a percentage value is invalid</title>
+
+ <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-size-adjust-prop" title="3.6 Relative sizing: the font-size-adjust property" />
+ <link rel="bookmark" href="https://lists.w3.org/Archives/Public/www-style/2015Mar/0282.html" title="[css-fonts] What does font-size-adjust for '0' look like?" />
+ <link rel="match" href="../reference/ref-filled-green-100px-square.xht" />
+
+ <meta content="ahem invalid" name="flags" />
+ <meta content="This test checks that a percentage value is invalid and therefore must be ignored." name="assert" />
+
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style type="text/css"><![CDATA[
+ div#test-percent-value
+ {
+ color: green;
+ font: 100px/1 Ahem; /* computes to 100px/100px */
+ font-size-adjust: 50%;
+ }
+
+ div#reference-overlapped-red
+ {
+ background-color: red;
+ bottom: 100px;
+ height: 100px;
+ position: relative;
+ width: 100px;
+ z-index: -1;
+ }
+ ]]></style>
+
+ </head>
+
+ <body>
+
+ <p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+ <div id="test-percent-value">Z</div>
+
+ <div id="reference-overlapped-red"></div>
+
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-007.xht b/testing/web-platform/tests/css/css-fonts/font-size-adjust-007.xht
new file mode 100644
index 0000000000..0fd85c0105
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-007.xht
@@ -0,0 +1,48 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+ <head>
+
+ <title>CSS Fonts Test: font-size-adjust - 'auto' value is ignored</title>
+
+ <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-size-adjust-prop" title="3.6 Relative sizing: the font-size-adjust property" />
+ <link rel="bookmark" href="https://lists.w3.org/Archives/Public/www-style/2015Mar/0282.html" title="[css-fonts] What does font-size-adjust for '0' look like?" />
+ <link rel="match" href="../reference/ref-filled-green-100px-square.xht" />
+
+ <meta content="ahem invalid" name="flags" />
+ <meta content="This test checks that 'auto' does not apply to font-size-adjust and therefore must be ignored." name="assert" />
+
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style type="text/css"><![CDATA[
+ div#test-auto-value
+ {
+ color: green;
+ font: 100px/1 Ahem; /* computes to 100px/100px */
+ font-size-adjust: auto;
+ }
+
+ div#reference-overlapped-red
+ {
+ background-color: red;
+ bottom: 100px;
+ height: 100px;
+ position: relative;
+ width: 100px;
+ z-index: -1;
+ }
+ ]]></style>
+
+ </head>
+
+ <body>
+
+ <p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+ <div id="test-auto-value">A</div>
+
+ <div id="reference-overlapped-red"></div>
+
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-008.xht b/testing/web-platform/tests/css/css-fonts/font-size-adjust-008.xht
new file mode 100644
index 0000000000..cae02b35af
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-008.xht
@@ -0,0 +1,48 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+ <head>
+
+ <title>CSS Fonts Test: font-size-adjust - a negative value is invalid</title>
+
+ <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-size-adjust-prop" title="3.6 Relative sizing: the font-size-adjust property" />
+ <link rel="bookmark" href="https://lists.w3.org/Archives/Public/www-style/2015Mar/0282.html" title="[css-fonts] What does font-size-adjust for '0' look like?" />
+ <link rel="match" href="../reference/ref-filled-green-100px-square.xht" />
+
+ <meta content="ahem invalid" name="flags" />
+ <meta content="This test checks that a negative value is invalid and therefore must be ignored." name="assert" />
+
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style type="text/css"><![CDATA[
+ div#test-negative-value
+ {
+ color: green;
+ font: 100px/1 Ahem; /* computes to 100px/100px */
+ font-size-adjust: -0.5;
+ }
+
+ div#reference-overlapped-red
+ {
+ background-color: red;
+ bottom: 100px;
+ height: 100px;
+ position: relative;
+ width: 100px;
+ z-index: -1;
+ }
+ ]]></style>
+
+ </head>
+
+ <body>
+
+ <p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+ <div id="test-negative-value">N</div>
+
+ <div id="reference-overlapped-red"></div>
+
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-009-ref.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-009-ref.html
new file mode 100644
index 0000000000..2ee9d0a0c8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-009-ref.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Fonts Reference: font-size-adjust - two-value syntax</title>
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+ @font-face {
+ font-family: test;
+ src: url(/fonts/noto/noto-sans-v8-latin-regular.woff);
+ /* this font has a cap-height of 1462/2048 units */
+ }
+ div {
+ clear: left;
+ float: left;
+ font: 60px/120px test;
+ color: orange;
+ background: orange;
+ }
+ #test1 {
+ color: green;
+ background: green;
+ }
+ #test2 {
+ color: blue;
+ background: blue;
+ font-size: 90px;
+ }
+ #test3 {
+ color: magenta;
+ background: magenta;
+ font-size: 45px;
+ }
+</style>
+<body>
+ <p>Test passes if the size of the green rectangle matches the orange rectangle,
+ the blue rectangle is longer, and the magenta rectangle is shorter.</p>
+ <div>Filler Text</div>
+ <div id="test1">Filler Text</div>
+ <div id="test2">Filler Text</div>
+ <div id="test3">Filler Text</div>
+</body>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-009.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-009.html
new file mode 100644
index 0000000000..133f96f450
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-009.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Fonts Test: font-size-adjust - two-value syntax - using 'cap-height' as the basis for adjustment</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" title="2.6 Relative sizing: the font-size-adjust property"
+ href="https://drafts.csswg.org/css-fonts-4/#font-size-adjust-prop">
+<link rel="help" title="extend font-size-adjust to take a pair of values: <metric> <number>"
+ href="https://github.com/w3c/csswg-drafts/issues/6160">
+<meta name="assert" content="Test checks that font-size-adjust with the 'cap-height' metric works as expected">
+<link rel="match" href="font-size-adjust-009-ref.html">
+<style>
+ @font-face {
+ font-family: test;
+ src: url(/fonts/noto/noto-sans-v8-latin-regular.woff);
+ /* this font has a cap-height of 1462/2048 units */
+ }
+ div {
+ clear: left;
+ float: left;
+ font: 60px/120px test;
+ color: orange;
+ background: orange;
+ }
+ #test1 {
+ color: green;
+ background: green;
+ font-size-adjust: cap-height calc(1462 / 2048); /* should cause no change */
+ }
+ #test2 {
+ color: blue;
+ background: blue;
+ font-size-adjust: cap-height calc(1.5 * 1462 / 2048); /* should be 1.5 times larger */
+ }
+ #test3 {
+ color: magenta;
+ background: magenta;
+ font-size-adjust: cap-height calc(0.75 * 1462 / 2048); /* should be 0.75 times larger */
+ }
+</style>
+<body>
+ <p>Test passes if the size of the green rectangle matches the orange rectangle,
+ the blue rectangle is longer, and the magenta rectangle is shorter.</p>
+ <div>Filler Text</div>
+ <div id="test1">Filler Text</div>
+ <div id="test2">Filler Text</div>
+ <div id="test3">Filler Text</div>
+</body>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-010.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-010.html
new file mode 100644
index 0000000000..c3b2bc195e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-010.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Fonts Test: font-size-adjust - two-value syntax - using 'ch-width' as the basis for adjustment</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" title="2.6 Relative sizing: the font-size-adjust property"
+ href="https://drafts.csswg.org/css-fonts-4/#font-size-adjust-prop">
+<link rel="help" title="extend font-size-adjust to take a pair of values: <metric> <number>"
+ href="https://github.com/w3c/csswg-drafts/issues/6160">
+<meta name="assert" content="Test checks that font-size-adjust with the 'ch-width' metric works as expected">
+<link rel="match" href="font-size-adjust-009-ref.html">
+<style>
+ @font-face {
+ font-family: test;
+ src: url(/fonts/noto/noto-sans-v8-latin-regular.woff);
+ /* this font has a 'zero' width (and therefore 'ch' unit) of 1128/2048 units */
+ }
+ div {
+ clear: left;
+ float: left;
+ font: 60px/120px test;
+ color: orange;
+ background: orange;
+ }
+ #test1 {
+ color: green;
+ background: green;
+ font-size-adjust: ch-width calc(1128 / 2048); /* should cause no change */
+ }
+ #test2 {
+ color: blue;
+ background: blue;
+ font-size-adjust: ch-width calc(1.5 * 1128 / 2048); /* should be 1.5 times larger */
+ }
+ #test3 {
+ color: magenta;
+ background: magenta;
+ font-size-adjust: ch-width calc(0.75 * 1128 / 2048); /* should be 0.75 times larger */
+ }
+</style>
+<body>
+ <p>Test passes if the size of the green rectangle matches the orange rectangle,
+ the blue rectangle is longer, and the magenta rectangle is shorter.</p>
+ <div>Filler Text</div>
+ <div id="test1">Filler Text</div>
+ <div id="test2">Filler Text</div>
+ <div id="test3">Filler Text</div>
+</body>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-011.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-011.html
new file mode 100644
index 0000000000..3f6afd8a37
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-011.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Fonts Test: font-size-adjust - two-value syntax - using 'ic-width' as the basis for adjustment</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" title="2.6 Relative sizing: the font-size-adjust property"
+ href="https://drafts.csswg.org/css-fonts-4/#font-size-adjust-prop">
+<link rel="help" title="extend font-size-adjust to take a pair of values: <metric> <number>"
+ href="https://github.com/w3c/csswg-drafts/issues/6160">
+<meta name="assert" content="Test checks that font-size-adjust with the 'ic-width' metric works as expected">
+<link rel="match" href="font-size-adjust-009-ref.html">
+<style>
+ @font-face {
+ font-family: test;
+ src: url(/fonts/noto/noto-sans-v8-latin-regular.woff);
+ /* this font does not support U+6C34, so 'ic' should be treated as 1em */
+ }
+ div {
+ clear: left;
+ float: left;
+ font: 60px/120px test;
+ color: orange;
+ background: orange;
+ }
+ #test1 {
+ color: green;
+ background: green;
+ font-size-adjust: ic-width 1.0; /* should cause no change */
+ }
+ #test2 {
+ color: blue;
+ background: blue;
+ font-size-adjust: ic-width 1.5; /* should be 1.5 times larger */
+ }
+ #test3 {
+ color: magenta;
+ background: magenta;
+ font-size-adjust: ic-width 0.75; /* should be 0.75 times larger */
+ }
+</style>
+<body>
+ <p>Test passes if the size of the green rectangle matches the orange rectangle,
+ the blue rectangle is longer, and the magenta rectangle is shorter.</p>
+ <div>Filler Text</div>
+ <div id="test1">Filler Text</div>
+ <div id="test2">Filler Text</div>
+ <div id="test3">Filler Text</div>
+</body>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-012-ref.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-012-ref.html
new file mode 100644
index 0000000000..ac93186a23
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-012-ref.html
@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>CSS Test: font-size-adjust property</title>
+ <link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-size-adjust-prop">
+ <style>
+ @font-face {
+ font-family: 'ahem-ex-500';
+ src: url('./resources/ahem-ex-500.otf') format('opentype');
+ }
+ @font-face {
+ font-family: 'ahem-ex-250';
+ src: url('./resources/ahem-ex-250.otf') format('opentype');
+ }
+ .wrapper {
+ --primary-font: 'ahem-ex-500';
+ --secondary-font: 'ahem-ex-250';
+ }
+ .test {
+ font-family: var(--primary-font), var(--secondary-font);
+ font-size: 100px;
+ line-height: 1;
+ color: peru;
+ height: 100px;
+ }
+ .primary-font {
+ font-family: var(--primary-font);
+ }
+ .secondary-font {
+ font-family: var(--secondary-font);
+ }
+ .tall-inline-block {
+ display: inline-block;
+ height: 100px;
+ }
+ .description {
+ font-family: 'Times New Roman';
+ font-size: 14px;
+ }
+ .main {
+ font-size: 16px;
+ margin-bottom: 8px;
+ }
+ </style>
+</head>
+<body>
+ <div class="description main">For this test we are using two fonts. AhemEx500 has a aspect value (xHeight/size) of 0.5 and AhemEx250 an aspect value of 0.25. On both fonts all glyphs used in the tests look like a square but AhemEx500 doesn't contain 'A' (U+0041).</div>
+ <div class="wrapper">
+ <div class="description">1. Same glyph x in different spans with different fonts. The second one is adjusted with font-size-adjust. They should have the same size for test to pass.</div>
+ <div class="test">
+ <span class="primary-font">xx</span>
+ </div>
+ </div>
+ <div class="wrapper">
+ <div class="description">
+ 2. Different glyphs 'x' and 'A' in the same span, with 2 fonts in font-family fallback and <em>without</em> font-size-adjust. The second glyph can't be rendered by primary font so it will individually fallback to the secondary font. Note it is smaller than the first glyph.
+ </div>
+ <div class="test"><span>xA</span></div>
+ </div>
+ <div class="wrapper">
+ <div class="description">
+ 3. Different glyphs 'x' and 'A' in the same span, with 2 fonts in font-family fallback and <em>with</em> font-size-adjust. The second glyph can't be rendered by primary font so it will individually fallback to the secondary font. Note that now they have the same size.
+ </div>
+ <div class="test">
+ <!-- We are inserting a tall inline-block here to make the position of the baseline independent of the adjusted glyph since on the ref test we don't use font-size-adjust but font-size -->
+ <span>xx<span class="tall-inline-block"></span></span>
+ </div>
+ </div>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-012.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-012.html
new file mode 100644
index 0000000000..197a1809a8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-012.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>CSS Test: font-size-adjust property</title>
+ <link rel="match" href="font-size-adjust-012-ref.html">
+ <link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-size-adjust-prop">
+ <meta name="fuzzy" content="maxDifference=0-120;totalPixels=0-160">
+ <style>
+ @font-face {
+ font-family: 'ahem-ex-500';
+ src: url('./resources/ahem-ex-500.otf') format('opentype');
+ }
+ @font-face {
+ font-family: 'ahem-ex-250';
+ src: url('./resources/ahem-ex-250.otf') format('opentype');
+ }
+ .wrapper {
+ --primary-font: 'ahem-ex-500';
+ --secondary-font: 'ahem-ex-250';
+ }
+ .adjusted {
+ font-size-adjust: 0.5;
+ }
+ .test {
+ font-family: var(--primary-font), var(--secondary-font);
+ font-size: 100px;
+ line-height: 1;
+ color: peru;
+ height: 100px;
+ }
+ .primary-font {
+ font-family: var(--primary-font);
+ }
+ .secondary-font {
+ font-family: var(--secondary-font);
+ }
+ .tall-inline-block {
+ display: inline-block;
+ height: 100px;
+ }
+ .description {
+ font-family: 'Times New Roman';
+ font-size: 14px;
+ }
+ .main {
+ font-size: 16px;
+ margin-bottom: 8px;
+ }
+ </style>
+</head>
+<body>
+ <div class="description main">For this test we are using two fonts. AhemEx500 has a aspect value (xHeight/size) of 0.5 and AhemEx250 an aspect value of 0.25. On both fonts all glyphs used in the tests look like a square but AhemEx500 doesn't contain 'A' (U+0041).</div>
+ <div class="wrapper">
+ <div class="description">1. Same glyph x in different spans with different fonts. The second one is adjusted with font-size-adjust. They should have the same size for test to pass.</div>
+ <div class="test">
+ <span class="primary-font">x</span><span class="primary-font adjusted">x</span>
+ </div>
+ </div>
+ <div class="wrapper">
+ <div class="description">
+ 2. Different glyphs 'x' and 'A' in the same span, with 2 fonts in font-family fallback and <em>without</em> font-size-adjust. The second glyph can't be rendered by primary font so it will individually fallback to the secondary font. Note it is smaller than the first glyph.
+ </div>
+ <div class="test"><span>xA</span></div>
+ </div>
+ <div class="wrapper">
+ <div class="description">
+ 3. Different glyphs 'x' and 'A' in the same span, with 2 fonts in font-family fallback and <em>with</em> font-size-adjust. The second glyph can't be rendered by primary font so it will individually fallback to the secondary font. Note that now they have the same size.
+ </div>
+ <div class="test">
+ <!-- We are inserting a tall inline-block here to make the position of the baseline independent of the adjusted glyph since on the ref test we don't use font-size-adjust but font-size -->
+ <span class="adjusted">xA<span class="tall-inline-block"></span></span>
+ </div>
+ </div>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-013-ref.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-013-ref.html
new file mode 100644
index 0000000000..61b3ae355b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-013-ref.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>CSS Test: font-size-adjust property</title>
+ <link rel="help" href="https://www.w3.org/TR/css-fonts-5/#font-size-adjust-prop">
+ <meta name="assert" content="Test whether from-font automatically determines a font-size-adjust value based on the primary font.">
+ <style>
+ @font-face {
+ font-family: 'primary-font-ahem-ex-500';
+ src: url('./resources/ahem-ex-500.otf');
+ }
+ @font-face {
+ font-family: 'secondary-font-ahem-ex-250';
+ src: url('./resources/ahem-ex-250.otf');
+ }
+ .test {
+ font-family: 'primary-font-ahem-ex-500', 'secondary-font-ahem-ex-250';
+ font-size: 100px;
+ color: peru;
+ height: 200px;
+ margin-top: -20px;
+ margin-bottom: -80px;
+ line-height: 1;
+ }
+ .tall-inline-block {
+ display: inline-block;
+ height: 100px;
+ }
+ .description {
+ font-family: serif;
+ font-size: 16px;
+ }
+ </style>
+</head>
+<body>
+ <div>
+ <div class="description">
+ 1. Same glyphs, two 'x' in different spans with two different fonts. The primary font (AhemEx500) has a double aspect value (i.e., x-height/size = 0.5) of the secondary font (AhemEx250). The right glyph is adjusted with font-size-adjust: from-font, so it should be the same size as the left one.
+ </div>
+ <div class="test">
+ <span>xx</span>
+ </div>
+ </div>
+ <div>
+ <div class="description">
+ 2. Different glyphs 'x' and 'A' in the same span, with two fonts <em>without</em> font-size-adjust. As the primary font does not contain 'A' (U+0041), so the right glyph 'A' falls back to the secondary font. The right glyph should be smaller than the left one.
+ </div>
+ <div class="test"><span>xA</span></div>
+ </div>
+ <div>
+ <div class="description">
+ 3. Different glyphs 'x' and 'A' in the same span, with two fonts and font-size-adjust: from-font. The right glyph 'A' cannot be rendered by the primary font, so it individually falls back to the secondary font. However, it should be the same size as the left glyph due to font-size-adjust: from-font.
+ </div>
+ <div class="test">
+ <!-- We are inserting a tall inline-block here to make the position of the baseline independent of the adjusted glyph since on the ref test we don't use font-size-adjust but font-size -->
+ <span>xx<span class="tall-inline-block"></span></span>
+ </div>
+ </div>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-013.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-013.html
new file mode 100644
index 0000000000..bd59456462
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-013.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>CSS Test: font-size-adjust property</title>
+ <link rel="match" href="font-size-adjust-013-ref.html">
+ <link rel="help" href="https://www.w3.org/TR/css-fonts-5/#font-size-adjust-prop">
+ <meta name="assert" content="Test whether from-font automatically determines a font-size-adjust value based on the primary font.">
+ <meta name="fuzzy" content="maxDifference=0-120;totalPixels=0-160">
+ <style>
+ @font-face {
+ font-family: 'primary-font-ahem-ex-500';
+ src: url('./resources/ahem-ex-500.otf');
+ }
+ @font-face {
+ font-family: 'secondary-font-ahem-ex-250';
+ src: url('./resources/ahem-ex-250.otf');
+ }
+ .adjusted {
+ font-size-adjust: from-font;
+ }
+ .test {
+ font-family: 'primary-font-ahem-ex-500', 'secondary-font-ahem-ex-250';
+ font-size: 100px;
+ color: peru;
+ height: 200px;
+ margin-top: -20px;
+ margin-bottom: -80px;
+ line-height: 1;
+ }
+ .tall-inline-block {
+ display: inline-block;
+ height: 100px;
+ }
+ .description {
+ font-family: serif;
+ font-size: 16px;
+ }
+ </style>
+</head>
+<body>
+ <div>
+ <div class="description">
+ 1. Same glyphs, two 'x' in different spans with two different fonts. The primary font (AhemEx500) has a double aspect value (i.e., x-height/size = 0.5) of the secondary font (AhemEx250). The right glyph is adjusted with font-size-adjust: from-font, so it should be the same size as the left one.
+ </div>
+ <div class="test">
+ <span>x</span><span class="adjusted">x</span>
+ </div>
+ </div>
+ <div>
+ <div class="description">
+ 2. Different glyphs 'x' and 'A' in the same span, with two fonts <em>without</em> font-size-adjust. As the primary font does not contain 'A' (U+0041), so the right glyph 'A' falls back to the secondary font. The right glyph should be smaller than the left one.
+ </div>
+ <div class="test"><span>xA</span></div>
+ </div>
+ <div>
+ <div class="description">
+ 3. Different glyphs 'x' and 'A' in the same span, with two fonts and font-size-adjust: from-font. The right glyph 'A' cannot be rendered by the primary font, so it individually falls back to the secondary font. However, it should be the same size as the left glyph due to font-size-adjust: from-font.
+ </div>
+ <div class="test">
+ <!-- We are inserting a tall inline-block here to make the position of the baseline independent of the adjusted glyph since on the ref test we don't use font-size-adjust but font-size -->
+ <span class="adjusted">xA<span class="tall-inline-block"></span></span>
+ </div>
+ </div>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-014-ref.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-014-ref.html
new file mode 100644
index 0000000000..be552aade1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-014-ref.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>CSS Reference: font-size-adjust property</title>
+ <style>
+ .outer {
+ font: 50px/1 monospace;
+ height: 100px;
+ }
+ .ref {
+ font-family: serif;
+ font-size-adjust: 0.5;
+ }
+ .tall-inline-block {
+ display: inline-block;
+ height: 100px;
+ }
+ .description {
+ font-family: serif;
+ font-size: 16px;
+ font-size-adjust: from-font;
+ }
+ </style>
+</head>
+<body>
+ <div>
+ <div class="description">
+ All four instances of "foobar" should be the same size; the font of the outer div
+ should not affect <tt>font-size-adjust:from-font</tt> on the inner.
+ </div>
+ <div class="outer">
+ <span class="ref">
+ foobar<span class="tall-inline-block"></span>
+ </span>
+ </div>
+ <div class="outer">
+ <span class="ref">
+ foobar<span class="tall-inline-block"></span>
+ </span>
+ </div>
+ <div class="outer">
+ <span class="ref">
+ foobar<span class="tall-inline-block"></span>
+ </span>
+ </div>
+ <div class="outer">
+ <span class="ref">
+ foobar<span class="tall-inline-block"></span>
+ </span>
+ </div>
+ </div>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-014.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-014.html
new file mode 100644
index 0000000000..a6e87ff0ed
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-014.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>CSS Test: font-size-adjust property</title>
+ <link rel="match" href="font-size-adjust-014-ref.html">
+ <link rel="help" href="https://www.w3.org/TR/css-fonts-5/#font-size-adjust-prop">
+ <meta name="assert" content="Test whether from-font automatically determines a font-size-adjust value
+ based on the primary font of the element (not the font of its parent).">
+ <style>
+ @font-face {
+ font-family: ahem-ex-500;
+ src: url('./resources/ahem-ex-500.otf');
+ unicode-range: U+0020;
+ }
+ @font-face {
+ font-family: ahem-ex-250;
+ src: url('./resources/ahem-ex-250.otf');
+ unicode-range: U+0020;
+ }
+ .outer {
+ font: 50px/1 monospace;
+ height: 100px;
+ }
+ .ahem250 {
+ font-family: ahem-ex-250;
+ }
+ .ahem500 {
+ font-family: ahem-ex-500;
+ }
+ .test {
+ font-family: ahem-ex-500, serif;
+ /* font-size-adjust should be computed according to the ex-height of ahem-ex-500 */
+ font-size-adjust: from-font;
+ }
+ .ref {
+ font-family: serif;
+ font-size-adjust: 0.5;
+ }
+ .tall-inline-block {
+ display: inline-block;
+ height: 100px;
+ }
+ .description {
+ font-family: serif;
+ font-size: 16px;
+ font-size-adjust: from-font;
+ }
+ </style>
+</head>
+<body>
+ <div>
+ <div class="description">
+ All four instances of "foobar" should be the same size; the font of the outer div
+ should not affect <tt>font-size-adjust:from-font</tt> on the inner.
+ </div>
+ <div class="outer">
+ <span class="ref">
+ foobar<span class="tall-inline-block"></span>
+ </span>
+ </div>
+ <div class="outer">
+ <span class="test">
+ foobar<span class="tall-inline-block"></span>
+ </span>
+ </div>
+ <div class="outer ahem250">
+ <span class="test">
+ foobar<span class="tall-inline-block"></span>
+ </span>
+ </div>
+ <div class="outer ahem500">
+ <span class="test">
+ foobar<span class="tall-inline-block"></span>
+ </span>
+ </div>
+ </div>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-generic-font-fallback-crash.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-generic-font-fallback-crash.html
new file mode 100644
index 0000000000..b2884e975a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-generic-font-fallback-crash.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<title>Crash test for using a generic font family and font-size-adjust together.</title>
+<link rel="author" title="ChangSeok Oh" href="mailto:changseok@webkit.org">
+<link rel="help" href="https://crbug.com/1458673">
+<style>
+.crash {
+ font-family: fantasy;
+ font-size-adjust: 1.0;
+}
+</style>
+<div class="crash">Test passes if it does not crash.</div>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-interpolation-math-functions.tentative.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-interpolation-math-functions.tentative.html
new file mode 100644
index 0000000000..d173fb03bb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-interpolation-math-functions.tentative.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>font-size-adjust interpolation with css math functions</title>
+ <link rel="help" href="https://drafts.csswg.org/css-fonts-5/#font-size-adjust-prop">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/css/support/interpolation-testcommon.js"></script>
+ </head>
+
+ <style>
+ :root {
+ font-size: 10px;
+ }
+ </style>
+ <body>
+ <script>
+ test_interpolation({
+ property: 'font-size-adjust',
+ from: '100',
+ to: 'calc(sign(20rem - 20px) * 180)',
+ }, [
+ {at: -1, expect: '20'},
+ {at: 0, expect: '100'},
+ {at: 0.125, expect: '110'},
+ {at: 0.875, expect: '170'},
+ {at: 1, expect: '180'},
+ {at: 2, expect: '260'}
+ ]);
+
+ test_interpolation({
+ property: 'font-size-adjust',
+ from: 'calc(sign(20rem - 20px) * 100)',
+ to: 'calc(progress(10rem from 20px to 100px) * 180)',
+ }, [
+ {at: -1, expect: '20'},
+ {at: 0, expect: '100'},
+ {at: 0.125, expect: '110'},
+ {at: 0.875, expect: '170'},
+ {at: 1, expect: '180'},
+ {at: 2, expect: '260'}
+ ]);
+ </script>
+ </body>
+</html>
+
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-metrics-override-ref.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-metrics-override-ref.html
new file mode 100644
index 0000000000..a8d06c9674
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-metrics-override-ref.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-5/#font-size-adjust-prop">
+<meta name="assert" content="Tests the simultaneous use of font-size-adjust and metrics override descriptorof of @font-face">
+<title>Tests if font metric overrides reflect the adjustment of font-size-adjust.</title>
+<style>
+@font-face {
+ font-family: Ahem;
+ src: local(Ahem), url(/fonts/Ahem.ttf);
+}
+
+.reference {
+ font: 20px Ahem;
+ position: absolute;
+ top: 10px;
+ left: 10px;
+}
+
+.overridden-ascent-ref {
+ display: inline-block;
+ background-color: green;
+ width: 1em;
+ height: 1em; /* Scale a reference block to match the overridden ascent of 100%. */
+}
+
+.character {
+ display: inline-block;
+ background-color: green;
+ width: 2em; /* Double-size of an 'X' in Ahem */
+ height: 2em; /* Double-size of an 'X' in Ahem */
+ position: absolute;
+ /* Two times of difference between the overridden ascent and the original ascent */
+ top: 0.4em;
+ left: 1em;
+}
+
+.overridden-descent-ref {
+ display: inline-block;
+ background-color: green;
+ width: 1em;
+ height: 0.5em; /* Scale a reference block to match the overridden descen of 50%. */
+ position: absolute;
+ top: 2.5em;
+ left: 3em;
+}
+
+</style>
+<!--
+The three green rectangles below show ascent, character, and descent sizes
+from the left. The ascent and descent are overridden by 100% and 50% of the
+specified font size, respectively. The test applies font-size-adjust and font
+metric overrides simultaneously to text. As we double the text size with
+font-size-adjust, the ascent and descent override should scale accordingly
+to double their size.
+-->
+<div class="reference">
+ <span class="overridden-ascent-ref"></span><span class="character"></span><span class="overridden-descent-ref"></span>
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-metrics-override.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-metrics-override.html
new file mode 100644
index 0000000000..b7787b9307
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-metrics-override.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="author" href="mailto:changseok@webkit.org">
+<link rel="match" href="font-size-adjust-metrics-override-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-5/#font-size-adjust-prop">
+<meta name="assert" content="Tests the simultaneous use of font-size-adjust and metrics override descriptors of @font-face">
+<title>Tests if font metric overrides reflect the adjustment of font-size-adjust.</title>
+<style>
+@font-face {
+ font-family: Ahem;
+ src: local(Ahem), url(/fonts/Ahem.ttf);
+ /* The default ascent and descent are 80% and 20%, respectively. */
+ ascent-override: 100%;
+ descent-override: 50%;
+}
+
+.size-adjusted {
+ font: 20px Ahem;
+ /* Scale up 200% since the Ahem font has an aspect ratio of 0.8 of x-height
+ to size. */
+ font-size-adjust: 1.6;
+ color: green;
+ position: absolute;
+ top: 10px;
+ left: 10px;
+}
+
+.overridden-ascent-ref {
+ display: inline-block;
+ background-color: green;
+ vertical-align: top;
+ width: 1em;
+ height: 1em; /* Scale a reference block to match the overridden ascent of 100%. */
+}
+
+.overridden-descent-ref {
+ display: inline-block;
+ background-color: green;
+ vertical-align: bottom;
+ width: 1em;
+ height: 0.5em; /* Scale a reference block to match the overridden descen of 50%. */
+}
+
+</style>
+<!--
+The three green rectangles below show ascent, character, and descent sizes
+from the left. The ascent and descent are overridden by 100% and 50% of the
+specified font size, respectively. The test applies font-size-adjust and font
+metric overrides simultaneously to text. As we double the text size with
+font-size-adjust, the ascent and descent override should scale accordingly
+to double their size.
+-->
+<div class="size-adjusted">
+ <span class="overridden-ascent-ref"></span>X<span class="overridden-descent-ref"></span>
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-nan-crash.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-nan-crash.html
new file mode 100644
index 0000000000..d67025e1b8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-nan-crash.html
@@ -0,0 +1,7 @@
+<!DOCTYPE html>
+<style>
+ HTML {
+ font-size: 6.2800189711475946e-9vmin;
+ font-size-adjust: cap-height from-font;
+ }
+</style> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-order-001-ref.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-order-001-ref.html
new file mode 100644
index 0000000000..0c68e1396a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-order-001-ref.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Fonts reference</title>
+<style>
+ div {
+ margin: 10px;
+ font: 20px monospace;
+ background: yellow;
+ width: 10ch;
+ font-size-adjust: 1.0;
+ }
+</style>
+<body>
+ <p>Test passes if both blocks render the same, and there is no red:</p>
+ <div>The quick brown fox jumps over the lazy dog</div>
+ <div>The quick brown fox jumps over the lazy dog</div>
+</body>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-order-001.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-order-001.html
new file mode 100644
index 0000000000..a8b56a3083
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-order-001.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Fonts Test: font-size-adjust effect on font-dependent units</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" title="2.6 Relative sizing: the font-size-adjust property"
+ href="https://drafts.csswg.org/css-fonts/#font-size-adjust-prop">
+<link rel="help" title="6.1.1. Font-relative Lengths: the em, rem, ex, rex, cap, rcap, ch, rch, ic, ric, lh, rlh units"
+ href="https://drafts.csswg.org/css-values-4/#font-relative-lengths">
+<meta name="assert" content="font-size-adjust affects the size of the 'ch' unit consistently regardless of the ordering of properties.">
+<link rel="match" href="font-size-adjust-order-001-ref.html">
+<style>
+ div {
+ margin: 10px;
+ font: 20px monospace;
+ background: yellow;
+ }
+ #bg {
+ width: 12ch;
+ height: 2em;
+ background: red;
+ position: absolute;
+ z-index: -1;
+ }
+ #test1 {
+ /* Size the font by its ex-height; this will enlarge the glyphs
+ so the red background block is hidden. */
+ font-size-adjust: 1.0;
+ width: 10ch;
+ }
+ #test2 {
+ /* This should work exactly the same. */
+ width: 10ch;
+ font-size-adjust: 1.0;
+ }
+</style>
+<body>
+ <p>Test passes if both blocks render the same, and there is no red:</p>
+ <div id="bg"></div>
+ <div id="test1">The quick brown fox jumps over the lazy dog</div>
+ <div id="bg"></div>
+ <div id="test2">The quick brown fox jumps over the lazy dog</div>
+</body>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-reload-ref.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-reload-ref.html
new file mode 100644
index 0000000000..efa8c1d76e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-reload-ref.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Vitor Roriz" href="https://github.com/vitorroriz">
+<link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-size-adjust-prop">
+<style>
+html {
+ margin: 0;
+ padding: 0;
+}
+body {
+ font-family: system-ui;
+ font-size: 100px;
+ font-size-adjust: 0.528;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ height: 200px;
+ width: 200px;
+}
+</style>
+</head>
+<body>
+ <div id="target">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-reload.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-reload.html
new file mode 100644
index 0000000000..37d79a68bd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-reload.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<head>
+<link rel="author" title="Vitor Roriz" href="https://github.com/vitorroriz">
+<link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-size-adjust-prop">
+<link rel="match" href="font-size-adjust-reload-ref.html">
+<style>
+body {
+ margin: 0;
+ padding: 0;
+}
+</style>
+</head>
+<body>
+ <iframe id="iframe" width=400 height=400 frameBorder=0 src="font-size-adjust-reload-ref.html"></iframe>
+</body>
+<script>
+ const iframe = document.getElementById('iframe');
+ // Forcing reload
+ iframe.src += '';
+ iframe.contentWindow.onload = function(){
+ document.documentElement.classList.remove("reftest-wait");
+ };
+</script>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-text-orientation-ref.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-text-orientation-ref.html
new file mode 100644
index 0000000000..007e9befad
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-text-orientation-ref.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>font-size-adjust and text-orientation</title>
+<link rel="author" title="ChangSeok Oh" href="mailto:changseok@webkit.org" />
+<link rel="help" href="https://www.w3.org/TR/css-fonts-5/#font-size-adjust-prop" />
+<style>
+@font-face {
+ font-family: IcTestFullWidth;
+ src: url(../css-values/resources/IcTestFullWidth.woff2);
+}
+div {
+ font-family: IcTestFullWidth;
+ font-size: 40px;
+ font-size-adjust: ic-width 1.0;
+ writing-mode: vertical-rl;
+ text-orientation: mixed;
+}
+</style>
+<div>あ</div>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-text-orientation.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-text-orientation.html
new file mode 100644
index 0000000000..ab73e86e87
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-text-orientation.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>font-size-adjust and text-orientation</title>
+<link rel="author" title="ChangSeok Oh" href="mailto:changseok@webkit.org" />
+<link rel="help" href="https://www.w3.org/TR/css-fonts-5/#font-size-adjust-prop" />
+<link rel="match" href="font-size-adjust-text-orientation-ref.html" />
+<meta name="assert" content="Test checks whether text-orientation affects font-size-adjust.">
+<style>
+@font-face {
+ font-family: IcTestFullWidth;
+ src: url(../css-values/resources/IcTestFullWidth.woff2);
+}
+div {
+ font-family: IcTestFullWidth;
+ font-size: 40px;
+ font-size-adjust: ic-width 1.0;
+ writing-mode: vertical-rl;
+ text-orientation: upright;
+}
+</style>
+<div>あ</div>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-units-001-ref.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-units-001-ref.html
new file mode 100644
index 0000000000..008c500d08
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-units-001-ref.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Fonts reference</title>
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+ div {
+ margin: 10px;
+ font: 100px/1 Ahem;
+ font-size-adjust: 0.8; /* this matches Ahem's ex-height metric */
+ background: orange;
+ width: 2ch;
+ height: 1ex;
+ }
+ #test1 {
+ background: blue;
+ }
+ #test2 {
+ background: blue;
+ }
+</style>
+<body>
+ <p>Test passes if the blue rectangles are both the same size as the orange one.</p>
+ <div id="test1"></div>
+ <div id="test2"></div>
+ <div></div>
+</body>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-units-001.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-units-001.html
new file mode 100644
index 0000000000..4e27ef1116
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-units-001.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Fonts Test: font-size-adjust effect on font-dependent units</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="help" title="2.6 Relative sizing: the font-size-adjust property"
+ href="https://drafts.csswg.org/css-fonts/#font-size-adjust-prop">
+<link rel="help" title="6.1.1. Font-relative Lengths: the em, rem, ex, rex, cap, rcap, ch, rch, ic, ric, lh, rlh units"
+ href="https://drafts.csswg.org/css-values-4/#font-relative-lengths">
+<meta name="assert" content="Font-relative units like ch and ex are affected by font-size-adjust,
+because they are derived from metrics of the _used_ font.">
+<link rel="match" href="font-size-adjust-units-001-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+ div {
+ margin: 10px;
+ font: 100px/1 Ahem;
+ font-size-adjust: 0.8; /* this matches Ahem's ex-height metric */
+ background: orange;
+ width: 2ch;
+ height: 1ex;
+ }
+ #test1 {
+ background: blue;
+ font-size-adjust: 0.4;
+ width: 4ch;
+ height: 2ex;
+ }
+ #test2 {
+ background: blue;
+ font-size-adjust: 1.6;
+ width: 1ch;
+ height: 0.5ex;
+ }
+</style>
+<body>
+ <p>Test passes if the blue rectangles are both the same size as the orange one.</p>
+ <div id="test1"></div>
+ <div id="test2"></div>
+ <div></div>
+</body>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-zero-1.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-zero-1.html
new file mode 100644
index 0000000000..a34a38b570
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-zero-1.html
@@ -0,0 +1,18 @@
+<!DOCTYPE HTML>
+<title>CSS Test: font-size-adjust: 0</title>
+<link rel="author" title="L. David Baron" href="https://dbaron.org/">
+<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
+<link rel="help" href="http://www.w3.org/TR/css3-fonts/#font-size-adjust-prop">
+<link rel="help" href="http://www.w3.org/TR/CSS21/box.html#collapsing-margins">
+<link rel="match" href="font-size-zero-2-ref.html">
+<style>
+/* spec ambiguous whether font-size-adjust influences line-height: normal */
+body { line-height: 1.2 }
+
+p { margin: 1em 0 }
+p.zero { font-size-adjust: 0 }
+</style>
+
+<p>before</p>
+<p class="zero">zero</p>
+<p>after</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-adjust-zero-2.html b/testing/web-platform/tests/css/css-fonts/font-size-adjust-zero-2.html
new file mode 100644
index 0000000000..3126f7457b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-adjust-zero-2.html
@@ -0,0 +1,19 @@
+<!DOCTYPE HTML>
+<title>CSS Test: font-size-adjust: 0</title>
+<link rel="author" title="L. David Baron" href="https://dbaron.org/">
+<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
+<link rel="help" href="http://www.w3.org/TR/css3-fonts/#font-size-adjust-prop">
+<link rel="help" href="http://www.w3.org/TR/CSS21/box.html#collapsing-margins">
+<link rel="match" href="font-size-zero-2-ref.html">
+<style>
+/* spec ambiguous whether font-size-adjust influences line-height: normal */
+body { line-height: 1.2 }
+span { line-height: 0 }
+
+p { margin: 1em 0 }
+span.zero { font-size-adjust: 0 }
+</style>
+
+<p>before</p>
+<p><span class="zero">zero</span></p>
+<p>after</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-monospace-adjust-ref.html b/testing/web-platform/tests/css/css-fonts/font-size-monospace-adjust-ref.html
new file mode 100644
index 0000000000..098fca5ea7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-monospace-adjust-ref.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<style>
+ textarea { font-size: 3em; }
+</style>
+<textarea>Textarea</textarea>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-monospace-adjust.html b/testing/web-platform/tests/css/css-fonts/font-size-monospace-adjust.html
new file mode 100644
index 0000000000..f1a0b7294d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-monospace-adjust.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<link rel="help" href="https://crbug.com/1086082">
+<link rel="match" href="font-size-monospace-adjust-ref.html">
+<style>
+ textarea {
+ font-size: 3em;
+ transition: margin-bottom 1e10s steps(2, start);
+ margin-bottom: 10px;
+ }
+
+ .margin {
+ margin-bottom: 20px;
+ }
+</style>
+<textarea id=textarea>Textarea</textarea>
+<script>
+ document.documentElement.offsetTop;
+ textarea.classList.toggle('margin');
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-relative-across-calc-ff-bug-001.html b/testing/web-platform/tests/css/css-fonts/font-size-relative-across-calc-ff-bug-001.html
new file mode 100644
index 0000000000..167de88887
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-relative-across-calc-ff-bug-001.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-size-prop">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1572738">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1572451">
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<script type="text/javascript" src="/resources/testharness.js"></script>
+<script type="text/javascript" src="/resources/testharnessreport.js"></script>
+<div style="font-family: something-non-default; font-size: calc(-100em + 1px);"></div>
+<div style="font-family: something-non-default; font-size: calc(1em - 100px);"></div>
+<script>
+test(function() {
+ for (const element of document.querySelectorAll("div"))
+ assert_equals(getComputedStyle(element).fontSize, "0px");
+}, "font-size computation isn't messed up when mixing positive and negatives when font-family changes and the parent has a keyword font-size");
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-xxx-large-ref.html b/testing/web-platform/tests/css/css-fonts/font-size-xxx-large-ref.html
new file mode 100644
index 0000000000..0cc1184a83
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-xxx-large-ref.html
@@ -0,0 +1,8 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-size: xxx-large; size equivalence</title>
+<link rel="author" title="Joel Olsson" href="joel_1st@hotmail.com">
+<body>
+<p>Test passes if the line below is identical, with matching font size.</p>
+<font size=7>Foo</font>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-xxx-large.html b/testing/web-platform/tests/css/css-fonts/font-size-xxx-large.html
new file mode 100644
index 0000000000..44a3068875
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-xxx-large.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-size: xxx-large; size equivalence</title>
+<link rel="author" title="Joel Olsson" href="joel_1st@hotmail.com">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-size-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#absolute-size-mapping">
+<link rel="match" href="font-size-xxx-large-ref.html">
+<body>
+<p>Test passes if the line below is identical, with matching font size.</p>
+<span style="font-size: xxx-large">Foo</span>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-zero-1-notref.html b/testing/web-platform/tests/css/css-fonts/font-size-zero-1-notref.html
new file mode 100644
index 0000000000..c24e3d91eb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-zero-1-notref.html
@@ -0,0 +1,12 @@
+<!DOCTYPE HTML>
+<title>CSS Test Reference</title>
+<link rel="author" title="L. David Baron" href="https://dbaron.org/">
+<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
+<style>
+/* spec ambiguous whether font-size-adjust influences line-height: normal */
+body { line-height: 1.2 }
+</style>
+
+<p>before</p>
+<p>zero</p>
+<p>after</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-zero-1-ref.html b/testing/web-platform/tests/css/css-fonts/font-size-zero-1-ref.html
new file mode 100644
index 0000000000..b468121c67
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-zero-1-ref.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML>
+<title>CSS Test Reference</title>
+<link rel="author" title="L. David Baron" href="https://dbaron.org/">
+<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
+<link rel="mismatch" href="font-size-zero-1-notref.html">
+<style>
+/* spec ambiguous whether font-size-adjust influences line-height: normal */
+body { line-height: 1.2 }
+
+p { margin: 1em 0 }
+p.first { margin-bottom: 2em }
+</style>
+
+<p class="first">before</p>
+<p>after</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-zero-1.html b/testing/web-platform/tests/css/css-fonts/font-size-zero-1.html
new file mode 100644
index 0000000000..85369593e4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-zero-1.html
@@ -0,0 +1,18 @@
+<!DOCTYPE HTML>
+<title>CSS Test: font-size: 0</title>
+<link rel="author" title="L. David Baron" href="https://dbaron.org/">
+<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
+<link rel="help" href="http://www.w3.org/TR/css3-fonts/#font-size-prop">
+<link rel="help" href="http://www.w3.org/TR/CSS21/box.html#collapsing-margins">
+<link rel="match" href="font-size-zero-1-ref.html">
+<style>
+/* spec ambiguous whether font-size-adjust influences line-height: normal */
+body { line-height: 1.2 }
+
+p { margin: 1em 0 }
+p.zero { font-size: 0 }
+</style>
+
+<p>before</p>
+<p class="zero">zero</p>
+<p>after</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-zero-2-ref.html b/testing/web-platform/tests/css/css-fonts/font-size-zero-2-ref.html
new file mode 100644
index 0000000000..6b5f7e9b24
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-zero-2-ref.html
@@ -0,0 +1,12 @@
+<!DOCTYPE HTML>
+<title>CSS Test Reference</title>
+<link rel="author" title="L. David Baron" href="https://dbaron.org/">
+<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
+<style>
+/* spec ambiguous whether font-size-adjust influences line-height: normal */
+body { line-height: 1.2 }
+</style>
+
+<p>before</p>
+<p>&nbsp;</p>
+<p>after</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-size-zero-2.html b/testing/web-platform/tests/css/css-fonts/font-size-zero-2.html
new file mode 100644
index 0000000000..d6696984d5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-size-zero-2.html
@@ -0,0 +1,18 @@
+<!DOCTYPE HTML>
+<title>CSS Test: font-size: 0</title>
+<link rel="author" title="L. David Baron" href="https://dbaron.org/">
+<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
+<link rel="help" href="http://www.w3.org/TR/css3-fonts/#font-size-prop">
+<link rel="help" href="http://www.w3.org/TR/CSS21/box.html#collapsing-margins">
+<link rel="match" href="font-size-zero-2-ref.html">
+<style>
+/* spec ambiguous whether font-size-adjust influences line-height: normal */
+body { line-height: 1.2 }
+
+p { margin: 1em 0 }
+span.zero { font-size: 0 }
+</style>
+
+<p>before</p>
+<p><span class="zero">zero</span></p>
+<p>after</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-stretch-01.html b/testing/web-platform/tests/css/css-fonts/font-stretch-01.html
new file mode 100644
index 0000000000..11f3b40504
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-stretch-01.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-stretch property initial value is normal</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-stretch-pass-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-stretch-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-prop-desc">
+<meta name="assert" content="The ‘font-stretch’ property selects a normal, condensed, or expanded face from a font family.">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/fail.woff) format("woff");
+ font-stretch: ultra-expanded;
+ }
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/pass.woff) format("woff");
+ font-stretch: normal;
+ }
+ .test {
+ font-family: "test";
+ font-size: 6em;
+ }
+
+</style>
+
+<p>Test passes if the word PASS appears below.</p>
+<section class="test">
+ <p>P</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-stretch-02.html b/testing/web-platform/tests/css/css-fonts/font-stretch-02.html
new file mode 100644
index 0000000000..7635040414
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-stretch-02.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-stretch property ultra-expanded</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-stretch-pass-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-stretch-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-prop-desc">
+<meta name="assert" content="The ‘font-stretch’ property selects a normal, condensed, or expanded face from a font family.">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/fail.woff) format("woff");
+ font-stretch: normal;
+ }
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/pass.woff) format("woff");
+ font-stretch: ultra-expanded;
+ }
+ .test {
+ font-family: "test";
+ font-size: 6em;
+ font-stretch: ultra-expanded;
+ }
+
+</style>
+
+<p>Test passes if the word PASS appears below.</p>
+<section class="test">
+ <p>P</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-stretch-03.html b/testing/web-platform/tests/css/css-fonts/font-stretch-03.html
new file mode 100644
index 0000000000..82b2a84ceb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-stretch-03.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-stretch property extra-expanded</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-stretch-pass-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-stretch-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-prop-desc">
+<meta name="assert" content="The ‘font-stretch’ property selects a normal, condensed, or expanded face from a font family.">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/fail.woff) format("woff");
+ font-stretch: normal;
+ }
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/pass.woff) format("woff");
+ font-stretch: extra-expanded;
+ }
+ .test {
+ font-family: "test";
+ font-size: 6em;
+ font-stretch: extra-expanded;
+ }
+
+</style>
+
+<p>Test passes if the word PASS appears below.</p>
+<section class="test">
+ <p>P</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-stretch-04.html b/testing/web-platform/tests/css/css-fonts/font-stretch-04.html
new file mode 100644
index 0000000000..c70a0ecf03
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-stretch-04.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-stretch property, expanded</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-stretch-pass-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-stretch-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-prop-desc">
+<meta name="assert" content="The ‘font-stretch’ property selects a normal, condensed, or expanded face from a font family.">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/fail.woff) format("woff");
+ font-stretch: normal;
+ }
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/pass.woff) format("woff");
+ font-stretch: expanded;
+ }
+ .test {
+ font-family: "test";
+ font-size: 6em;
+ font-stretch: expanded;
+ }
+
+</style>
+
+<p>Test passes if the word PASS appears below.</p>
+<section class="test">
+ <p>P</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-stretch-05.html b/testing/web-platform/tests/css/css-fonts/font-stretch-05.html
new file mode 100644
index 0000000000..6497aabcac
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-stretch-05.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-stretch property, semi-expanded</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-stretch-pass-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-stretch-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-prop-desc">
+<meta name="assert" content="The ‘font-stretch’ property selects a normal, condensed, or expanded face from a font family.">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/fail.woff) format("woff");
+ font-stretch: normal;
+ }
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/pass.woff) format("woff");
+ font-stretch: semi-expanded;
+ }
+ .test {
+ font-family: "test";
+ font-size: 6em;
+ font-stretch: semi-expanded;
+ }
+
+</style>
+
+<p>Test passes if the word PASS appears below.</p>
+<section class="test">
+ <p>P</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-stretch-06.html b/testing/web-platform/tests/css/css-fonts/font-stretch-06.html
new file mode 100644
index 0000000000..aaec9aa326
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-stretch-06.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-stretch property, normal</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-stretch-pass-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-stretch-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-prop-desc">
+<meta name="assert" content="The ‘font-stretch’ property selects a normal, condensed, or expanded face from a font family.">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/fail.woff) format("woff");
+ font-stretch: semi-expanded;
+ }
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/pass.woff) format("woff");
+ font-stretch: normal;
+ }
+ .test {
+ font-family: "test";
+ font-size: 6em;
+ font-stretch: normal;
+ }
+
+</style>
+
+<p>Test passes if the word PASS appears below.</p>
+<section class="test">
+ <p>P</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-stretch-07.html b/testing/web-platform/tests/css/css-fonts/font-stretch-07.html
new file mode 100644
index 0000000000..80b7f2b8e5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-stretch-07.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-stretch property, semi-condensed</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-stretch-pass-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-stretch-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-prop-desc">
+<meta name="assert" content="The ‘font-stretch’ property selects a normal, condensed, or expanded face from a font family.">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/fail.woff) format("woff");
+ font-stretch: normal;
+ }
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/pass.woff) format("woff");
+ font-stretch: semi-condensed;
+ }
+ .test {
+ font-family: "test";
+ font-size: 6em;
+ font-stretch: semi-condensed;
+ }
+
+</style>
+
+<p>Test passes if the word PASS appears below.</p>
+<section class="test">
+ <p>P</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-stretch-08.html b/testing/web-platform/tests/css/css-fonts/font-stretch-08.html
new file mode 100644
index 0000000000..e9da4465ba
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-stretch-08.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-stretch property, condensed</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-stretch-pass-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-stretch-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-prop-desc">
+<meta name="assert" content="The ‘font-stretch’ property selects a normal, condensed, or expanded face from a font family.">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/fail.woff) format("woff");
+ font-stretch: normal;
+ }
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/pass.woff) format("woff");
+ font-stretch: condensed;
+ }
+ .test {
+ font-family: "test";
+ font-size: 6em;
+ font-stretch: condensed;
+ }
+
+</style>
+
+<p>Test passes if the word PASS appears below.</p>
+<section class="test">
+ <p>P</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-stretch-09.html b/testing/web-platform/tests/css/css-fonts/font-stretch-09.html
new file mode 100644
index 0000000000..0fcd04ea54
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-stretch-09.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-stretch property, extra-condensed</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-stretch-pass-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-stretch-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-prop-desc">
+<meta name="assert" content="The ‘font-stretch’ property selects a normal, condensed, or expanded face from a font family.">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/fail.woff) format("woff");
+ font-stretch: normal;
+ }
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/pass.woff) format("woff");
+ font-stretch: extra-condensed;
+ }
+ .test {
+ font-family: "test";
+ font-size: 6em;
+ font-stretch: extra-condensed;
+ }
+
+</style>
+
+<p>Test passes if the word PASS appears below.</p>
+<section class="test">
+ <p>P</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-stretch-10.html b/testing/web-platform/tests/css/css-fonts/font-stretch-10.html
new file mode 100644
index 0000000000..55a3fa5e00
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-stretch-10.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-stretch property, ultra-condensed</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-stretch-pass-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-stretch-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-prop-desc">
+<meta name="assert" content="The ‘font-stretch’ property selects a normal, condensed, or expanded face from a font family.">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/fail.woff) format("woff");
+ font-stretch: normal;
+ }
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/pass.woff) format("woff");
+ font-stretch: ultra-condensed;
+ }
+ .test {
+ font-family: "test";
+ font-size: 6em;
+ font-stretch: ultra-condensed;
+ }
+
+</style>
+
+<p>Test passes if the word PASS appears below.</p>
+<section class="test">
+ <p>P</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-stretch-11.html b/testing/web-platform/tests/css/css-fonts/font-stretch-11.html
new file mode 100644
index 0000000000..cc2d7f8a44
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-stretch-11.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-stretch property, mapping values</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-stretch-pass-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-stretch-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-prop-desc">
+<meta name="assert" content="When a face does not exist for a given width, normal or condensed values map to a narrower face, otherwise a wider face.">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/fail.woff) format("woff");
+ font-stretch: normal;
+ }
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/pass.woff) format("woff");
+ font-stretch: condensed;
+ }
+ .test {
+ font-family: "test";
+ font-size: 6em;
+ font-stretch: ultra-condensed;
+ }
+
+</style>
+
+<p>Test passes if the word PASS appears below.</p>
+<section class="test">
+ <p>P</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-stretch-12.html b/testing/web-platform/tests/css/css-fonts/font-stretch-12.html
new file mode 100644
index 0000000000..00369cab4b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-stretch-12.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-stretch property, mapping values</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-stretch-pass-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-stretch-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-prop-desc">
+<meta name="assert" content="When a face does not exist for a given width, normal or condensed values map to a narrower face, otherwise a wider face.">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/pass.woff) format("woff");
+ font-stretch: condensed;
+ }
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/fail.woff) format("woff");
+ font-stretch: normal;
+ }
+ .test {
+ font-family: "test";
+ font-size: 6em;
+ font-stretch: semi-condensed;
+ }
+
+</style>
+<!-- per Fig 17, where the narrower face is used 'otherwise'
+ for semi condensed, before the normal face gets examined -->
+<p>Test passes if the word PASS appears below.</p>
+<section class="test">
+ <p>P</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-stretch-13.html b/testing/web-platform/tests/css/css-fonts/font-stretch-13.html
new file mode 100644
index 0000000000..c9bd6b9c57
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-stretch-13.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-stretch property, mapping values</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-stretch-pass-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-stretch-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-prop-desc">
+<meta name="assert" content="When a face does not exist for a given width, normal or condensed values map to a narrower face, otherwise a wider face.">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/pass.woff) format("woff");
+ font-stretch: normal;
+ }
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/fail.woff) format("woff");
+ font-stretch: condensed;
+ }
+ .test {
+ font-family: "test";
+ font-size: 6em;
+ font-stretch: expanded;
+ }
+
+</style>
+
+<p>Test passes if the word PASS appears below.</p>
+<section class="test">
+ <p>P</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-stretch-14.html b/testing/web-platform/tests/css/css-fonts/font-stretch-14.html
new file mode 100644
index 0000000000..f6812c6878
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-stretch-14.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-stretch property, mapping values</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-stretch-pass-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-stretch-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-prop-desc">
+<meta name="assert" content="When a face does not exist for a given width, normal or condensed values map to a narrower face, otherwise a wider face.">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/pass.woff) format("woff");
+ font-stretch: expanded;
+ }
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/fail.woff) format("woff");
+ font-stretch: normal;
+ }
+ .test {
+ font-family: "test";
+ font-size: 6em;
+ font-stretch: semi-expanded;
+ }
+
+</style>
+
+<p>Test passes if the word PASS appears below.</p>
+<section class="test">
+ <p>P</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-stretch-15.html b/testing/web-platform/tests/css/css-fonts/font-stretch-15.html
new file mode 100644
index 0000000000..0157a02c35
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-stretch-15.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-stretch property, mapping values</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-stretch-pass-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-stretch-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-prop-desc">
+<meta name="assert" content="When a face does not exist for a given width, normal or condensed values map to a narrower face, otherwise a wider face.">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/pass.woff) format("woff");
+ font-stretch: expanded;
+ }
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/fail.woff) format("woff");
+ font-stretch: condensed;
+ }
+ .test {
+ font-family: "test";
+ font-size: 6em;
+ font-stretch: semi-expanded;
+ }
+
+</style>
+
+<p>Test passes if the word PASS appears below.</p>
+<section class="test">
+ <p>P</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-stretch-16.html b/testing/web-platform/tests/css/css-fonts/font-stretch-16.html
new file mode 100644
index 0000000000..d110052e5f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-stretch-16.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-stretch property, mapping values</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-stretch-pass-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-stretch-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-prop-desc">
+<meta name="assert" content="When a face does not exist for a given width, normal or condensed values map to a narrower face, otherwise a wider face.">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/pass.woff) format("woff");
+ font-stretch: condensed;
+ }
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/fail.woff) format("woff");
+ font-stretch: expanded;
+ }
+ .test {
+ font-family: "test";
+ font-size: 6em;
+ font-stretch: normal;
+ }
+
+</style>
+
+<p>Test passes if the word PASS appears below.</p>
+<section class="test">
+ <p>P</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-stretch-17.html b/testing/web-platform/tests/css/css-fonts/font-stretch-17.html
new file mode 100644
index 0000000000..760cd60dc3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-stretch-17.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-stretch property, mapping values</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-stretch-pass-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-stretch-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-prop-desc">
+<meta name="assert" content="When a face does not exist for a given width, normal or condensed values map to a narrower face, otherwise a wider face.">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/pass.woff) format("woff");
+ font-stretch: condensed;
+ }
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/fail.woff) format("woff");
+ font-stretch: expanded;
+ }
+ .test {
+ font-family: "test";
+ font-size: 6em;
+ font-stretch: semi-condensed;
+ }
+
+</style>
+
+<p>Test passes if the word PASS appears below.</p>
+<section class="test">
+ <p>P</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-stretch-18.html b/testing/web-platform/tests/css/css-fonts/font-stretch-18.html
new file mode 100644
index 0000000000..9440746b09
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-stretch-18.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-stretch property, mapping values</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-stretch-pass-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-stretch-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-prop-desc">
+<meta name="assert" content="When a face does not exist for a given width, normal or condensed values map to a narrower face, otherwise a wider face.">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/pass.woff) format("woff");
+ font-stretch: extra-condensed;
+ }
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/fail.woff) format("woff");
+ font-stretch: expanded;
+ }
+ .test {
+ font-family: "test";
+ font-size: 6em;
+ font-stretch: condensed;
+ }
+
+</style>
+
+<p>Test passes if the word PASS appears below.</p>
+<section class="test">
+ <p>P</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-stretch-interpolation-math-functions.tentative.html b/testing/web-platform/tests/css/css-fonts/font-stretch-interpolation-math-functions.tentative.html
new file mode 100644
index 0000000000..9029eefcb4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-stretch-interpolation-math-functions.tentative.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>font-size-adjust interpolation with css math functions</title>
+ <link rel="help" href="https://drafts.csswg.org/css-fonts-5/#font-size-adjust-prop">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/css/support/interpolation-testcommon.js"></script>
+ </head>
+
+ <style>
+ :root {
+ font-size: 10px;
+ }
+ </style>
+ <body>
+ <script>
+ test_interpolation({
+ property: 'font-stretch',
+ from: '100%',
+ to: 'calc(sign(20rem - 20px) * 180%)',
+ }, [
+ {at: -1, expect: '20%'},
+ {at: 0, expect: '100%'},
+ {at: 0.125, expect: '110%'},
+ {at: 0.875, expect: '170%'},
+ {at: 1, expect: '180%'},
+ {at: 2, expect: '260%'}
+ ]);
+
+ test_interpolation({
+ property: 'font-stretch',
+ from: 'calc(sign(20rem - 20px) * 100%)',
+ to: 'calc(progress(10rem from 20px to 100px) * 180%)',
+ }, [
+ {at: -1, expect: '20%'},
+ {at: 0, expect: '100%'},
+ {at: 0.125, expect: '110%'},
+ {at: 0.875, expect: '170%'},
+ {at: 1, expect: '180%'},
+ {at: 2, expect: '260%'}
+ ]);
+ </script>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-stretch-pass-ref.html b/testing/web-platform/tests/css/css-fonts/font-stretch-pass-ref.html
new file mode 100644
index 0000000000..0bd11557a6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-stretch-pass-ref.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: pass reference</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/pass.woff) format("woff");
+ font-stretch: normal;
+ }
+ .test {
+ font-family: "test";
+ font-size: 6em;
+ }
+
+</style>
+
+<p>Test passes if the word PASS appears below.</p>
+<section class="test">
+ <p>P</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-style-angle.html b/testing/web-platform/tests/css/css-fonts/font-style-angle.html
new file mode 100644
index 0000000000..baf69be5c1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-style-angle.html
@@ -0,0 +1,23 @@
+
+<!doctype html>
+<title>Testing font-style angle's unit type consideration</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-style-prop" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+
+body {
+ font-style: oblique 0.785398165rad;
+}
+
+</style>
+<script>
+var test_description = "font-style angle's unit type must be considered";
+promise_test(
+ t => {
+ return new Promise(test => addEventListener('load', () => test()))
+ .then(test => assert_equals(getComputedStyle(document.querySelector("body"))['font-style'], "oblique 45deg", "Invalid gCS($(\"body\"))['font-style'];"))
+ },
+ test_description
+);
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-01-ref.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-01-ref.html
new file mode 100644
index 0000000000..535518272a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-01-ref.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-synthesis: none disables fake bold</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ .test {
+ font-family: "test";
+ font-size: 3em;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the second line is <em>not bold</em>), and there is no red.</p>
+<section class="test">
+ <p>Filler text</p>
+ <p class="nosynth">Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-01.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-01.html
new file mode 100644
index 0000000000..cf6d099e0d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-01.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-synthesis: none disables fake bold</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-synthesis-01-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-synthesis-prop">
+<meta name="assert" content=" If ‘weight’ is not specified, user agents must not synthesize bold faces">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ @supports not (font-synthesis: none) {
+ .test {color: red;}
+ }
+ .test {
+ font-family: "test";
+ font-size: 3em;
+ }
+ .nosynth {
+ font-weight: bold;
+ font-synthesis: none;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the second line is <em>not bold</em>), and there is no red.</p>
+<section class="test">
+ <p>Filler text</p>
+ <p class="nosynth">Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-02-ref.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-02-ref.html
new file mode 100644
index 0000000000..5f80bcdf5a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-02-ref.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-synthesis: style disables fake bold</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ .test {
+ font-family: "test";
+ font-size: 3em;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the second line is <em>not bold</em>), and there is no red.</p>
+<section class="test">
+ <p>Filler text</p>
+ <p class="nosynth">Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-02.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-02.html
new file mode 100644
index 0000000000..59243c4cb7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-02.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-synthesis: style disables fake bold</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-synthesis-02-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-synthesis-prop">
+<meta name="assert" content=" If ‘weight’ is not specified, user agents must not synthesize bold faces">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ @supports not (font-synthesis: style) {
+ .test {color: red;}
+ }
+ .test {
+ font-family: "test";
+ font-size: 3em;
+ }
+ .nosynth {
+ font-weight: bold;
+ font-synthesis: style;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the second line is <em>not bold</em>), and there is no red.</p>
+<section class="test">
+ <p>Filler text</p>
+ <p class="nosynth">Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-03-ref.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-03-ref.html
new file mode 100644
index 0000000000..8f36b31117
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-03-ref.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-synthesis: none disables fake italic/oblique</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ .test {
+ font-family: "test";
+ font-size: 3em;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the second line is <em>not obliqued</em>), and there is no red.</p>
+<section class="test">
+ <p>Filler text</p>
+ <p class="nosynth">Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-03.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-03.html
new file mode 100644
index 0000000000..53cac8ee40
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-03.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-synthesis: none disables fake italic/oblique</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-synthesis-03-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-synthesis-prop">
+<meta name="assert" content="if ‘style’ is not specified user agents must not synthesize italic faces">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ @supports not (font-synthesis: none) {
+ .test {color: red;}
+ }
+ .test {
+ font-family: "test";
+ font-size: 3em;
+ }
+ .nosynth {
+ font-style: italic;
+ font-synthesis: none;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the second line is <em>not obliqued</em>), and there is no red.</p>
+<section class="test">
+ <p>Filler text</p>
+ <p class="nosynth">Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-04-ref.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-04-ref.html
new file mode 100644
index 0000000000..f3b65481f2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-04-ref.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-synthesis: bold disables fake italic/oblique</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ .test {
+ font-family: "test";
+ font-size: 3em;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the second line is <em>not obliqued</em>), and there is no red.</p>
+<section class="test">
+ <p>Filler text</p>
+ <p class="nosynth">Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-04.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-04.html
new file mode 100644
index 0000000000..9081715469
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-04.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-synthesis: bold disables fake italic/oblique</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-synthesis-04-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-synthesis-prop">
+<meta name="assert" content="if ‘style’ is not specified user agents must not synthesize italic faces">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ @supports not (font-synthesis: weight) {
+ .test {color: red;}
+ }
+ .test {
+ font-family: "test";
+ font-size: 3em;
+ }
+ .nosynth {
+ font-style: italic;
+ font-synthesis: weight;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the second line is <em>not obliqued</em>), and there is no red.</p>
+<section class="test">
+ <p>Filler text</p>
+ <p class="nosynth">Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-05-ref.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-05-ref.html
new file mode 100644
index 0000000000..801889d156
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-05-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-synthesis: initial value</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ .test {
+ font-family: "test";
+ font-size: 3em;
+ font-synthesis: weight style;
+ color: green;
+ }
+</style>
+
+<p>Test passes if the text below is green, not red.</p>
+<section class="test">
+ <p>Filler text</p>
+ <!-- Synthesis is allowed, but not required -->
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-05.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-05.html
new file mode 100644
index 0000000000..e521e6c67c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-05.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-synthesis: initial value</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-synthesis-05-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-synthesis-prop">
+<meta name="assert" content="This property controls whether user agents are allowed to synthesize bold or oblique font faces">
+<style>
+ @font-face {
+ font-family: "test";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ @supports not (font-synthesis: weight style) {
+ .test p {color: red;}
+ }
+ .test {
+ font-family: "test";
+ font-size: 3em;
+ font-synthesis: weight style;
+ color: green;
+ }
+</style>
+
+<p>Test passes if the text below is green, not red.</p>
+<section class="test">
+ <p>Filler text</p>
+ <!-- Synthesis is allowed, but not required -->
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-06-ref.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-06-ref.html
new file mode 100644
index 0000000000..51871a4ff3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-06-ref.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>Reference: 'font-synthesis:none' with a font that support small-caps</title>
+<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font: 2em/1 fwf;
+ }
+</style>
+
+<p>Test passes if there are four check marks (✓), and zero crosses (✗). </p>
+<p class="test">CCC C</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-06.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-06.html
new file mode 100644
index 0000000000..2e190d1b99
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-06.html
@@ -0,0 +1,21 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>CSS Test: 'font-synthesis:none' with a font that support small-caps</title>
+<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-synthesis">
+<link rel="match" href="font-synthesis-06-ref.html">
+<meta name="assert" content="font-synthesis:none should not affect a font that supports small-caps">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font: 2em/1 fwf;
+ font-variant: small-caps;
+ font-synthesis: none;
+ }
+</style>
+
+<p>Test passes if there are four check marks (✓), and zero crosses (✗). </p>
+<p class="test">JJJ J</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-07-ref.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-07-ref.html
new file mode 100644
index 0000000000..428c8c4018
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-07-ref.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Reference: 'font-synthesis:none' with a font that doesn't support small-caps</title>
+<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
+<style>
+ @font-face {
+ font-family: Lato;
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ .test {
+ font: 2em/1 Lato;
+ }
+</style>
+
+<p>Test passes if "A" is upper-case and "bcd e" is lower-case.</p>
+<p class="test">Abcd e</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-07.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-07.html
new file mode 100644
index 0000000000..8f8572412d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-07.html
@@ -0,0 +1,21 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>CSS Test: 'font-synthesis:none' with a font that doesn't support small-caps</title>
+<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-synthesis">
+<link rel="match" href="font-synthesis-07-ref.html">
+<meta name="assert" content="font-synthesis:none inhibits synthesising small-caps">
+<style>
+ @font-face {
+ font-family: Lato;
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ .test {
+ font: 2em/1 Lato;
+ font-variant: small-caps;
+ font-synthesis: none;
+ }
+</style>
+
+<p>Test passes if "A" is upper-case and "bcd e" is lower-case.</p>
+<p class="test">Abcd e</p>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-08-ref.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-08-ref.html
new file mode 100644
index 0000000000..39cd4558d9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-08-ref.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: font-synthesis style and weight</title>
+<style>
+ @font-face {
+ font-family: "lato";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ .test {
+ font-family: "lato";
+ font-size: 3em;
+ }
+ .auto {
+ font-style: italic;
+ font-weight: bold;
+ }
+ .weight {
+ font-weight: bold;
+ }
+ .style {
+ font-style: italic;
+ }
+</style>
+
+<section class="test">
+ <p class="auto">Filler text</p>
+ <p class>Filler text</p>
+ <p class="weight">Filler text</p>
+ <p class="style">Filler text</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-08.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-08.html
new file mode 100644
index 0000000000..b3de1afcae
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-08.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: font-synthesis style and weight</title>
+<link rel="match" href="font-synthesis-08-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-synthesis">
+<meta name="assert" content="If ‘weight’/'style' is not specified for
+ font-synthesis property, user agents must not synthesize bold/italic faces">
+<style>
+ @font-face {
+ font-family: "lato";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ .test {
+ font-family: "lato";
+ font-size: 3em;
+ font-style: italic;
+ font-weight: bold;
+ }
+ .auto {
+ font-synthesis: weight style;
+ }
+ .none {
+ font-synthesis: none;
+ }
+ .weight {
+ font-synthesis: weight;
+ }
+ .style {
+ font-synthesis: style;
+ }
+</style>
+
+<!-- If a previous font-synthesis property and value was encountered by the
+ style engine, make sure that this newer value is correctly updated and not
+ confused with an earlier value due to incorrect caching. Appearance of the
+ 4 section needs to differ in weight and style respectively. -->
+<section class="test">
+ <p class="auto">Filler text</p>
+ <p class="none">Filler text</p>
+ <p class="weight">Filler text</p>
+ <p class="style">Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-position-001-ref.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-position-001-ref.html
new file mode 100644
index 0000000000..228dc652f2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-position-001-ref.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS reference</title>
+<style>
+ /* Lato has superscript Latin letters, but not subscript ones;
+ * digits are available in both super- and subscript form.
+ */
+ @font-face {
+ font-family: "lato";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ .test {
+ font-family: "lato";
+ font-size: 2em;
+ }
+ .sub {
+ font-feature-settings: 'subs' 1;
+ }
+ .super {
+ font-feature-settings: 'sups' 1;
+ }
+</style>
+
+<section class="test">
+ <p>Synthetic super- and subscripts <em>must not</em> be used:</p>
+ <p>Text with sub and <span class="sub">123</span> and <span class="sub">3.14</span></p>
+ <!-- note that Lato does not support a superscript FULL STOP -->
+ <p>Text with <span class="super">super</span> and <span class="super">123</span> and <span class="super">3</span>.<span class="super">14</span></p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-position-001.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-position-001.html
new file mode 100644
index 0000000000..1ed13f67c1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-position-001.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: font-synthesis-position: none disables fake super/subscripts</title>
+<link rel="match" href="font-synthesis-position-001-ref.html">
+<meta name="assert" content="font-synthesis-position:none must prevent synthesizing forms for font-variant-position">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-synthesis-intro">
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/7441#issuecomment-1680918811">
+
+<style>
+ /* Lato has superscript Latin letters, but not subscript ones;
+ * digits are available in both super- and subscript form.
+ */
+ @font-face {
+ font-family: "lato";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ @supports not (font-synthesis-position: none) {
+ .test::before {
+ color: red;
+ content: "font-synthesis-position is unsupported!"
+ }
+ }
+ .test {
+ font-family: "lato";
+ font-size: 2em;
+ }
+ .nosynth {
+ font-synthesis-position: none;
+ }
+ .sub {
+ font-variant-position: sub;
+ }
+ .super {
+ font-variant-position: super;
+ }
+</style>
+
+<section class="test nosynth">
+ <p>Synthetic super- and subscripts <em>must not</em> be used:</p>
+ <p>Text with <span class="sub">sub</span> and <span class="sub">123</span> and <span class="sub">3.14</span></p>
+ <!-- note that Lato does not support a superscript FULL STOP, so it will look bad! -->
+ <p>Text with <span class="super">super</span> and <span class="super">123</span> and <span class="super">3.14</span></p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-first-letter-ref.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-first-letter-ref.html
new file mode 100644
index 0000000000..8f66b7b298
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-first-letter-ref.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: font-synthesis-small-caps apply to ::first-letter</title>
+<!--Lato-Medium does not have small caps in the font-->
+<style>
+ @font-face {
+ font-family: "Lato-Medium";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ .test {
+ font-family: "Lato-Medium";
+ font-size: 3em;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical and there is no red.</p>
+<section class="test">
+ <p>placeholder</p>
+ <p>placeholder</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-first-letter.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-first-letter.html
new file mode 100644
index 0000000000..9e31777c73
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-first-letter.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: font-synthesis-small-caps apply to ::first-letter</title>
+<link rel="match" href="font-synthesis-small-caps-first-letter-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-synthesis-small-caps">
+<meta name="assert" content="If ‘small-caps’ is not specified, user agents must not synthesize small caps faces">
+<!--Lato-Medium does not have small caps in the font-->
+<style>
+ @font-face {
+ font-family: "Lato-Medium";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ @supports not (font-synthesis-small-caps: none) {
+ .test {color: red;}
+ }
+ .test {
+ font-family: "Lato-Medium";
+ font-size: 3em;
+ }
+ p.nosynth::first-letter {
+ font-variant: small-caps;
+ font-synthesis-small-caps: none;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical and there is no red.</p>
+<section class="test">
+ <p>placeholder</p>
+ <p class="nosynth">placeholder</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-first-line-ref.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-first-line-ref.html
new file mode 100644
index 0000000000..121f9412fb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-first-line-ref.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: font-synthesis-small-caps apply to ::first-line</title>
+<!--Lato-Medium does not have small caps in the font-->
+<style>
+ @font-face {
+ font-family: "Lato-Medium";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ .test {
+ font-family: "Lato-Medium";
+ font-size: 3em;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the first line is <em>not shown as small caps</em>), and there is no red.</p>
+<section class="test">
+ <p>Filler text<br>Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-first-line.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-first-line.html
new file mode 100644
index 0000000000..77d66e58d8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-first-line.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: font-synthesis-small-caps apply to ::first-line</title>
+<link rel="match" href="font-synthesis-small-caps-first-line-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-synthesis-small-caps">
+<meta name="assert" content="If ‘small-caps’ is not specified, user agents must not synthesize small caps faces">
+<!--Lato-Medium does not have small caps in the font-->
+<style>
+ @font-face {
+ font-family: "Lato-Medium";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ @supports not (font-synthesis-small-caps: none) {
+ .test {color: red;}
+ }
+ .test {
+ font-family: "Lato-Medium";
+ font-size: 3em;
+ }
+ p.nosynth::first-line {
+ font-variant: small-caps;
+ font-synthesis-small-caps: none;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the first line is <em>not shown as small caps</em>), and there is no red.</p>
+<section class="test">
+ <p class="nosynth">Filler text<br>Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-not-applied-ref.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-not-applied-ref.html
new file mode 100644
index 0000000000..6edfea4218
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-not-applied-ref.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: font-synthesis-small-caps with font that supports small-caps</title>
+<!--Exo-DemiBold has small caps in the font-->
+<style>
+ @font-face {
+ font-family: "exo";
+ src: url(support/fonts/Exo-DemiBold.otf);
+ }
+ .test {
+ font-family: "exo";
+ font-size: 3em;
+ font-variant: small-caps;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical and there is no red.</p>
+<section class="test">
+ <p>Filler text</p>
+ <p>Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-not-applied.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-not-applied.html
new file mode 100644
index 0000000000..7e05b012ed
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-not-applied.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: font-synthesis-small-caps with font that supports small-caps</title>
+<link rel="match" href="font-synthesis-small-caps-not-applied-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-synthesis-small-caps">
+<meta name="assert" content="If font supports small-caps ‘font-synthesis-small-caps’ should not have any effect">
+<!--Exo-DemiBold has small caps in the font-->
+<style>
+ @font-face {
+ font-family: "exo";
+ src: url(support/fonts/Exo-DemiBold.otf);
+ }
+ @supports not (font-synthesis-small-caps: none) {
+ .test {color: red;}
+ }
+ .test {
+ font-family: "exo";
+ font-size: 3em;
+ font-variant: small-caps;
+ }
+ .nosynth {
+ font-synthesis-small-caps: none;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical and there is no red.</p>
+<section class="test">
+ <p>Filler text</p>
+ <p class="nosynth">Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-ref.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-ref.html
new file mode 100644
index 0000000000..6851d55267
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps-ref.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: font-synthesis-small-caps: none disables fake small-caps</title>
+<!--Lato-Medium does not have small caps in the font-->
+<style>
+ @font-face {
+ font-family: "lato";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ .test {
+ font-family: "lato";
+ font-size: 3em;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the second line is <em>not shown as small caps</em>), and there is no red.</p>
+<section class="test">
+ <p>Filler text</p>
+ <p>Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps.html
new file mode 100644
index 0000000000..953ebf5a3a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-small-caps.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: font-synthesis-small-caps: none disables fake small caps</title>
+<link rel="match" href="font-synthesis-small-caps-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-synthesis-small-caps">
+<meta name="assert" content=" If ‘small-caps’ is not specified, user agents must not synthesize small caps faces">
+<!--Lato-Medium does not have small caps in the font-->
+<style>
+ @font-face {
+ font-family: "lato";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ @supports not (font-synthesis-small-caps: none) {
+ .test {color: red;}
+ }
+ .test {
+ font-family: "lato";
+ font-size: 3em;
+ }
+ .nosynth {
+ font-variant: small-caps;
+ font-synthesis-small-caps: none;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the second line is <em>not shown as small caps</em>), and there is no red.</p>
+<section class="test">
+ <p>Filler text</p>
+ <p class="nosynth">Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-style-binary-ref.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-style-binary-ref.html
new file mode 100644
index 0000000000..8ab9ecd295
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-style-binary-ref.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: font-synthesis-style: none disables fake italic/oblique</title>
+<style>
+ @font-face {
+ font-family: "NotoSans subset";
+ src: url(data:application/font-woff2;charset=utf-8;base64,d09GMgABAAAAAAs4ABEAAAAAEsAAAArbAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbgQ4cMgZgAGQIgX4JjzQREAqGGIU9CxQAATYCJAMkBCAFgjgHIAyEGhsoESMRwcYBBPS+OtlfHphDRE0PmY9orCaG8CHhhnQfLmmvI6tM6zjqEHjW5ciGfInp7m/Y/hupDzxeun7CTf/dXYIFq2myz6BitMwkK3UqKSRoBapGJ87E2okL/W6G/znV9yX5a3nMWOmGayEjhRbAMcbxEpAC1ivipYE4BLnteGCjFFInNLJmN4vOkKrBFt3w/9W9yiW0C6TCU1/Zdhn+txwkqSh/oClTy3NzlGzDdctb1y4bb0n6o/73PwA/+syKMLhc+9ducvdRcVERqApHStaYbJIHuTyi/YS5ArKqrJCtq6sjgvEVpg5YWNtjv/nQ2ix46gpueIuozzcNIABQM7C4bJcDqp5NBcUakNalI30Qe4609wJ3BUYHIBcF8MDYOpsVHQ8D6W0fGYBY2w8AqRkpwKAAZPVzhASScRkhILCl10/yyLeWYb0lE/KZ0Qu4o31REYXA1ltV4pgrE2oX2gk0KOjDtAUAsdUdkJegI0CBMUNjiqYwprZnK3bBmllbBzzOkrbtvwJ7J9jNATrxwRsAVBV9OwBw5kiS49ZIgbs9mn67/wVOmXbd+owYtWTN4/7N9j2OOeygPXbbEQJzWlksMCDU2yHBQrstHUdVQKxDRJbpqP/byO+I/ZXE/Ht9Z7Ue96r6H5hV0FHIAsoLwu/I6dtB8/+t59e5v3xXEoMabYr8LHnQ4qmRX8Rl0ADAPjtsstJRZ30G41h42nmH4e51elw65Dhi5C4bPhNAcXBklPu8HrckOuz1Ql1tTbWtqrKivKy0xFq8gJ8/b+6c2bNmzpg+bWqhuSC/U0mTUydPHD/GR9WRfbuicPs2DaNSKv7FfkEgvwYxUpQXrLnoxzrS+zrZ38yacweuICygTNzfP5nhQoIzJpYsSo1i/Jw6fL6GXy4I6ba4vXjHhOeyfvgNeSfMELaNtYTvvJo8ZZJMk1UKrbZIbqmo10LZ844vdVmxdlAyKitXm5sGo0XpGLNZbIh1ni9R5t2A9+BMfbNPoMhWKffS6aIBIVtKZ1IpWywYgNaQ+fNgXdwEyKyQ56i72Z8MxtfK3B9+6Vsoai7e0uBG8diABGyaeFLqx94jipHFGbJe/wtpopvI5UwjpywOTa4DBzUTXyUAbQyZ/G9Afl5ZdqoCIBORZOsBW4HsRpmXJHPOnR/LmXLv94FvkVCNKWQ/sUU9NqQdAQQDBF3l7kWJsiUP9K4T3LS7fYJ8cggxE48MMCfqFA7Ga95jdV2qKHxQ49OWE9BWyI5uQIdw7XHjOe3HMyWzOuPzFUIT5tBcavFOEjX5AfhzsQX2g9UP1u+eqQ5pz6PeF7eOVZoMTRkfXmMcaLDugl8MIFQDV/ROzuU4hPZ3qdhHR3TjnMU1EsjyXQJtgmyObVq3gTLpvC9HRK0VfSe910U76AZ3g3PLGNSsHV36eWcfQjVy21ERH4gMiCrLZ3WRL85ary7N59DZwiX5bnZCt0ABzyOWK2dYHZj27pRpH5llVcRWAf66EMzqe6uftPfXgVa3NMQT5jtYIr/KyyQ/WsRlsFnLpeKrBsSkHs/daIF1sgHOtchIBd4CBSybpkXW0anN+iWNtdfLWabN0BQPTTw01zdCar2ow1FGvYgWNvLkoI1QGDeQWSVX21YmnMhSXjuu3AYFg1z0EPBlBOSPBXJEIEUFWb+6g6SbGQbHt12gLAaJsdq/JBkMyDKEMyCVVYbSZNW0JK0U0WaDLOl+PxCh0G3Cxqo+jsG+C/+yZLjJljsEftwo8IdGHeHIgVDHO3Ke9p0eixwoTRcAJtmmRfRAEspitrWGci3iRNcVGSA+Mgj5aRzI4pi6V4+AithKCCf1UnZhPiHmUskrtVjOKwxDU357kyxDAWGMel9woEcAhwHvvKy+qnDkDQMNKnD523L/w0nzTr6uHaLFUFC8vEqalBgVl4Zgob7kgwXHQ1NiKP6uF4LbLJoPGGGrq9hycmgF850Tggc4RqFGOCeXZCYpV/RY+Z1v54U4ZW3Zf/cNgVutqCX4OKFfCTchyIRPeTwypnyFF1ImV8KJknuAxXy9r8NDr5Q2TY2LY7m3tuP99gYLIT6Mjd21AiDDXQGhL1EiLFOHVYZmBYyhAvF7/j0uA/kxAcUHaXLeTsEhuAM/pdevHMaMJ+ZicCv/0wggSBg45NBzCph6i2SdmC/F/hhA1dErEUSnij46XKdVquo+zdz3yFWBfG//2Odk3RfM+FsA2tdeY8bfcMGrry4be1XUvf66RqVkvGteYcZfgtCrGnt5jqWY5eOl4uNDEc4CFXAS88Ybg/j/8ww4+6m2ElqFXC4GNKCmQq/19jDtnUxXt6qjTbX6TqBvLzy9VGY/ZS8LxfyRmC1T0DM+eOE31af9P1J33/LQOfex9O7c417TCVZ55oM1+85p9hSgQ1tO2Fpurbr1ocw5j+VlfzZn9hfZeU9ktdwKsthb47M/bapcHnfuuVmuvc2Oi51Vt1btjXlSMa/vymBu6ipDo2bJ2FhX7LRix+ojzqPl5V/1/jt369xlzd52fsK8TLgwWziWcOyZZWFqfm7ztvzbnskHAJOYAVKGpPNsXxwzFRz5qq+m/cZeMguqRfJCSMQthFgPe1eXFxdbVU39UB1VRwf7k/XaBS/dWI6XloO/NA4ki0AlhwDm7uKES+Q3MJod52vDEBZhr6Q36Pi5epAjJctKZ3d+NEVNWhTUIcb/NUq1gQWRSgT86NPiDrvcOe9F3eQeaeE7JLdQrhJicliTip531duybW2trOpDXk5ck5Vlc39SFhoXVm+oQdvhhVDOimQlb5K8tInWbOGTNLPSKyqMJz1H8ahup9NI+VQgAOSMbu5N9eHPmnVzflMwCgAAeCH7Hk+1oe8f879vu92Klgu7EQMA0j8NGdXtgdo/7pbOtubiSuo5eIjKgCeodTAcejgZN1zPtZvHJzCpzAZj/CTdvhLZQbQeAxj0EjQA9BSxAQm0ycHbZCmlbm0CkxBEa5qEQQtDkwjMsGpvKjyJhkS3P6wM9J4Hq0FDlhrRrVOXUZwiZoWWOOUBMwg19mmfttKAVvlmgcP60vY5bHCM2gV7NGKRNm0oqjUIs0FyCMxpg2HqtJCaAMbUwHaAdy41tHzqF8io24A9GicPtwTmNCOV7Z63nVP4q5iegoqqPAEzr0gLOpyIX1ZZOAm49IOGnbBaCJcusRaibzgd6dLnp99IJz7BK8331nmxF7klj0B6zG7eHZ8o7KZcglPinOhHLniPKEkCf4lDImJFZBZ5MSS+KH4o0uYaVINrpfK2Mml+2Y0yXIZsUpVQKVVW69QJtZKlFtXGmWqBXZi1IZ1tvu2GjTgEuzTbjtTDCVK9IEjTJ6NVgTbWvRItDqazi4IL2IXBInaU9hwIojsFvPnJkyyJktxCJBmJsHd3EtvXbWJ7u+eyPd0V7IVu5DUhhanChCtMm01Pmshqww7DCwYSY4nm+yUaEYnaWSAPQeaTG4S0NU5hl7SilkYDG2i0sP7GbLaZmabhA9/Z+GQjfrPxy0ac2pYixVviJL1FJ+l0dTrM6l7QYQWRTyDDCKTUBtIDq93wA1B6QKF4RKM70c4J0ZGTY7tTHrHbwkrBF0abw0aHdXy9NyyTNw7S7nNPILTds2HbNijutnCRwx32p3k0a+M8C11InzYRD8VbMJiT0xQcXcggBwVyzeNBLoyfo0MSjCZYS60QJseRIgKaYJFLbAIAAA==);
+ font-style: normal;
+ font-weight: normal;
+ }
+ .test {
+ font-family: "NotoSans subset";
+ font-size: 3em;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the second line is <em>not obliqued</em>), and there is no red.</p>
+<section class="test">
+ <p>Filler text</p>
+ <p class="nosynth">Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-style-binary.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-style-binary.html
new file mode 100644
index 0000000000..1391d97386
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-style-binary.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: font-synthesis-style: none disables fake italic/oblique</title>
+<link rel="match" href="font-synthesis-style-binary-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-synthesis-style">
+<meta name="assert" content=" If ‘style’ is not specified, user agents must not synthesize italic faces for base64 encoded fonts">
+<style>
+ @font-face {
+ font-family: "NotoSans subset";
+ src: url(data:application/font-woff2;charset=utf-8;base64,d09GMgABAAAAAAs4ABEAAAAAEsAAAArbAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbgQ4cMgZgAGQIgX4JjzQREAqGGIU9CxQAATYCJAMkBCAFgjgHIAyEGhsoESMRwcYBBPS+OtlfHphDRE0PmY9orCaG8CHhhnQfLmmvI6tM6zjqEHjW5ciGfInp7m/Y/hupDzxeun7CTf/dXYIFq2myz6BitMwkK3UqKSRoBapGJ87E2okL/W6G/znV9yX5a3nMWOmGayEjhRbAMcbxEpAC1ivipYE4BLnteGCjFFInNLJmN4vOkKrBFt3w/9W9yiW0C6TCU1/Zdhn+txwkqSh/oClTy3NzlGzDdctb1y4bb0n6o/73PwA/+syKMLhc+9ducvdRcVERqApHStaYbJIHuTyi/YS5ArKqrJCtq6sjgvEVpg5YWNtjv/nQ2ix46gpueIuozzcNIABQM7C4bJcDqp5NBcUakNalI30Qe4609wJ3BUYHIBcF8MDYOpsVHQ8D6W0fGYBY2w8AqRkpwKAAZPVzhASScRkhILCl10/yyLeWYb0lE/KZ0Qu4o31REYXA1ltV4pgrE2oX2gk0KOjDtAUAsdUdkJegI0CBMUNjiqYwprZnK3bBmllbBzzOkrbtvwJ7J9jNATrxwRsAVBV9OwBw5kiS49ZIgbs9mn67/wVOmXbd+owYtWTN4/7N9j2OOeygPXbbEQJzWlksMCDU2yHBQrstHUdVQKxDRJbpqP/byO+I/ZXE/Ht9Z7Ue96r6H5hV0FHIAsoLwu/I6dtB8/+t59e5v3xXEoMabYr8LHnQ4qmRX8Rl0ADAPjtsstJRZ30G41h42nmH4e51elw65Dhi5C4bPhNAcXBklPu8HrckOuz1Ql1tTbWtqrKivKy0xFq8gJ8/b+6c2bNmzpg+bWqhuSC/U0mTUydPHD/GR9WRfbuicPs2DaNSKv7FfkEgvwYxUpQXrLnoxzrS+zrZ38yacweuICygTNzfP5nhQoIzJpYsSo1i/Jw6fL6GXy4I6ba4vXjHhOeyfvgNeSfMELaNtYTvvJo8ZZJMk1UKrbZIbqmo10LZ844vdVmxdlAyKitXm5sGo0XpGLNZbIh1ni9R5t2A9+BMfbNPoMhWKffS6aIBIVtKZ1IpWywYgNaQ+fNgXdwEyKyQ56i72Z8MxtfK3B9+6Vsoai7e0uBG8diABGyaeFLqx94jipHFGbJe/wtpopvI5UwjpywOTa4DBzUTXyUAbQyZ/G9Afl5ZdqoCIBORZOsBW4HsRpmXJHPOnR/LmXLv94FvkVCNKWQ/sUU9NqQdAQQDBF3l7kWJsiUP9K4T3LS7fYJ8cggxE48MMCfqFA7Ga95jdV2qKHxQ49OWE9BWyI5uQIdw7XHjOe3HMyWzOuPzFUIT5tBcavFOEjX5AfhzsQX2g9UP1u+eqQ5pz6PeF7eOVZoMTRkfXmMcaLDugl8MIFQDV/ROzuU4hPZ3qdhHR3TjnMU1EsjyXQJtgmyObVq3gTLpvC9HRK0VfSe910U76AZ3g3PLGNSsHV36eWcfQjVy21ERH4gMiCrLZ3WRL85ary7N59DZwiX5bnZCt0ABzyOWK2dYHZj27pRpH5llVcRWAf66EMzqe6uftPfXgVa3NMQT5jtYIr/KyyQ/WsRlsFnLpeKrBsSkHs/daIF1sgHOtchIBd4CBSybpkXW0anN+iWNtdfLWabN0BQPTTw01zdCar2ow1FGvYgWNvLkoI1QGDeQWSVX21YmnMhSXjuu3AYFg1z0EPBlBOSPBXJEIEUFWb+6g6SbGQbHt12gLAaJsdq/JBkMyDKEMyCVVYbSZNW0JK0U0WaDLOl+PxCh0G3Cxqo+jsG+C/+yZLjJljsEftwo8IdGHeHIgVDHO3Ke9p0eixwoTRcAJtmmRfRAEspitrWGci3iRNcVGSA+Mgj5aRzI4pi6V4+AithKCCf1UnZhPiHmUskrtVjOKwxDU357kyxDAWGMel9woEcAhwHvvKy+qnDkDQMNKnD523L/w0nzTr6uHaLFUFC8vEqalBgVl4Zgob7kgwXHQ1NiKP6uF4LbLJoPGGGrq9hycmgF850Tggc4RqFGOCeXZCYpV/RY+Z1v54U4ZW3Zf/cNgVutqCX4OKFfCTchyIRPeTwypnyFF1ImV8KJknuAxXy9r8NDr5Q2TY2LY7m3tuP99gYLIT6Mjd21AiDDXQGhL1EiLFOHVYZmBYyhAvF7/j0uA/kxAcUHaXLeTsEhuAM/pdevHMaMJ+ZicCv/0wggSBg45NBzCph6i2SdmC/F/hhA1dErEUSnij46XKdVquo+zdz3yFWBfG//2Odk3RfM+FsA2tdeY8bfcMGrry4be1XUvf66RqVkvGteYcZfgtCrGnt5jqWY5eOl4uNDEc4CFXAS88Ybg/j/8ww4+6m2ElqFXC4GNKCmQq/19jDtnUxXt6qjTbX6TqBvLzy9VGY/ZS8LxfyRmC1T0DM+eOE31af9P1J33/LQOfex9O7c417TCVZ55oM1+85p9hSgQ1tO2Fpurbr1ocw5j+VlfzZn9hfZeU9ktdwKsthb47M/bapcHnfuuVmuvc2Oi51Vt1btjXlSMa/vymBu6ipDo2bJ2FhX7LRix+ojzqPl5V/1/jt369xlzd52fsK8TLgwWziWcOyZZWFqfm7ztvzbnskHAJOYAVKGpPNsXxwzFRz5qq+m/cZeMguqRfJCSMQthFgPe1eXFxdbVU39UB1VRwf7k/XaBS/dWI6XloO/NA4ki0AlhwDm7uKES+Q3MJod52vDEBZhr6Q36Pi5epAjJctKZ3d+NEVNWhTUIcb/NUq1gQWRSgT86NPiDrvcOe9F3eQeaeE7JLdQrhJicliTip531duybW2trOpDXk5ck5Vlc39SFhoXVm+oQdvhhVDOimQlb5K8tInWbOGTNLPSKyqMJz1H8ahup9NI+VQgAOSMbu5N9eHPmnVzflMwCgAAeCH7Hk+1oe8f879vu92Klgu7EQMA0j8NGdXtgdo/7pbOtubiSuo5eIjKgCeodTAcejgZN1zPtZvHJzCpzAZj/CTdvhLZQbQeAxj0EjQA9BSxAQm0ycHbZCmlbm0CkxBEa5qEQQtDkwjMsGpvKjyJhkS3P6wM9J4Hq0FDlhrRrVOXUZwiZoWWOOUBMwg19mmfttKAVvlmgcP60vY5bHCM2gV7NGKRNm0oqjUIs0FyCMxpg2HqtJCaAMbUwHaAdy41tHzqF8io24A9GicPtwTmNCOV7Z63nVP4q5iegoqqPAEzr0gLOpyIX1ZZOAm49IOGnbBaCJcusRaibzgd6dLnp99IJz7BK8331nmxF7klj0B6zG7eHZ8o7KZcglPinOhHLniPKEkCf4lDImJFZBZ5MSS+KH4o0uYaVINrpfK2Mml+2Y0yXIZsUpVQKVVW69QJtZKlFtXGmWqBXZi1IZ1tvu2GjTgEuzTbjtTDCVK9IEjTJ6NVgTbWvRItDqazi4IL2IXBInaU9hwIojsFvPnJkyyJktxCJBmJsHd3EtvXbWJ7u+eyPd0V7IVu5DUhhanChCtMm01Pmshqww7DCwYSY4nm+yUaEYnaWSAPQeaTG4S0NU5hl7SilkYDG2i0sP7GbLaZmabhA9/Z+GQjfrPxy0ac2pYixVviJL1FJ+l0dTrM6l7QYQWRTyDDCKTUBtIDq93wA1B6QKF4RKM70c4J0ZGTY7tTHrHbwkrBF0abw0aHdXy9NyyTNw7S7nNPILTds2HbNijutnCRwx32p3k0a+M8C11InzYRD8VbMJiT0xQcXcggBwVyzeNBLoyfo0MSjCZYS60QJseRIgKaYJFLbAIAAA==);
+ font-style: normal;
+ font-weight: 400;
+ }
+ @supports not (font-synthesis-style: none) {
+ .test {color: red;}
+ }
+ .test {
+ font-family: "NotoSans subset";
+ font-size: 3em;
+ }
+ .nosynth {
+ font-style: italic;
+ font-synthesis-style: none;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the second line is <em>not obliqued</em>), and there is no red.</p>
+<section class="test">
+ <p>Filler text</p>
+ <p class="nosynth">Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-style-first-letter-ref.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-style-first-letter-ref.html
new file mode 100644
index 0000000000..c4f9b175de
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-style-first-letter-ref.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: font-synthesis-style apply to ::first-letter</title>
+<style>
+ @font-face {
+ font-family: "Lato-Medium";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ .test {
+ font-family: "Lato-Medium";
+ font-size: 3em;
+ font-kerning: none;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the second line is <em>not obliqued</em>), and there is no red.</p>
+<section class="test">
+ <p>Filler</p>
+ <p>Filler</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-style-first-letter.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-style-first-letter.html
new file mode 100644
index 0000000000..1296baf05f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-style-first-letter.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: font-synthesis-style apply to ::first-letter</title>
+<link rel="match" href="font-synthesis-style-first-letter-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-synthesis-style">
+<meta name="assert" content="If ‘style’ is not specified, user agents must not synthesize italic faces">
+<style>
+ @font-face {
+ font-family: "Lato-Medium";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ @supports not (font-synthesis-style: none) {
+ .test {color: red;}
+ }
+ .test {
+ font-family: "Lato-Medium";
+ font-size: 3em;
+ font-kerning: none;
+ }
+ p.nosynth::first-letter {
+ font-style: italic;
+ font-synthesis-style: none;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the second line is <em>not obliqued</em>), and there is no red.</p>
+<section class="test">
+ <p>Filler</p>
+ <p class="nosynth">Filler</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-style-first-line-ref.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-style-first-line-ref.html
new file mode 100644
index 0000000000..bef793609e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-style-first-line-ref.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: font-synthesis-style apply to ::first-line</title>
+<style>
+ @font-face {
+ font-family: "Lato-Medium";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ .test {
+ font-family: "Lato-Medium";
+ font-size: 3em;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the first line is <em>not obliqued</em>), and there is no red.</p>
+<section class="test">
+ <p>Filler text<br>Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-style-first-line.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-style-first-line.html
new file mode 100644
index 0000000000..147c8eb7ff
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-style-first-line.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: font-synthesis-style apply to ::first-line</title>
+<link rel="match" href="font-synthesis-style-first-line-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-synthesis-style">
+<meta name="assert" content="If ‘style’ is not specified, user agents must not synthesize italic faces">
+<style>
+ @font-face {
+ font-family: "Lato-Medium";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ @supports not (font-synthesis-style: none) {
+ .test {color: red;}
+ }
+ .test {
+ font-family: "Lato-Medium";
+ font-size: 3em;
+ }
+ p.nosynth::first-line {
+ font-style: italic;
+ font-synthesis-style: none;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the first line is <em>not obliqued</em>), and there is no red.</p>
+<section class="test">
+ <p class="nosynth">Filler text<br>Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-style-ref.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-style-ref.html
new file mode 100644
index 0000000000..969572344a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-style-ref.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: font-synthesis-style: none disables fake italic/oblique</title>
+<style>
+ @font-face {
+ font-family: "lato";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ .test {
+ font-family: "lato";
+ font-size: 3em;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the second line is <em>not obliqued</em>), and there is no red.</p>
+<section class="test">
+ <p>Filler text</p>
+ <p class="nosynth">Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-style.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-style.html
new file mode 100644
index 0000000000..2970e377ed
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-style.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: font-synthesis-style: none disables fake italic/oblique</title>
+<link rel="match" href="font-synthesis-style-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-synthesis-style">
+<meta name="assert" content=" If ‘style’ is not specified, user agents must not synthesize italic faces">
+<style>
+ @font-face {
+ font-family: "lato";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ @supports not (font-synthesis-style: none) {
+ .test {color: red;}
+ }
+ .test {
+ font-family: "lato";
+ font-size: 3em;
+ }
+ .nosynth {
+ font-style: italic;
+ font-synthesis-style: none;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the second line is <em>not obliqued</em>), and there is no red.</p>
+<section class="test">
+ <p>Filler text</p>
+ <p class="nosynth">Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-weight-binary-ref.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-weight-binary-ref.html
new file mode 100644
index 0000000000..67b9cc4b38
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-weight-binary-ref.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8">
+<title>CSS Test: font-synthesis-weight: none disables fake bold</title>
+<style>
+ @font-face {
+ font-family: "NotoSans subset";
+ src: url(data:application/font-woff2;charset=utf-8;base64,d09GMgABAAAAAAs4ABEAAAAAEsAAAArbAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbgQ4cMgZgAGQIgX4JjzQREAqGGIU9CxQAATYCJAMkBCAFgjgHIAyEGhsoESMRwcYBBPS+OtlfHphDRE0PmY9orCaG8CHhhnQfLmmvI6tM6zjqEHjW5ciGfInp7m/Y/hupDzxeun7CTf/dXYIFq2myz6BitMwkK3UqKSRoBapGJ87E2okL/W6G/znV9yX5a3nMWOmGayEjhRbAMcbxEpAC1ivipYE4BLnteGCjFFInNLJmN4vOkKrBFt3w/9W9yiW0C6TCU1/Zdhn+txwkqSh/oClTy3NzlGzDdctb1y4bb0n6o/73PwA/+syKMLhc+9ducvdRcVERqApHStaYbJIHuTyi/YS5ArKqrJCtq6sjgvEVpg5YWNtjv/nQ2ix46gpueIuozzcNIABQM7C4bJcDqp5NBcUakNalI30Qe4609wJ3BUYHIBcF8MDYOpsVHQ8D6W0fGYBY2w8AqRkpwKAAZPVzhASScRkhILCl10/yyLeWYb0lE/KZ0Qu4o31REYXA1ltV4pgrE2oX2gk0KOjDtAUAsdUdkJegI0CBMUNjiqYwprZnK3bBmllbBzzOkrbtvwJ7J9jNATrxwRsAVBV9OwBw5kiS49ZIgbs9mn67/wVOmXbd+owYtWTN4/7N9j2OOeygPXbbEQJzWlksMCDU2yHBQrstHUdVQKxDRJbpqP/byO+I/ZXE/Ht9Z7Ue96r6H5hV0FHIAsoLwu/I6dtB8/+t59e5v3xXEoMabYr8LHnQ4qmRX8Rl0ADAPjtsstJRZ30G41h42nmH4e51elw65Dhi5C4bPhNAcXBklPu8HrckOuz1Ql1tTbWtqrKivKy0xFq8gJ8/b+6c2bNmzpg+bWqhuSC/U0mTUydPHD/GR9WRfbuicPs2DaNSKv7FfkEgvwYxUpQXrLnoxzrS+zrZ38yacweuICygTNzfP5nhQoIzJpYsSo1i/Jw6fL6GXy4I6ba4vXjHhOeyfvgNeSfMELaNtYTvvJo8ZZJMk1UKrbZIbqmo10LZ844vdVmxdlAyKitXm5sGo0XpGLNZbIh1ni9R5t2A9+BMfbNPoMhWKffS6aIBIVtKZ1IpWywYgNaQ+fNgXdwEyKyQ56i72Z8MxtfK3B9+6Vsoai7e0uBG8diABGyaeFLqx94jipHFGbJe/wtpopvI5UwjpywOTa4DBzUTXyUAbQyZ/G9Afl5ZdqoCIBORZOsBW4HsRpmXJHPOnR/LmXLv94FvkVCNKWQ/sUU9NqQdAQQDBF3l7kWJsiUP9K4T3LS7fYJ8cggxE48MMCfqFA7Ga95jdV2qKHxQ49OWE9BWyI5uQIdw7XHjOe3HMyWzOuPzFUIT5tBcavFOEjX5AfhzsQX2g9UP1u+eqQ5pz6PeF7eOVZoMTRkfXmMcaLDugl8MIFQDV/ROzuU4hPZ3qdhHR3TjnMU1EsjyXQJtgmyObVq3gTLpvC9HRK0VfSe910U76AZ3g3PLGNSsHV36eWcfQjVy21ERH4gMiCrLZ3WRL85ary7N59DZwiX5bnZCt0ABzyOWK2dYHZj27pRpH5llVcRWAf66EMzqe6uftPfXgVa3NMQT5jtYIr/KyyQ/WsRlsFnLpeKrBsSkHs/daIF1sgHOtchIBd4CBSybpkXW0anN+iWNtdfLWabN0BQPTTw01zdCar2ow1FGvYgWNvLkoI1QGDeQWSVX21YmnMhSXjuu3AYFg1z0EPBlBOSPBXJEIEUFWb+6g6SbGQbHt12gLAaJsdq/JBkMyDKEMyCVVYbSZNW0JK0U0WaDLOl+PxCh0G3Cxqo+jsG+C/+yZLjJljsEftwo8IdGHeHIgVDHO3Ke9p0eixwoTRcAJtmmRfRAEspitrWGci3iRNcVGSA+Mgj5aRzI4pi6V4+AithKCCf1UnZhPiHmUskrtVjOKwxDU357kyxDAWGMel9woEcAhwHvvKy+qnDkDQMNKnD523L/w0nzTr6uHaLFUFC8vEqalBgVl4Zgob7kgwXHQ1NiKP6uF4LbLJoPGGGrq9hycmgF850Tggc4RqFGOCeXZCYpV/RY+Z1v54U4ZW3Zf/cNgVutqCX4OKFfCTchyIRPeTwypnyFF1ImV8KJknuAxXy9r8NDr5Q2TY2LY7m3tuP99gYLIT6Mjd21AiDDXQGhL1EiLFOHVYZmBYyhAvF7/j0uA/kxAcUHaXLeTsEhuAM/pdevHMaMJ+ZicCv/0wggSBg45NBzCph6i2SdmC/F/hhA1dErEUSnij46XKdVquo+zdz3yFWBfG//2Odk3RfM+FsA2tdeY8bfcMGrry4be1XUvf66RqVkvGteYcZfgtCrGnt5jqWY5eOl4uNDEc4CFXAS88Ybg/j/8ww4+6m2ElqFXC4GNKCmQq/19jDtnUxXt6qjTbX6TqBvLzy9VGY/ZS8LxfyRmC1T0DM+eOE31af9P1J33/LQOfex9O7c417TCVZ55oM1+85p9hSgQ1tO2Fpurbr1ocw5j+VlfzZn9hfZeU9ktdwKsthb47M/bapcHnfuuVmuvc2Oi51Vt1btjXlSMa/vymBu6ipDo2bJ2FhX7LRix+ojzqPl5V/1/jt369xlzd52fsK8TLgwWziWcOyZZWFqfm7ztvzbnskHAJOYAVKGpPNsXxwzFRz5qq+m/cZeMguqRfJCSMQthFgPe1eXFxdbVU39UB1VRwf7k/XaBS/dWI6XloO/NA4ki0AlhwDm7uKES+Q3MJod52vDEBZhr6Q36Pi5epAjJctKZ3d+NEVNWhTUIcb/NUq1gQWRSgT86NPiDrvcOe9F3eQeaeE7JLdQrhJicliTip531duybW2trOpDXk5ck5Vlc39SFhoXVm+oQdvhhVDOimQlb5K8tInWbOGTNLPSKyqMJz1H8ahup9NI+VQgAOSMbu5N9eHPmnVzflMwCgAAeCH7Hk+1oe8f879vu92Klgu7EQMA0j8NGdXtgdo/7pbOtubiSuo5eIjKgCeodTAcejgZN1zPtZvHJzCpzAZj/CTdvhLZQbQeAxj0EjQA9BSxAQm0ycHbZCmlbm0CkxBEa5qEQQtDkwjMsGpvKjyJhkS3P6wM9J4Hq0FDlhrRrVOXUZwiZoWWOOUBMwg19mmfttKAVvlmgcP60vY5bHCM2gV7NGKRNm0oqjUIs0FyCMxpg2HqtJCaAMbUwHaAdy41tHzqF8io24A9GicPtwTmNCOV7Z63nVP4q5iegoqqPAEzr0gLOpyIX1ZZOAm49IOGnbBaCJcusRaibzgd6dLnp99IJz7BK8331nmxF7klj0B6zG7eHZ8o7KZcglPinOhHLniPKEkCf4lDImJFZBZ5MSS+KH4o0uYaVINrpfK2Mml+2Y0yXIZsUpVQKVVW69QJtZKlFtXGmWqBXZi1IZ1tvu2GjTgEuzTbjtTDCVK9IEjTJ6NVgTbWvRItDqazi4IL2IXBInaU9hwIojsFvPnJkyyJktxCJBmJsHd3EtvXbWJ7u+eyPd0V7IVu5DUhhanChCtMm01Pmshqww7DCwYSY4nm+yUaEYnaWSAPQeaTG4S0NU5hl7SilkYDG2i0sP7GbLaZmabhA9/Z+GQjfrPxy0ac2pYixVviJL1FJ+l0dTrM6l7QYQWRTyDDCKTUBtIDq93wA1B6QKF4RKM70c4J0ZGTY7tTHrHbwkrBF0abw0aHdXy9NyyTNw7S7nNPILTds2HbNijutnCRwx32p3k0a+M8C11InzYRD8VbMJiT0xQcXcggBwVyzeNBLoyfo0MSjCZYS60QJseRIgKaYJFLbAIAAA==);
+ font-style: normal;
+ font-weight: normal;
+ }
+ .test {
+ font-family: "NotoSans subset";
+ font-size: 3em;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the second line is <em>not bold</em>), and there is no red.</p>
+<section class="test">
+ <p>Filler text</p>
+ <p class="nosynth">Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-weight-binary.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-weight-binary.html
new file mode 100644
index 0000000000..3af12a4f4e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-weight-binary.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8">
+<title>CSS Test: font-synthesis-weight: none disables fake bold</title>
+<link rel="match" href="font-synthesis-weight-binary-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-synthesis-weight">
+<meta name="assert" content=" If ‘weight’ is not specified, user agents must not synthesize bold faces for embedded fonts">
+<style>
+ @font-face {
+ font-family: "NotoSans subset";
+ src: url(data:application/font-woff2;charset=utf-8;base64,d09GMgABAAAAAAs4ABEAAAAAEsAAAArbAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYbgQ4cMgZgAGQIgX4JjzQREAqGGIU9CxQAATYCJAMkBCAFgjgHIAyEGhsoESMRwcYBBPS+OtlfHphDRE0PmY9orCaG8CHhhnQfLmmvI6tM6zjqEHjW5ciGfInp7m/Y/hupDzxeun7CTf/dXYIFq2myz6BitMwkK3UqKSRoBapGJ87E2okL/W6G/znV9yX5a3nMWOmGayEjhRbAMcbxEpAC1ivipYE4BLnteGCjFFInNLJmN4vOkKrBFt3w/9W9yiW0C6TCU1/Zdhn+txwkqSh/oClTy3NzlGzDdctb1y4bb0n6o/73PwA/+syKMLhc+9ducvdRcVERqApHStaYbJIHuTyi/YS5ArKqrJCtq6sjgvEVpg5YWNtjv/nQ2ix46gpueIuozzcNIABQM7C4bJcDqp5NBcUakNalI30Qe4609wJ3BUYHIBcF8MDYOpsVHQ8D6W0fGYBY2w8AqRkpwKAAZPVzhASScRkhILCl10/yyLeWYb0lE/KZ0Qu4o31REYXA1ltV4pgrE2oX2gk0KOjDtAUAsdUdkJegI0CBMUNjiqYwprZnK3bBmllbBzzOkrbtvwJ7J9jNATrxwRsAVBV9OwBw5kiS49ZIgbs9mn67/wVOmXbd+owYtWTN4/7N9j2OOeygPXbbEQJzWlksMCDU2yHBQrstHUdVQKxDRJbpqP/byO+I/ZXE/Ht9Z7Ue96r6H5hV0FHIAsoLwu/I6dtB8/+t59e5v3xXEoMabYr8LHnQ4qmRX8Rl0ADAPjtsstJRZ30G41h42nmH4e51elw65Dhi5C4bPhNAcXBklPu8HrckOuz1Ql1tTbWtqrKivKy0xFq8gJ8/b+6c2bNmzpg+bWqhuSC/U0mTUydPHD/GR9WRfbuicPs2DaNSKv7FfkEgvwYxUpQXrLnoxzrS+zrZ38yacweuICygTNzfP5nhQoIzJpYsSo1i/Jw6fL6GXy4I6ba4vXjHhOeyfvgNeSfMELaNtYTvvJo8ZZJMk1UKrbZIbqmo10LZ844vdVmxdlAyKitXm5sGo0XpGLNZbIh1ni9R5t2A9+BMfbNPoMhWKffS6aIBIVtKZ1IpWywYgNaQ+fNgXdwEyKyQ56i72Z8MxtfK3B9+6Vsoai7e0uBG8diABGyaeFLqx94jipHFGbJe/wtpopvI5UwjpywOTa4DBzUTXyUAbQyZ/G9Afl5ZdqoCIBORZOsBW4HsRpmXJHPOnR/LmXLv94FvkVCNKWQ/sUU9NqQdAQQDBF3l7kWJsiUP9K4T3LS7fYJ8cggxE48MMCfqFA7Ga95jdV2qKHxQ49OWE9BWyI5uQIdw7XHjOe3HMyWzOuPzFUIT5tBcavFOEjX5AfhzsQX2g9UP1u+eqQ5pz6PeF7eOVZoMTRkfXmMcaLDugl8MIFQDV/ROzuU4hPZ3qdhHR3TjnMU1EsjyXQJtgmyObVq3gTLpvC9HRK0VfSe910U76AZ3g3PLGNSsHV36eWcfQjVy21ERH4gMiCrLZ3WRL85ary7N59DZwiX5bnZCt0ABzyOWK2dYHZj27pRpH5llVcRWAf66EMzqe6uftPfXgVa3NMQT5jtYIr/KyyQ/WsRlsFnLpeKrBsSkHs/daIF1sgHOtchIBd4CBSybpkXW0anN+iWNtdfLWabN0BQPTTw01zdCar2ow1FGvYgWNvLkoI1QGDeQWSVX21YmnMhSXjuu3AYFg1z0EPBlBOSPBXJEIEUFWb+6g6SbGQbHt12gLAaJsdq/JBkMyDKEMyCVVYbSZNW0JK0U0WaDLOl+PxCh0G3Cxqo+jsG+C/+yZLjJljsEftwo8IdGHeHIgVDHO3Ke9p0eixwoTRcAJtmmRfRAEspitrWGci3iRNcVGSA+Mgj5aRzI4pi6V4+AithKCCf1UnZhPiHmUskrtVjOKwxDU357kyxDAWGMel9woEcAhwHvvKy+qnDkDQMNKnD523L/w0nzTr6uHaLFUFC8vEqalBgVl4Zgob7kgwXHQ1NiKP6uF4LbLJoPGGGrq9hycmgF850Tggc4RqFGOCeXZCYpV/RY+Z1v54U4ZW3Zf/cNgVutqCX4OKFfCTchyIRPeTwypnyFF1ImV8KJknuAxXy9r8NDr5Q2TY2LY7m3tuP99gYLIT6Mjd21AiDDXQGhL1EiLFOHVYZmBYyhAvF7/j0uA/kxAcUHaXLeTsEhuAM/pdevHMaMJ+ZicCv/0wggSBg45NBzCph6i2SdmC/F/hhA1dErEUSnij46XKdVquo+zdz3yFWBfG//2Odk3RfM+FsA2tdeY8bfcMGrry4be1XUvf66RqVkvGteYcZfgtCrGnt5jqWY5eOl4uNDEc4CFXAS88Ybg/j/8ww4+6m2ElqFXC4GNKCmQq/19jDtnUxXt6qjTbX6TqBvLzy9VGY/ZS8LxfyRmC1T0DM+eOE31af9P1J33/LQOfex9O7c417TCVZ55oM1+85p9hSgQ1tO2Fpurbr1ocw5j+VlfzZn9hfZeU9ktdwKsthb47M/bapcHnfuuVmuvc2Oi51Vt1btjXlSMa/vymBu6ipDo2bJ2FhX7LRix+ojzqPl5V/1/jt369xlzd52fsK8TLgwWziWcOyZZWFqfm7ztvzbnskHAJOYAVKGpPNsXxwzFRz5qq+m/cZeMguqRfJCSMQthFgPe1eXFxdbVU39UB1VRwf7k/XaBS/dWI6XloO/NA4ki0AlhwDm7uKES+Q3MJod52vDEBZhr6Q36Pi5epAjJctKZ3d+NEVNWhTUIcb/NUq1gQWRSgT86NPiDrvcOe9F3eQeaeE7JLdQrhJicliTip531duybW2trOpDXk5ck5Vlc39SFhoXVm+oQdvhhVDOimQlb5K8tInWbOGTNLPSKyqMJz1H8ahup9NI+VQgAOSMbu5N9eHPmnVzflMwCgAAeCH7Hk+1oe8f879vu92Klgu7EQMA0j8NGdXtgdo/7pbOtubiSuo5eIjKgCeodTAcejgZN1zPtZvHJzCpzAZj/CTdvhLZQbQeAxj0EjQA9BSxAQm0ycHbZCmlbm0CkxBEa5qEQQtDkwjMsGpvKjyJhkS3P6wM9J4Hq0FDlhrRrVOXUZwiZoWWOOUBMwg19mmfttKAVvlmgcP60vY5bHCM2gV7NGKRNm0oqjUIs0FyCMxpg2HqtJCaAMbUwHaAdy41tHzqF8io24A9GicPtwTmNCOV7Z63nVP4q5iegoqqPAEzr0gLOpyIX1ZZOAm49IOGnbBaCJcusRaibzgd6dLnp99IJz7BK8331nmxF7klj0B6zG7eHZ8o7KZcglPinOhHLniPKEkCf4lDImJFZBZ5MSS+KH4o0uYaVINrpfK2Mml+2Y0yXIZsUpVQKVVW69QJtZKlFtXGmWqBXZi1IZ1tvu2GjTgEuzTbjtTDCVK9IEjTJ6NVgTbWvRItDqazi4IL2IXBInaU9hwIojsFvPnJkyyJktxCJBmJsHd3EtvXbWJ7u+eyPd0V7IVu5DUhhanChCtMm01Pmshqww7DCwYSY4nm+yUaEYnaWSAPQeaTG4S0NU5hl7SilkYDG2i0sP7GbLaZmabhA9/Z+GQjfrPxy0ac2pYixVviJL1FJ+l0dTrM6l7QYQWRTyDDCKTUBtIDq93wA1B6QKF4RKM70c4J0ZGTY7tTHrHbwkrBF0abw0aHdXy9NyyTNw7S7nNPILTds2HbNijutnCRwx32p3k0a+M8C11InzYRD8VbMJiT0xQcXcggBwVyzeNBLoyfo0MSjCZYS60QJseRIgKaYJFLbAIAAA==);
+ font-style: normal;
+ font-weight: normal;
+ }
+ @supports not (font-synthesis-weight: none) {
+ .test {color: red;}
+ }
+ .test {
+ font-family: "NotoSans subset";
+ font-size: 3em;
+ }
+ .nosynth {
+ font-weight: 700;
+ font-synthesis-weight: none;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the second line is <em>not bold</em>), and there is no red.</p>
+<section class="test">
+ <p>Filler text</p>
+ <p class="nosynth">Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-weight-first-letter-ref.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-weight-first-letter-ref.html
new file mode 100644
index 0000000000..fd29f4134d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-weight-first-letter-ref.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: font-synthesis-weight apply to ::first-letter</title>
+<style>
+ @font-face {
+ font-family: "Lato-Medium";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ .test {
+ font-family: "Lato-Medium";
+ font-size: 3em;
+ font-kerning: none;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the second line is <em>not bold</em>), and there is no red.</p>
+<section class="test">
+ <p>Filler</p>
+ <p>Filler</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-weight-first-letter.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-weight-first-letter.html
new file mode 100644
index 0000000000..3d60b2a228
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-weight-first-letter.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: font-synthesis-weight apply to ::first-letter</title>
+<link rel="match" href="font-synthesis-weight-first-letter-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-synthesis-weight">
+<meta name="assert" content="If ‘weight’ is not specified, user agents must not synthesize bold faces">
+<style>
+ @font-face {
+ font-family: "Lato-Medium";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ @supports not (font-synthesis-weight: none) {
+ .test {color: red;}
+ }
+ .test {
+ font-family: "Lato-Medium";
+ font-size: 3em;
+ font-kerning: none;
+ }
+ p.nosynth::first-letter {
+ font-weight: bold;
+ font-synthesis-weight: none;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the second line is <em>not bold</em>), and there is no red.</p>
+<section class="test">
+ <p>Filler</p>
+ <p class="nosynth">Filler</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-weight-first-line-ref.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-weight-first-line-ref.html
new file mode 100644
index 0000000000..b92bd2c980
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-weight-first-line-ref.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: font-synthesis-weight apply to ::first-line</title>
+<style>
+ @font-face {
+ font-family: "Lato-Medium";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ .test {
+ font-family: "Lato-Medium";
+ font-size: 3em;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the first line is <em>not bold</em>), and there is no red.</p>
+<section class="test">
+ <p>Filler text<br>Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-weight-first-line.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-weight-first-line.html
new file mode 100644
index 0000000000..5093a9e17b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-weight-first-line.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: font-synthesis-weight apply to ::first-line</title>
+<link rel="match" href="font-synthesis-weight-first-line-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-synthesis-weight">
+<meta name="assert" content="If ‘weight’ is not specified, user agents must not synthesize bold faces">
+<style>
+ @font-face {
+ font-family: "Lato-Medium";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ @supports not (font-synthesis-weight: none) {
+ .test {color: red;}
+ }
+ .test {
+ font-family: "Lato-Medium";
+ font-size: 3em;
+ }
+ p.nosynth::first-line {
+ font-weight: bold;
+ font-synthesis-weight: none;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the first line is <em>not bold</em>), and there is no red.</p>
+<section class="test">
+ <p class="nosynth">Filler text<br>Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-weight-ref.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-weight-ref.html
new file mode 100644
index 0000000000..8d5e3f6e08
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-weight-ref.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8">
+<title>CSS Test: font-synthesis-weight: none disables fake bold</title>
+<style>
+ @font-face {
+ font-family: "lato";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ .test {
+ font-family: "lato";
+ font-size: 3em;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the second line is <em>not bold</em>), and there is no red.</p>
+<section class="test">
+ <p>Filler text</p>
+ <p class="nosynth">Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-synthesis-weight.html b/testing/web-platform/tests/css/css-fonts/font-synthesis-weight.html
new file mode 100644
index 0000000000..6213817edf
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-synthesis-weight.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8">
+<title>CSS Test: font-synthesis-weight: none disables fake bold</title>
+<link rel="match" href="font-synthesis-weight-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-synthesis-weight">
+<meta name="assert" content=" If ‘weight’ is not specified, user agents must not synthesize bold faces">
+<style>
+ @font-face {
+ font-family: "lato";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ @supports not (font-synthesis-weight: none) {
+ .test {color: red;}
+ }
+ .test {
+ font-family: "lato";
+ font-size: 3em;
+ }
+ .nosynth {
+ font-weight: bold;
+ font-synthesis-weight: none;
+ }
+</style>
+
+<p>Test passes if the two lines below are identical (the second line is <em>not bold</em>), and there is no red.</p>
+<section class="test">
+ <p>Filler text</p>
+ <p class="nosynth">Filler text</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-01-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-01-ref.html
new file mode 100644
index 0000000000..abd1dc1747
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-01-ref.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant: normal; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2.4em;
+ line-height: 1.1;
+ color: purple;
+ }
+ .child {
+ color: green;
+ }
+</style>
+
+<body>
+<p>Test passes if the two lines below are identical, with (in purple) eight check marks (✓),
+and then (in green) three check marks (✓) followed by five crosses (✗). </p>
+<section class="test">
+ <p class="ref">AAAAAAAA<span class="child">AAABBBBB</span></p>
+ <p class="ref">AAAAAAAA<span class="child">AAABBBBB</span></p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-01.html b/testing/web-platform/tests/css/css-fonts/font-variant-01.html
new file mode 100644
index 0000000000..ed69967d3b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-01.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant: normal; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-01-ref.html">
+<meta name="assert" content="The value ‘normal’ resets all subproperties of ‘font-variant’ to their inital value">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2.4em;
+ line-height: 1.1;
+ color: purple;
+ }
+ .inner {
+ font-variant: normal;
+ }
+ .outer {
+ font-variant-ligatures: common-ligatures discretionary-ligatures historical-ligatures contextual;
+ font-variant-numeric: oldstyle-nums;
+ font-variant-caps: small-caps;
+ font-variant-east-asian: jis90;
+ }
+ .child {
+ color: green;
+ }
+</style>
+
+<body>
+<p>Test passes if the two lines below are identical, with (in purple) eight check marks (✓),
+and then (in green) three check marks (✓) followed by five crosses (✗). </p>
+<section class="test">
+ <p class="outer">CDGFEJQa<span class="inner child">CDGFEJQa</span></p>
+ <p class="ref">AAAAAAAA<span class="child">AAABBBBB</span></p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-02-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-02-ref.html
new file mode 100644
index 0000000000..137d6e5dc9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-02-ref.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant: none; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2.4em;
+ line-height: 1.1;
+ color: purple;
+ }
+ .child {
+ color: green;
+ }
+</style>
+
+<body>
+<p>Test passes if the two lines below are identical, with (in purple) eight check marks (✓),
+and then (in green) eight crosses (✗). </p>
+<section class="test">
+ <p class="ref">AAAAAAAA<span class="child">BBBBBBBB</span></p>
+ <p class="ref">AAAAAAAA<span class="child">BBBBBBBB</span></p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-02.html b/testing/web-platform/tests/css/css-fonts/font-variant-02.html
new file mode 100644
index 0000000000..acda863b7d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-02.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant: none; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-02-ref.html">
+<meta name="assert" content="The ‘none’ value sets ‘font-variant-ligatures’ to ‘none’ and resets all other font feature properties to their initial value">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2.4em;
+ line-height: 1.1;
+ color: purple;
+ }
+ .inner {
+ font-variant: none;
+ }
+ .outer {
+ font-variant-ligatures: common-ligatures discretionary-ligatures historical-ligatures contextual;
+ font-variant-numeric: oldstyle-nums;
+ font-variant-caps: small-caps;
+ font-variant-east-asian: jis90;
+ }
+ .child {
+ color: green;
+ }
+</style>
+
+<body>
+<p>Test passes if the two lines below are identical, with (in purple) eight check marks (✓),
+and then (in green) eight crosses (✗). </p>
+<section class="test">
+ <p class="outer">CDGFEJQa<span class="inner child">CDGFEJQa</span></p>
+ <p class="ref">AAAAAAAA<span class="child">BBBBBBBB</span></p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-03-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-03-ref.html
new file mode 100644
index 0000000000..8b566168da
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-03-ref.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant: normal; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2.4em;
+ line-height: 1.1;
+ color: purple;
+ }
+ .child {
+ color: green;
+ }
+</style>
+
+<body>
+<p>Test passes if the two lines below are identical, with (in purple) eight check marks (✓),
+and then (in green) eight check marks (✓). </p>
+<section class="test">
+ <p class="ref">AAAAAAAA<span class="child">AAAAAAAA</span></p>
+ <p class="ref">AAAAAAAA<span class="child">AAAAAAAA</span></p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-03.html b/testing/web-platform/tests/css/css-fonts/font-variant-03.html
new file mode 100644
index 0000000000..7e130cc831
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-03.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant: normal; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-03-ref.html">
+<meta name="assert" content="The value ‘normal’ resets all subproperties of ‘font-variant’ to their inital value. It does not reset the values of either ‘font-language-override’ or ‘font-feature-settings’">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2.4em;
+ line-height: 1.1;
+ color: purple;
+ }
+ .inner {
+ font-variant: normal;
+ }
+ .outer {
+ font-feature-settings: "liga" on, "clig" on, "calt" on, "hlig" on, "dlig" on, "onum" on, "smcp" on, "jp90" on;
+ }
+ .child {
+ color: green;
+ }
+</style>
+
+<body>
+<p>Test passes if the two lines below are identical, with (in purple) eight check marks (✓),
+and then (in green) eight check marks (✓). </p>
+<section class="test">
+ <p class="outer">CDGFEJQa<span class="inner child">CDGFEJQa</span></p>
+ <p class="ref">AAAAAAAA<span class="child">AAAAAAAA</span></p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-04-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-04-ref.html
new file mode 100644
index 0000000000..12810edc47
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-04-ref.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant: none; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2.4em;
+ line-height: 1.1;
+ color: purple;
+ }
+ .child {
+ color: green;
+ }
+</style>
+
+<body>
+<p>Test passes if the two lines below are identical, with (in purple) eight check marks (✓),
+and then (in green) eight check marks (✓). </p>
+<section class="test">
+ <p class="ref">AAAAAAAA<span class="child">AAAAAAAA</span></p>
+ <p class="ref">AAAAAAAA<span class="child">AAAAAAAA</span></p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-04.html b/testing/web-platform/tests/css/css-fonts/font-variant-04.html
new file mode 100644
index 0000000000..be426398ee
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-04.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant: none; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-04-ref.html">
+<meta name="assert" content="The ‘none’ value sets ‘font-variant-ligatures’ to ‘none’ and resets all other font feature properties to their initial value. It does not reset the values of either ‘font-language-override’ or ‘font-feature-settings’">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2.4em;
+ line-height: 1.1;
+ color: purple;
+ }
+ .inner {
+ font-variant: none;
+ }
+ .outer {
+ font-feature-settings: "liga" on, "clig" on, "calt" on, "hlig" on, "dlig" on, "onum" on, "smcp" on, "jp90" on;
+ }
+ .child {
+ color: green;
+ }
+</style>
+
+<body>
+<p>Test passes if the two lines below are identical, with (in purple) eight check marks (✓),
+and then (in green) eight check marks (✓). </p>
+<section class="test">
+ <p class="outer">CDGFEJQa<span class="inner child">CDGFEJQa</span></p>
+ <p class="ref">AAAAAAAA<span class="child">AAAAAAAA</span></p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-01-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-01-ref.html
new file mode 100644
index 0000000000..0ded6cd76c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-01-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: normal; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with twenty crosses (✗).</p>
+<section class="test">
+ <p class="ref">BBBBBBBBBBBBBBBBBBBB</p>
+ <p class="ref">BBBBBBBBBBBBBBBBBBBB</p>
+ <p class="ref">BBBBBBBBBBBBBBBBBBBB</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-01.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-01.html
new file mode 100644
index 0000000000..82c465fed5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-01.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: normal; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-alternates-01-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop">
+<meta name="assert" content="None of the features listed below are enabled. ">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-alternates: normal;
+ }
+ .low {
+ font-feature-settings: "hist" off, "salt" 00, "ss01" off, "ss02" off, "ss03" off,
+ "cv01" off, "cv02" off, "cv03" off, "swsh" 00, "cswh" 00, "ornm" 00, "nalt" 00;
+ }
+
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with twenty crosses (✗).</p>
+<section class="test">
+ <p class="high">Xnophijklmqrstuvwxyz</p>
+ <p class="low">Xnophijklmqrstuvwxyz</p>
+ <p class="ref">BBBBBBBBBBBBBBBBBBBB</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-02-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-02-ref.html
new file mode 100644
index 0000000000..a74c5206c0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-02-ref.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: historical-forms; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+
+<!-- very minimal test, only tests hist, does not test salt or stylistic sets -->
+
+<p>Test passes if the three lines below are identical, with one check mark (✓) followed by nineteen crosses (✗). </p>
+<section class="test">
+ <p class="ref">ABBBBBBBBBBBBBBBBBBB</p>
+ <p class="ref">ABBBBBBBBBBBBBBBBBBB</p>
+ <p class="ref">ABBBBBBBBBBBBBBBBBBB</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-02.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-02.html
new file mode 100644
index 0000000000..9610508177
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-02.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: historical-forms; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-alternates-02-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop">
+<meta name="assert" content="Enables display of historical forms (OpenType feature: hist)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-alternates: historical-forms;
+ }
+ .low {
+ font-feature-settings: "hist" on, "salt" 00, "ss01" off, "ss02" off, "ss03" off,
+ "cv01" off, "cv02" off, "cv03" off, "swsh" 00, "cswh" 00, "ornm" 00, "nalt" 00;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with one check mark (✓) followed by nineteen crosses (✗). </p>
+<section class="test">
+ <p class="high">Xnophijklmqrstuvwxyz</p>
+ <p class="low">Xnophijklmqrstuvwxyz</p>
+ <p class="ref">ABBBBBBBBBBBBBBBBBBB</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-03-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-03-ref.html
new file mode 100644
index 0000000000..5285d025b8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-03-ref.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: stylistic(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ @font-feature-values fwf {
+ @stylistic {
+ foo: 1;
+ bar: 2;
+ baz: 3;
+ }
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with one cross (✗), one check mark (✓) followed by eighteen crosses (✗). </p>
+<section class="test">
+ <p class="ref">BABBBBBBBBBBBBBBBBBB</p>
+ <p class="ref">BABBBBBBBBBBBBBBBBBB</p>
+ <p class="ref">BABBBBBBBBBBBBBBBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-03.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-03.html
new file mode 100644
index 0000000000..1027363726
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-03.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: stylistic(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-alternates-03-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values">
+<meta name="assert" content="Enables display of stylistic alternates (font specific, OpenType feature: salt &lt;feature-index&gt;)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ @font-feature-values fwf {
+ @stylistic {
+ foo: 1;
+ bar: 2;
+ baz: 3;
+ }
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ font-variant-alternates: character-variant(doesnt-exist) styleset(doesnt-exist);
+ }
+ .high {
+ font-variant-alternates: stylistic(foo);
+ }
+ .low {
+ font-feature-settings: "hist" off, "salt" 01, "ss01" off, "ss02" off, "ss03" off,
+ "cv01" off, "cv02" off, "cv03" off, "swsh" 00, "cswh" 00, "ornm" 00, "nalt" 00;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with one cross (✗), one check mark (✓) followed by eighteen crosses (✗). </p>
+<section class="test">
+ <p class="high">Xnophijklmqrstuvwxyz</p>
+ <p class="low">Xnophijklmqrstuvwxyz</p>
+ <p class="ref">BABBBBBBBBBBBBBBBBBB</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-04-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-04-ref.html
new file mode 100644
index 0000000000..1beb9b0732
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-04-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: stylistic(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with two crosses (✗), one check mark (✓) followed by seventeen crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBABBBBBBBBBBBBBBBBB</p>
+ <p class="ref">BBABBBBBBBBBBBBBBBBB</p>
+ <p class="ref">BBABBBBBBBBBBBBBBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-04.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-04.html
new file mode 100644
index 0000000000..abd361bbf8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-04.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: stylistic(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-alternates-04-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values">
+<meta name="assert" content="Enables display of stylistic alternates (font specific, OpenType feature: salt &lt;feature-index&gt;)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ @font-feature-values fwf {
+ @stylistic {
+ foo: 1;
+ bar: 2;
+ baz: 3;
+ }
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-alternates: stylistic(bar);
+ }
+ .low {
+ font-feature-settings: "hist" off, "salt" 02, "ss01" off, "ss02" off, "ss03" off,
+ "cv01" off, "cv02" off, "cv03" off, "swsh" 00, "cswh" 00, "ornm" 00, "nalt" 00;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with two crosses (✗), one check mark (✓) followed by seventeen crosses (✗). </p>
+<section class="test">
+ <p class="high">Xnophijklmqrstuvwxyz</p>
+ <p class="low">Xnophijklmqrstuvwxyz</p>
+ <p class="ref">BBABBBBBBBBBBBBBBBBB</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-05-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-05-ref.html
new file mode 100644
index 0000000000..49427186be
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-05-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: stylistic(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with three crosses (✗), one check mark (✓) followed by sixteen crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBBABBBBBBBBBBBBBBBB</p>
+ <p class="ref">BBBABBBBBBBBBBBBBBBB</p>
+ <p class="ref">BBBABBBBBBBBBBBBBBBB</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-05.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-05.html
new file mode 100644
index 0000000000..5ea6450da6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-05.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: stylistic(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-alternates-05-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values">
+<meta name="assert" content="Enables display of stylistic alternates (font specific, OpenType feature: salt &lt;feature-index&gt;)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ @font-feature-values fwf {
+ @stylistic {
+ foo: 1;
+ bar: 2;
+ baz: 3;
+ }
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-alternates: stylistic(baz);
+ }
+ .low {
+ font-feature-settings: "hist" off, "salt" 03, "ss01" off, "ss02" off, "ss03" off,
+ "cv01" off, "cv02" off, "cv03" off, "swsh" 00, "cswh" 00, "ornm" 00, "nalt" 00;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with three crosses (✗), one check mark (✓) followed by sixteen crosses (✗). </p>
+<section class="test">
+ <p class="high">Xnophijklmqrstuvwxyz</p>
+ <p class="low">Xnophijklmqrstuvwxyz</p>
+ <p class="ref">BBBABBBBBBBBBBBBBBBB</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-06-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-06-ref.html
new file mode 100644
index 0000000000..b2fc91762e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-06-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: styleset(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with four crosses (✗), one check mark (✓) followed by fifteen crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBBBABBBBBBBBBBBBBBB</p>
+ <p class="ref">BBBBABBBBBBBBBBBBBBB</p>
+ <p class="ref">BBBBABBBBBBBBBBBBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-06.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-06.html
new file mode 100644
index 0000000000..c3f315723c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-06.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: styleset(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-alternates-06-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values">
+<meta name="assert" content="Enables display with stylistic sets (font specific, OpenType feature: ss&lt;feature-index&gt;">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ @font-feature-values fwf {
+ @styleset {
+ foo: 1;
+ bar: 2;
+ baz: 3;
+ }
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ font-variant-alternates: styleset(doesnt-exist);
+ }
+ .high {
+ font-variant-alternates: styleset(foo);
+ }
+ .low {
+ font-feature-settings: "hist" off, "salt" 00, "ss01" on, "ss02" off, "ss03" off,
+ "cv01" off, "cv02" off, "cv03" off, "swsh" 00, "cswh" 00, "ornm" 00, "nalt" 00;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with four crosses (✗), one check mark (✓) followed by fifteen crosses (✗). </p>
+<section class="test">
+ <p class="high">Xnophijklmqrstuvwxyz</p>
+ <p class="low">Xnophijklmqrstuvwxyz</p>
+ <p class="ref">BBBBABBBBBBBBBBBBBBB</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-07-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-07-ref.html
new file mode 100644
index 0000000000..6c2694b0e6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-07-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: styleset(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with five crosses (✗), one check mark (✓) followed by fourteen crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBBBBABBBBBBBBBBBBBB</p>
+ <p class="ref">BBBBBABBBBBBBBBBBBBB</p>
+ <p class="ref">BBBBBABBBBBBBBBBBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-07.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-07.html
new file mode 100644
index 0000000000..fdcba5f699
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-07.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: styleset(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-alternates-07-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values">
+<meta name="assert" content="Enables display with stylistic sets (font specific, OpenType feature: ss&lt;feature-index&gt;">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ @font-feature-values fwf {
+ @styleset {
+ foo: 1;
+ bar: 2;
+ baz: 3;
+ }
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-alternates: styleset(bar);
+ }
+ .low {
+ font-feature-settings: "hist" off, "salt" 00, "ss01" off, "ss02" on, "ss03" off,
+ "cv01" off, "cv02" off, "cv03" off, "swsh" 00, "cswh" 00, "ornm" 00, "nalt" 00;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with five crosses (✗), one check mark (✓) followed by fourteen crosses (✗). </p>
+<section class="test">
+ <p class="high">Xnophijklmqrstuvwxyz</p>
+ <p class="low">Xnophijklmqrstuvwxyz</p>
+ <p class="ref">BBBBBABBBBBBBBBBBBBB</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-08-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-08-ref.html
new file mode 100644
index 0000000000..f757daa2c8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-08-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: styleset(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with six crosses (✗), one check mark (✓) followed by thirteen crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBBBBBABBBBBBBBBBBBB</p>
+ <p class="ref">BBBBBBABBBBBBBBBBBBB</p>
+ <p class="ref">BBBBBBABBBBBBBBBBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-08.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-08.html
new file mode 100644
index 0000000000..4ec305b59d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-08.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: styleset(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-alternates-08-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values">
+<meta name="assert" content="Enables display with stylistic sets (font specific, OpenType feature: ss&lt;feature-index&gt;">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ @font-feature-values fwf {
+ @styleset {
+ foo: 1;
+ bar: 2;
+ baz: 3;
+ }
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-alternates: styleset(baz);
+ }
+ .low {
+ font-feature-settings: "hist" off, "salt" 00, "ss01" off, "ss02" off, "ss03" on,
+ "cv01" off, "cv02" off, "cv03" off, "swsh" 00, "cswh" 00, "ornm" 00, "nalt" 00;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with six crosses (✗), one check mark (✓) followed by thirteen crosses (✗). </p>
+<section class="test">
+ <p class="high">Xnophijklmqrstuvwxyz</p>
+ <p class="low">Xnophijklmqrstuvwxyz</p>
+ <p class="ref">BBBBBBABBBBBBBBBBBBB</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-09-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-09-ref.html
new file mode 100644
index 0000000000..e1f1b3a4c2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-09-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: character-variant(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with seven crosses (✗), one check mark (✓) followed by twelve crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBBBBBBABBBBBBBBBBBB</p>
+ <p class="ref">BBBBBBBABBBBBBBBBBBB</p>
+ <p class="ref">BBBBBBBABBBBBBBBBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-09.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-09.html
new file mode 100644
index 0000000000..2c67b1439e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-09.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: character-variant(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-alternates-09-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values">
+<meta name="assert" content="Enables display of specific character variants (font specific, OpenType feature: cv&lt;feature-index&gt;">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ @font-feature-values fwf {
+ @character-variant {
+ foo: 1;
+ bar: 2;
+ baz: 3;
+ }
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ font-variant-alternates: character-variant(doesnt-exist);
+ }
+ .high {
+ font-variant-alternates: character-variant(foo);
+ }
+ .low {
+ font-feature-settings: "hist" off, "salt" 00, "ss01" off, "ss02" off, "ss03" off,
+ "cv01" on, "cv02" off, "cv03" off, "swsh" 00, "cswh" 00, "ornm" 00, "nalt" 00;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with seven crosses (✗), one check mark (✓) followed by twelve crosses (✗). </p>
+<section class="test">
+ <p class="high">Xnophijklmqrstuvwxyz</p>
+ <p class="low">Xnophijklmqrstuvwxyz</p>
+ <p class="ref">BBBBBBBABBBBBBBBBBBB</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-10-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-10-ref.html
new file mode 100644
index 0000000000..2319128d2b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-10-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: character-variant(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with eight crosses (✗), one check mark (✓) followed by eleven crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBBBBBBBABBBBBBBBBBB</p>
+ <p class="ref">BBBBBBBBABBBBBBBBBBB</p>
+ <p class="ref">BBBBBBBBABBBBBBBBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-10.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-10.html
new file mode 100644
index 0000000000..ac8341d8ab
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-10.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: character-variant(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-alternates-10-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values">
+<meta name="assert" content="Enables display of specific character variants (font specific, OpenType feature: cv&lt;feature-index&gt;">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ @font-feature-values fwf {
+ @character-variant {
+ foo: 1;
+ bar: 2;
+ baz: 3;
+ }
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-alternates: character-variant(bar);
+ }
+ .low {
+ font-feature-settings: "hist" off, "salt" 00, "ss01" off, "ss02" off, "ss03" off,
+ "cv01" off, "cv02" on, "cv03" off, "swsh" 00, "cswh" 00, "ornm" 00, "nalt" 00;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with eight crosses (✗), one check mark (✓) followed by eleven crosses (✗). </p>
+<section class="test">
+ <p class="high">Xnophijklmqrstuvwxyz</p>
+ <p class="low">Xnophijklmqrstuvwxyz</p>
+ <p class="ref">BBBBBBBBABBBBBBBBBBB</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-11-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-11-ref.html
new file mode 100644
index 0000000000..f3f5fa652b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-11-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: character-variant(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with nine crosses (✗), one check mark (✓) followed by ten crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBBBBBBBBABBBBBBBBBB</p>
+ <p class="ref">BBBBBBBBBABBBBBBBBBB</p>
+ <p class="ref">BBBBBBBBBABBBBBBBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-11.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-11.html
new file mode 100644
index 0000000000..2e73fc07ae
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-11.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: character-variant(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-alternates-11-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values">
+<meta name="assert" content="Enables display of specific character variants (font specific, OpenType feature: cv&lt;feature-index&gt;">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ @font-feature-values fwf {
+ @character-variant {
+ foo: 1;
+ bar: 2;
+ baz: 3;
+ }
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-alternates: character-variant(baz);
+ }
+ .low {
+ font-feature-settings: "hist" off, "salt" 00, "ss01" off, "ss02" off, "ss03" off,
+ "cv01" off, "cv02" off, "cv03" on, "swsh" 00, "cswh" 00, "ornm" 00, "nalt" 00;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with nine crosses (✗), one check mark (✓) followed by ten crosses (✗). </p>
+<section class="test">
+ <p class="high">Xnophijklmqrstuvwxyz</p>
+ <p class="low">Xnophijklmqrstuvwxyz</p>
+ <p class="ref">BBBBBBBBBABBBBBBBBBB</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-12-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-12-ref.html
new file mode 100644
index 0000000000..6080f70b0e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-12-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: swash(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with ten crosses (✗), one check mark (✓), two crosses (✗), one check mark (✓) followed by six crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBBBBBBBBBABBABBBBBB</p>
+ <p class="ref">BBBBBBBBBBABBABBBBBB</p>
+ <p class="ref">BBBBBBBBBBABBABBBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-12.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-12.html
new file mode 100644
index 0000000000..0f2b9d317b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-12.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: swash(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-alternates-12-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values">
+<meta name="assert" content="Enables display of swash glyphs (font specific, OpenType feature: swsh &lt;feature-index&gt;, cswh &lt;feature-index&gt;).">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ @font-feature-values fwf {
+ @swash {
+ foo: 1;
+ bar: 2;
+ baz: 3;
+ }
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ font-variant-alternates: swash(doesnt-exist);
+ }
+ .high {
+ font-variant-alternates: swash(foo);
+ }
+ .low {
+ font-feature-settings: "hist" off, "salt" 00, "ss01" off, "ss02" off, "ss03" off,
+ "cv01" off, "cv02" off, "cv03" off, "swsh" 01, "cswh" 01, "ornm" 00, "nalt" 00;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with ten crosses (✗), one check mark (✓), two crosses (✗), one check mark (✓) followed by six crosses (✗). </p>
+<section class="test">
+ <p class="high">Xnophijklmqrstuvwxyz</p>
+ <p class="low">Xnophijklmqrstuvwxyz</p>
+ <p class="ref">BBBBBBBBBBABBABBBBBB</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-13-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-13-ref.html
new file mode 100644
index 0000000000..9e52824dd1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-13-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: swash(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with eleven crosses (✗), one check mark (✓), two crosses (✗), one check mark (✓) followed by five crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBBBBBBBBBBABBABBBBB</p>
+ <p class="ref">BBBBBBBBBBBABBABBBBB</p>
+ <p class="ref">BBBBBBBBBBBABBABBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-13.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-13.html
new file mode 100644
index 0000000000..872c7dd827
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-13.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: swash(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-alternates-13-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values">
+<meta name="assert" content="Enables display of swash glyphs (font specific, OpenType feature: swsh &lt;feature-index&gt;, cswh &lt;feature-index&gt;).">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ @font-feature-values fwf {
+ @swash {
+ foo: 1;
+ bar: 2;
+ baz: 3;
+ }
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-alternates: swash(bar);
+ }
+ .low {
+ font-feature-settings: "hist" off, "salt" 00, "ss01" off, "ss02" off, "ss03" off,
+ "cv01" off, "cv02" off, "cv03" off, "swsh" 02, "cswh" 02, "ornm" 00, "nalt" 00;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with eleven crosses (✗), one check mark (✓), two crosses (✗), one check mark (✓) followed by five crosses (✗). </p>
+<section class="test">
+ <p class="high">Xnophijklmqrstuvwxyz</p>
+ <p class="low">Xnophijklmqrstuvwxyz</p>
+ <p class="ref">BBBBBBBBBBBABBABBBBB</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-14-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-14-ref.html
new file mode 100644
index 0000000000..f18a7fabed
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-14-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: swash(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with twelve crosses (✗), one check mark (✓), two crosses (✗), one check mark (✓) followed by four crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBBBBBBBBBBBABBABBBB</p>
+ <p class="ref">BBBBBBBBBBBBABBABBBB</p>
+ <p class="ref">BBBBBBBBBBBBABBABBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-14.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-14.html
new file mode 100644
index 0000000000..45c2d02302
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-14.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: swash(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-alternates-14-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values">
+<meta name="assert" content="Enables display of swash glyphs (font specific, OpenType feature: swsh &lt;feature-index&gt;, cswh &lt;feature-index&gt;).">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ @font-feature-values fwf {
+ @swash {
+ foo: 1;
+ bar: 2;
+ baz: 3;
+ }
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-alternates: swash(baz);
+ }
+ .low {
+ font-feature-settings: "hist" off, "salt" 00, "ss01" off, "ss02" off, "ss03" off,
+ "cv01" off, "cv02" off, "cv03" off, "swsh" 03, "cswh" 03, "ornm" 00, "nalt" 00;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with twelve crosses (✗), one check mark (✓), two crosses (✗), one check mark (✓) followed by four crosses (✗). </p>
+<section class="test">
+ <p class="high">Xnophijklmqrstuvwxyz</p>
+ <p class="low">Xnophijklmqrstuvwxyz</p>
+ <p class="ref">BBBBBBBBBBBBABBABBBB</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-15-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-15-ref.html
new file mode 100644
index 0000000000..d62930c9a9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-15-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: ornaments(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with sixteen crosses (✗), one check mark (✓) followed by three crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBBBBBBBBBBBBBBBABBB</p>
+ <p class="ref">BBBBBBBBBBBBBBBBABBB</p>
+ <p class="ref">BBBBBBBBBBBBBBBBABBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-15.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-15.html
new file mode 100644
index 0000000000..58a58d3cd1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-15.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: ornaments(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-alternates-15-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values">
+<meta name="assert" content="Enables replacement of default glyphs with ornaments, if provided in the font (font specific, OpenType feature: ornm &lt;feature-index&gt;).">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ @font-feature-values fwf {
+ @ornaments {
+ foo: 1;
+ bar: 2;
+ baz: 3;
+ }
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ font-variant-alternates: ornaments(doesnt-exist);
+ }
+ .high {
+ font-variant-alternates: ornaments(foo);
+ }
+ .low {
+ font-feature-settings: "hist" off, "salt" 00, "ss01" off, "ss02" off, "ss03" off,
+ "cv01" off, "cv02" off, "cv03" off, "swsh" 00, "cswh" 00, "ornm" 01, "nalt" 00;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with sixteen crosses (✗), one check mark (✓) followed by three crosses (✗). </p>
+<section class="test">
+ <p class="high">Xnophijklmqrstuvwxyz</p>
+ <p class="low">Xnophijklmqrstuvwxyz</p>
+ <p class="ref">BBBBBBBBBBBBBBBBABBB</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-16-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-16-ref.html
new file mode 100644
index 0000000000..a588897b4c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-16-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: ornaments(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with seventeen crosses (✗), one check mark (✓) followed by two crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBBBBBBBBBBBBBBBBABB</p>
+ <p class="ref">BBBBBBBBBBBBBBBBBABB</p>
+ <p class="ref">BBBBBBBBBBBBBBBBBABB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-16.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-16.html
new file mode 100644
index 0000000000..8353073ae1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-16.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: ornaments(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-alternates-16-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values">
+<meta name="assert" content="Enables replacement of default glyphs with ornaments, if provided in the font (font specific, OpenType feature: ornm &lt;feature-index&gt;).">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ @font-feature-values fwf {
+ @ornaments {
+ foo: 1;
+ bar: 2;
+ baz: 3;
+ }
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-alternates: ornaments(bar);
+ }
+ .low {
+ font-feature-settings: "hist" off, "salt" 00, "ss01" off, "ss02" off, "ss03" off,
+ "cv01" off, "cv02" off, "cv03" off, "swsh" 00, "cswh" 00, "ornm" 02, "nalt" 00;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with seventeen crosses (✗), one check mark (✓) followed by two crosses (✗). </p>
+<section class="test">
+ <p class="high">Xnophijklmqrstuvwxyz</p>
+ <p class="low">Xnophijklmqrstuvwxyz</p>
+ <p class="ref">BBBBBBBBBBBBBBBBBABB</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-17-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-17-ref.html
new file mode 100644
index 0000000000..332d1a19d9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-17-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: ornaments(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with eighteen crosses (✗), one check mark (✓) followed by one cross (✗). </p>
+<section class="test">
+ <p class="ref">BBBBBBBBBBBBBBBBBBAB</p>
+ <p class="ref">BBBBBBBBBBBBBBBBBBAB</p>
+ <p class="ref">BBBBBBBBBBBBBBBBBBAB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-17.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-17.html
new file mode 100644
index 0000000000..799bf653f8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-17.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: ornaments(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-alternates-17-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values">
+<meta name="assert" content="Enables replacement of default glyphs with ornaments, if provided in the font (font specific, OpenType feature: ornm &lt;feature-index&gt;).">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ @font-feature-values fwf {
+ @ornaments {
+ foo: 1;
+ bar: 2;
+ baz: 3;
+ }
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-alternates: ornaments(baz);
+ }
+ .low {
+ font-feature-settings: "hist" off, "salt" 00, "ss01" off, "ss02" off, "ss03" off,
+ "cv01" off, "cv02" off, "cv03" off, "swsh" 00, "cswh" 00, "ornm" 03, "nalt" 00;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with eighteen crosses (✗), one check mark (✓) followed by one cross (✗). </p>
+<section class="test">
+ <p class="high">Xnophijklmqrstuvwxyz</p>
+ <p class="low">Xnophijklmqrstuvwxyz</p>
+ <p class="ref">BBBBBBBBBBBBBBBBBBAB</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-18-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-18-ref.html
new file mode 100644
index 0000000000..cd54bef9a8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-18-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: ornaments(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with nineteen crosses (✗), then one check mark (✓). </p>
+<section class="test">
+ <p class="ref">BBBBBBBBBBBBBBBBBBBA</p>
+ <p class="ref">BBBBBBBBBBBBBBBBBBBA</p>
+ <p class="ref">BBBBBBBBBBBBBBBBBBBA</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-18.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-18.html
new file mode 100644
index 0000000000..26e1ecd0c2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-18.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: ornaments(); low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-alternates-18-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values">
+<meta name="assert" content="Enables display of alternate annotation forms (font specific, OpenType feature: nalt &lt;feature-index&gt;).">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ @font-feature-values fwf {
+ @annotation {
+ foo: 1;
+ bar: 2;
+ baz: 3;
+ }
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ font-variant-alternates: annotation(doesnt-exist);
+ }
+ .high {
+ font-variant-alternates: annotation(foo);
+ }
+ .low {
+ font-feature-settings: "hist" off, "salt" 00, "ss01" off, "ss02" off, "ss03" off,
+ "cv01" off, "cv02" off, "cv03" off, "swsh" 00, "cswh" 00, "ornm" 00, "nalt" 01;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with nineteen crosses (✗), then one check mark (✓). </p>
+<section class="test">
+ <p class="high">Xnophijklmqrstuvwxyz</p>
+ <p class="low">Xnophijklmqrstuvwxyz</p>
+ <p class="ref">BBBBBBBBBBBBBBBBBBBA</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-19-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-19-ref.html
new file mode 100644
index 0000000000..22c178c64f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-19-ref.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: multiple @font-feature-values rules</title>
+<link rel="author" title="Dominik Röttsches" href="drott@chromium.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with 4 crosses (✗), then
+three check marks (✓), then 11 crosses (✗), then 1 checkmark (✓).</p>
+<section class="test">
+ <p class="ref">BBBBAAABBBBBBBBBBBAB</p>
+ <p class="ref">BBBBAAABBBBBBBBBBBAB</p>
+ <p class="ref">BBBBAAABBBBBBBBBBBAB</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-19.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-19.html
new file mode 100644
index 0000000000..6e9caf2e47
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-19.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: multiple @font-feature-values rules</title>
+<link rel="author" title="Dominik Röttsches" href="drott@chromium.org">
+<link rel="match" href="font-variant-alternates-19-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values">
+<meta name="assert" content="If multiple @font-feature-values rules are defined for a given family, the
+resulting values definitions are the union of the definitions contained within these rules.">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ @font-feature-values fwf {
+ @styleset {
+ foo: 4;
+ bar: 2;
+ }
+ }
+ @font-feature-values fwf {
+ @styleset {
+ baz: 3;
+ }
+ }
+ @font-feature-values fwf {
+ @styleset {
+ foo: 1; /* Overrides foo from first rule. */
+ }
+ @ornaments {
+ baz: 3;
+ }
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-alternates: styleset(foo,bar,baz) ornaments(baz);
+ }
+ .low {
+ font-feature-settings: "hist" off, "salt" 00, "ss01" on, "ss02" on, "ss03" on,
+ "cv01" off, "cv02" off, "cv03" off, "swsh" 00, "cswh" 00, "ornm" 03, "nalt" 00;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with 4 crosses (✗), then
+three check marks (✓), then 11 crosses (✗), then 1 checkmark (✓).</p>
+<section class="test">
+ <p class="high">Xnophijklmqrstuvwxyz</p>
+ <p class="low">Xnophijklmqrstuvwxyz</p>
+ <p class="ref">BBBBAAABBBBBBBBBBBAB</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-layers-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-layers-ref.html
new file mode 100644
index 0000000000..fc6ea2bc95
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-layers-ref.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: multiple @font-feature-values rules</title>
+<link rel="author" title="Dominik Röttsches" href="drott@chromium.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with 4 crosses (✗), then
+one check mark (✓), then one cross (✗), then one check mark (✓), then 13 crosses
+(✗).</p>
+<section class="test">
+ <p class="ref">BBBBABABBBBBBBBBBBBB</p>
+ <p class="ref">BBBBABABBBBBBBBBBBBB</p>
+ <p class="ref">BBBBABABBBBBBBBBBBBB</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-layers.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-layers.html
new file mode 100644
index 0000000000..2cd60985da
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-layers.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-alternates: multiple @font-feature-values rules</title>
+<link rel="author" title="Dominik Röttsches" href="drott@chromium.org">
+<link rel="match" href="font-variant-alternates-layers-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-feature-settings-prop">
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-feature-values">
+<meta name="assert" content="Aliases @font-feature-values are joined correctly across cascade layers.">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+
+ @layer one, two, three;
+
+ @layer three {
+ #test {
+ background-color: orange;
+ }
+ @font-feature-values fwf {
+ @styleset {
+ foo: 1;
+ bar: 1;
+ }
+ }
+ }
+
+ @layer one {
+ #test {
+ background-color: silver;
+ }
+ @font-feature-values fwf {
+ @styleset {
+ foo: 2;
+ bar: 2;
+ baz: 2;
+ }
+ }
+ }
+
+ @layer two {
+ #test {
+ background-color: lightblue;
+ }
+ @font-feature-values fwf {
+ @styleset {
+ baz: 3;
+ }
+ }
+ }
+
+ .test {
+ font-family: fwf;
+ font-size: 2em;
+ line-height: 1.1;
+ }
+
+ .high {
+ font-variant-alternates: styleset(foo,bar,baz);
+ }
+ .low {
+ font-feature-settings: "hist" off, "salt" 00, "ss01" on, "ss02" off, "ss03" on,
+ "cv01" off, "cv02" off, "cv03" off, "swsh" 00, "cswh" 00, "ornm" 00, "nalt" 00;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with 4 crosses (✗), then
+one check mark (✓), then one cross (✗), then one check mark (✓), then 13 crosses
+(✗).</p>
+<section class="test">
+ <p class="high">Xnophijklmqrstuvwxyz</p>
+ <p class="low">Xnophijklmqrstuvwxyz</p>
+ <p class="ref">BBBBABABBBBBBBBBBBBB</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-alternates-parsing.html b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-parsing.html
new file mode 100644
index 0000000000..216ed0dba0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-alternates-parsing.html
@@ -0,0 +1,19 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test: font-variant-alternates: historical-forms; parses case-insensitively</title>
+<link rel="author" title="Emilio Cobos Álvarez" href="emilio@crisal.io">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-variant-alternates-prop">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div></div>
+<script>
+test(function() {
+ let div = document.querySelector('div');
+ div.style.fontVariantAlternates = "Historical-Forms";
+ assert_equals(
+ getComputedStyle(div).fontVariantAlternates,
+ "historical-forms",
+ "historical-forms is parsed case-insensitively"
+ );
+});
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-caps-01-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-caps-01-ref.html
new file mode 100644
index 0000000000..68f9ef0c00
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-caps-01-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-caps: normal; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with six crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBBBBB</p>
+ <p class="ref">BBBBBB</p>
+ <p class="ref">BBBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-caps-01.html b/testing/web-platform/tests/css/css-fonts/font-variant-caps-01.html
new file mode 100644
index 0000000000..9e96486e33
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-caps-01.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-caps: normal; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-caps-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-caps-01-ref.html">
+<meta name="assert" content="None of the features listed below are enabled. ">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-caps: normal;
+ }
+ .low {
+ font-feature-settings: "smcp" off, "c2sc" off, "pcap" off, "c2pc" off, "unic" off, "titl" off;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with six crosses (✗). </p>
+<section class="test">
+ <p class="high">JKLMNO</p>
+ <p class="low">JKLMNO</p>
+ <p class="ref">BBBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-caps-02-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-caps-02-ref.html
new file mode 100644
index 0000000000..4bdb94fa1f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-caps-02-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-caps: small-caps; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ </style>
+<body>
+<p>Test passes if the three lines below are identical, with one check mark (✓) followed by five crosses (✗). </p>
+<section class="test">
+ <p class="ref">ABBBBB</p>
+ <p class="ref">ABBBBB</p>
+ <p class="ref">ABBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-caps-02.html b/testing/web-platform/tests/css/css-fonts/font-variant-caps-02.html
new file mode 100644
index 0000000000..1e73873f6b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-caps-02.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-caps: small-caps; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-caps-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-caps-02-ref.html">
+<meta name="assert" content="Enables display of small capitals (OpenType feature: smcp)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-caps: small-caps;
+ }
+ .low {
+ font-feature-settings: "smcp" on, "c2sc" off, "pcap" off, "c2pc" off, "unic" off, "titl" off;
+ }
+.ref {
+
+}
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with one check mark (✓) followed by five crosses (✗). </p>
+<section class="test">
+ <p class="high">JKLMNO</p>
+ <p class="low">JKLMNO</p>
+ <p class="ref">ABBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-caps-03-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-caps-03-ref.html
new file mode 100644
index 0000000000..b1e9c6c57a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-caps-03-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-caps: all-small-caps; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ </style>
+<body>
+<p>Test passes if the three lines below are identical, with two check marks (✓) followed by four crosses (✗). </p>
+<section class="test">
+ <p class="ref">AABBBB</p>
+ <p class="ref">AABBBB</p>
+ <p class="ref">AABBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-caps-03.html b/testing/web-platform/tests/css/css-fonts/font-variant-caps-03.html
new file mode 100644
index 0000000000..3aaabc7111
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-caps-03.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-caps: all-small-caps; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-caps-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-caps-03-ref.html">
+<meta name="assert" content="Enables display of small capitals for both upper and lowercase letters (OpenType features: c2sc, smcp)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-caps: all-small-caps;
+ }
+ .low {
+ font-feature-settings: "smcp" on, "c2sc" on, "pcap" off, "c2pc" off, "unic" off, "titl" off;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with two check marks (✓) followed by four crosses (✗). </p>
+<section class="test">
+ <p class="high">JKLMNO</p>
+ <p class="low">JKLMNO</p>
+ <p class="ref">AABBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-caps-04-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-caps-04-ref.html
new file mode 100644
index 0000000000..bba3bea407
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-caps-04-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-caps: petite-caps; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with two crosses (✗), one check mark (✓) and three more crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBABBB</p>
+ <p class="ref">BBABBB</p>
+ <p class="ref">BBABBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-caps-04.html b/testing/web-platform/tests/css/css-fonts/font-variant-caps-04.html
new file mode 100644
index 0000000000..69390e3602
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-caps-04.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-caps: petite-caps; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-caps-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-caps-04-ref.html">
+<meta name="assert" content="Enables display of small capitals for both upper and lowercase letters (OpenType features: c2sc, smcp)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-caps: petite-caps;
+ }
+ .low {
+ font-feature-settings: "smcp" off, "c2sc" off, "pcap" on, "c2pc" off, "unic" off, "titl" off;
+ }
+.ref {
+
+}
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with two crosses (✗), one check mark (✓) and three more crosses (✗). </p>
+<section class="test">
+ <p class="high">JKLMNO</p>
+ <p class="low">JKLMNO</p>
+ <p class="ref">BBABBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-caps-05-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-caps-05-ref.html
new file mode 100644
index 0000000000..fa7cad719c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-caps-05-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-caps: all-petite-caps; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with two crosses (✗), two check marks (✓) and two more crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBAABB</p>
+ <p class="ref">BBAABB</p>
+ <p class="ref">BBAABB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-caps-05.html b/testing/web-platform/tests/css/css-fonts/font-variant-caps-05.html
new file mode 100644
index 0000000000..640ab4d8c1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-caps-05.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-caps: all-petite-caps; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-caps-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-caps-05-ref.html">
+<meta name="assert" content="Enables display of small capitals for both upper and lowercase letters (OpenType features: c2sc, smcp)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-caps: all-petite-caps;
+ }
+ .low {
+ font-feature-settings: "smcp" off, "c2sc" off, "pcap" on, "c2pc" on, "unic" off, "titl" off;
+ }
+.ref {
+
+}
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with two crosses (✗), two check marks (✓) and two more crosses (✗). </p>
+<section class="test">
+ <p class="high">JKLMNO</p>
+ <p class="low">JKLMNO</p>
+ <p class="ref">BBAABB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-caps-06-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-caps-06-ref.html
new file mode 100644
index 0000000000..8a092e3d11
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-caps-06-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-caps: unicase; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with four crosses (✗), one check mark (✓) and one more cross (✗). </p>
+<section class="test">
+ <p class="ref">BBBBAB</p>
+ <p class="ref">BBBBAB</p>
+ <p class="ref">BBBBAB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-caps-06.html b/testing/web-platform/tests/css/css-fonts/font-variant-caps-06.html
new file mode 100644
index 0000000000..e7793381e7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-caps-06.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-caps: unicase; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-caps-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-caps-06-ref.html">
+<meta name="assert" content="Enables display of mixture of small capitals for uppercase letters with normal lowercase letters (OpenType feature: unic)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-caps: unicase;
+ }
+ .low {
+ font-feature-settings: "smcp" off, "c2sc" off, "pcap" off, "c2pc" off, "unic" on, "titl" off;
+ }
+.ref {
+
+}
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with four crosses (✗), one check mark (✓) and one more cross (✗). </p>
+<section class="test">
+ <p class="high">JKLMNO</p>
+ <p class="low">JKLMNO</p>
+ <p class="ref">BBBBAB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-caps-07-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-caps-07-ref.html
new file mode 100644
index 0000000000..2dbc43904f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-caps-07-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-caps: titling-caps; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with five crosses (✗), followed by one check mark (✓). </p>
+<section class="test">
+ <p class="ref">BBBBBA</p>
+ <p class="ref">BBBBBA</p>
+ <p class="ref">BBBBBA</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-caps-07.html b/testing/web-platform/tests/css/css-fonts/font-variant-caps-07.html
new file mode 100644
index 0000000000..b631f9638e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-caps-07.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-caps: titling-caps; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-caps-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-caps-07-ref.html">
+<meta name="assert" content="Enables display of titling capitals (OpenType feature: titl)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-caps: titling-caps;
+ }
+ .low {
+ font-feature-settings: "smcp" off, "c2sc" off, "pcap" off, "c2pc" off, "unic" off, "titl" on;
+ }
+.ref {
+
+}
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with five crosses (✗), followed by one check mark (✓). </p>
+<section class="test">
+ <p class="high">JKLMNO</p>
+ <p class="low">JKLMNO</p>
+ <p class="ref">BBBBBA</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-caps-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-caps-ref.html
new file mode 100644
index 0000000000..f84e51add0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-caps-ref.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<title>CSS Test: feature value matching for font-variant-caps</title>
+<link rel="author" title="John Daggett" href="mailto:jdaggett@mozilla.com"/>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<script type="text/javascript" src="support/fonts/gsubtest-features.js"></script>
+<script type="text/javascript" src="support/js/font-variant-features.js"></script>
+<link rel="stylesheet" href="support/css/font-variant-features.css" type="text/css"/>
+</head>
+<body>
+<div id="content"></div>
+<script type="text/javascript">
+ document.getElementById("content").appendChild(createFeatureTestTable(gPropertyData, "font-variant-caps", true, false));
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-caps.html b/testing/web-platform/tests/css/css-fonts/font-variant-caps.html
new file mode 100644
index 0000000000..7d89802f1c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-caps.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<title>CSS Test: feature value matching for font-variant-caps</title>
+<link rel="author" title="John Daggett" href="mailto:jdaggett@mozilla.com"/>
+<link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-variant-caps-prop"/>
+<link rel="match" href="font-variant-caps-ref.html"/>
+<meta name="assert" content="Values of font-variant-caps should enable specific features without enabling others"/>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<script type="text/javascript" src="support/fonts/gsubtest-features.js"></script>
+<script type="text/javascript" src="support/js/font-variant-features.js"></script>
+<link rel="stylesheet" href="support/css/font-variant-features.css" type="text/css"/>
+</head>
+<body>
+<div id="content"></div>
+<script type="text/javascript">
+ document.getElementById("content").appendChild(createFeatureTestTable(gPropertyData, "font-variant-caps", false, false));
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-debug.html b/testing/web-platform/tests/css/css-fonts/font-variant-debug.html
new file mode 100644
index 0000000000..827557ad66
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-debug.html
@@ -0,0 +1,22 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<!-- -->
+<!-- This is a debug version of the tests, it's helpful for debugging -->
+<!-- -->
+<head>
+<title>CSS Test: debug font-variant value tests</title>
+<link rel="author" title="John Daggett" href="mailto:jdaggett@mozilla.com"/>
+<meta name="assert" content="Each font-variant property value should enable specific features and not others"/>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+<script type="text/javascript" src="support/fonts/gsubtest-features.js"></script>
+<script type="text/javascript" src="support/js/font-variant-features.js"></script>
+<link rel="stylesheet" href="support/css/font-variant-features.css" type="text/css"/>
+</head>
+<body>
+<div id="content"></div>
+<script type="text/javascript">
+ document.getElementById("content").appendChild(createFeatureTestTable(gPropertyData, "all", true, true));
+</script>
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-01-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-01-ref.html
new file mode 100644
index 0000000000..b314318979
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-01-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-east-asian: normal; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with nine crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBBBBBBBB</p>
+ <p class="ref">BBBBBBBBB</p>
+ <p class="ref">BBBBBBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-01.html b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-01.html
new file mode 100644
index 0000000000..ce9917c76e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-01.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-east-asian: normal; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-east-asian-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-east-asian-01-ref.html">
+<meta name="assert" content="None of the (east asian) features listed below are enabled.">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-east-asian: normal;
+ }
+ .low {
+ font-feature-settings: "jp78" off, "jp83" off, "jp90" off, "jp04" off, "smpl" off, "trad" off, "fwid" off, "pwid" off, "ruby" off ;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with nine crosses (✗). </p>
+<section class="test">
+ <p class="high">YZabcdefg</p>
+ <p class="low">YZabcdefg</p>
+ <p class="ref">BBBBBBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-02-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-02-ref.html
new file mode 100644
index 0000000000..ec1e2ea8f4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-02-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-east-asian: jis78; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with one check mark (✓), then eight crosses (✗). </p>
+<section class="test">
+ <p class="ref">ABBBBBBBB</p>
+ <p class="ref">ABBBBBBBB</p>
+ <p class="ref">ABBBBBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-02.html b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-02.html
new file mode 100644
index 0000000000..392aee4ba7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-02.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-east-asian: jis78; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-east-asian-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-east-asian-02-ref.html">
+<meta name="assert" content="None of the (east asian) features listed below are enabled.">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-east-asian: jis78;
+ }
+ .low {
+ font-feature-settings: "jp78" on, "jp83" off, "jp90" off, "jp04" off, "smpl" off, "trad" off, "fwid" off, "pwid" off, "ruby" off ;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with one check mark (✓), then eight crosses (✗). </p>
+<section class="test">
+ <p class="high">YZabcdefg</p>
+ <p class="low">YZabcdefg</p>
+ <p class="ref">ABBBBBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-03-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-03-ref.html
new file mode 100644
index 0000000000..85f9e8f908
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-03-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-east-asian: jis83; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with one cross (✗), one check mark (✓), then seven crosses (✗). </p>
+<section class="test">
+ <p class="ref">BABBBBBBB</p>
+ <p class="ref">BABBBBBBB</p>
+ <p class="ref">BABBBBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-03.html b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-03.html
new file mode 100644
index 0000000000..fbee1ba488
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-03.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-east-asian: jis83; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-east-asian-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-east-asian-03-ref.html">
+<meta name="assert" content="Enables rendering of JIS83 forms (OpenType feature: jp83)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-east-asian: jis83;
+ }
+ .low {
+ font-feature-settings: "jp78" off, "jp83" on, "jp90" off, "jp04" off, "smpl" off, "trad" off, "fwid" off, "pwid" off, "ruby" off ;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with one cross (✗), one check mark (✓), then seven crosses (✗). </p>
+<section class="test">
+ <p class="high">YZabcdefg</p>
+ <p class="low">YZabcdefg</p>
+ <p class="ref">BABBBBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-04-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-04-ref.html
new file mode 100644
index 0000000000..663985c754
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-04-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-east-asian: jis90; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with two crosses (✗), one check mark (✓), then six crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBABBBBBB</p>
+ <p class="ref">BBABBBBBB</p>
+ <p class="ref">BBABBBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-04.html b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-04.html
new file mode 100644
index 0000000000..7194fe47f4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-04.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-east-asian: jis90; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-east-asian-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-east-asian-04-ref.html">
+<meta name="assert" content="Enables rendering of JIS90 forms (OpenType feature: jp90)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-east-asian: jis90;
+ }
+ .low {
+ font-feature-settings: "jp78" off, "jp83" off, "jp90" on, "jp04" off, "smpl" off, "trad" off, "fwid" off, "pwid" off, "ruby" off ;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with two crosses (✗), one check mark (✓), then six crosses (✗). </p>
+<section class="test">
+ <p class="high">YZabcdefg</p>
+ <p class="low">YZabcdefg</p>
+ <p class="ref">BBABBBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-05-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-05-ref.html
new file mode 100644
index 0000000000..193648206f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-05-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-east-asian: jis04; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with three crosses (✗), one check mark (✓), then five crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBBABBBBB</p>
+ <p class="ref">BBBABBBBB</p>
+ <p class="ref">BBBABBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-05.html b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-05.html
new file mode 100644
index 0000000000..e41730b6fd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-05.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-east-asian: jis04; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-east-asian-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-east-asian-05-ref.html">
+<meta name="assert" content="Enables rendering of JIS2004 forms (OpenType feature: jp04)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-east-asian: jis04;
+ }
+ .low {
+ font-feature-settings: "jp78" off, "jp83" off, "jp90" off, "jp04" on, "smpl" off, "trad" off, "fwid" off, "pwid" off, "ruby" off ;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with three crosses (✗), one check mark (✓), then five crosses (✗). </p>
+<section class="test">
+ <p class="high">YZabcdefg</p>
+ <p class="low">YZabcdefg</p>
+ <p class="ref">BBBABBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-06-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-06-ref.html
new file mode 100644
index 0000000000..1854a14956
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-06-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-east-asian: simplified; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with four crosses (✗), one check mark (✓), then four crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBBBABBBB</p>
+ <p class="ref">BBBBABBBB</p>
+ <p class="ref">BBBBABBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-06.html b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-06.html
new file mode 100644
index 0000000000..df18dac009
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-06.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-east-asian: simplified; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-east-asian-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-east-asian-06-ref.html">
+<meta name="assert" content="Enables rendering of simplified forms (OpenType feature: smpl)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-east-asian: simplified;
+ }
+ .low {
+ font-feature-settings: "jp78" off, "jp83" off, "jp90" off, "jp04" off, "smpl" on, "trad" off, "fwid" off, "pwid" off, "ruby" off ;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with four crosses (✗), one check mark (✓), then four crosses (✗). </p>
+<section class="test">
+ <p class="high">YZabcdefg</p>
+ <p class="low">YZabcdefg</p>
+ <p class="ref">BBBBABBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-07-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-07-ref.html
new file mode 100644
index 0000000000..2ba004471f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-07-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-east-asian: traditional; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with five crosses (✗), one check mark (✓), then three crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBBBBABBB</p>
+ <p class="ref">BBBBBABBB</p>
+ <p class="ref">BBBBBABBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-07.html b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-07.html
new file mode 100644
index 0000000000..c182517528
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-07.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-east-asian: traditional; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-east-asian-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-east-asian-07-ref.html">
+<meta name="assert" content="Enables rendering of traditional forms (OpenType feature: trad)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-east-asian: traditional;
+ }
+ .low {
+ font-feature-settings: "jp78" off, "jp83" off, "jp90" off, "jp04" off, "smpl" off, "trad" on, "fwid" off, "pwid" off, "ruby" off ;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with five crosses (✗), one check mark (✓), then three crosses (✗). </p>
+<section class="test">
+ <p class="high">YZabcdefg</p>
+ <p class="low">YZabcdefg</p>
+ <p class="ref">BBBBBABBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-08-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-08-ref.html
new file mode 100644
index 0000000000..6f46b9881e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-08-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-east-asian: full-width; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with six crosses (✗), one check mark (✓), then two crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBBBBBABB</p>
+ <p class="ref">BBBBBBABB</p>
+ <p class="ref">BBBBBBABB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-08.html b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-08.html
new file mode 100644
index 0000000000..ef957317e3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-08.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-east-asian: full-width; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-east-asian-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-east-asian-08-ref.html">
+<meta name="assert" content="Enables rendering of full-width variants (OpenType feature: fwid)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-east-asian: full-width;
+ }
+ .low {
+ font-feature-settings: "jp78" off, "jp83" off, "jp90" off, "jp04" off, "smpl" off, "trad" off, "fwid" on, "pwid" off, "ruby" off ;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with six crosses (✗), one check mark (✓), then two crosses (✗). </p>
+<section class="test">
+ <p class="high">YZabcdefg</p>
+ <p class="low">YZabcdefg</p>
+ <p class="ref">BBBBBBABB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-09-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-09-ref.html
new file mode 100644
index 0000000000..a97660648a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-09-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-east-asian: proportional-width; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with seven crosses (✗), one check mark (✓), then one cross (✗). </p>
+<section class="test">
+ <p class="ref">BBBBBBBAB</p>
+ <p class="ref">BBBBBBBAB</p>
+ <p class="ref">BBBBBBBAB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-09.html b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-09.html
new file mode 100644
index 0000000000..5498eb445a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-09.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-east-asian: proportional-width; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-east-asian-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-east-asian-09-ref.html">
+<meta name="assert" content="Enables rendering of proportionally-spaced variants (OpenType feature: pwid)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-east-asian: proportional-width;
+ }
+ .low {
+ font-feature-settings: "jp78" off, "jp83" off, "jp90" off, "jp04" off, "smpl" off, "trad" off, "fwid" off, "pwid" on, "ruby" off ;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with seven crosses (✗), one check mark (✓), then one cross (✗). </p>
+<section class="test">
+ <p class="high">YZabcdefg</p>
+ <p class="low">YZabcdefg</p>
+ <p class="ref">BBBBBBBAB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-10-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-10-ref.html
new file mode 100644
index 0000000000..c0a27e5fa8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-10-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-east-asian: ruby; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with eight crosses (✗), then one check mark (✓). </p>
+<section class="test">
+ <p class="ref">BBBBBBBBA</p>
+ <p class="ref">BBBBBBBBA</p>
+ <p class="ref">BBBBBBBBA</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-10.html b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-10.html
new file mode 100644
index 0000000000..867fd21643
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-10.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-east-asian: ruby; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-east-asian-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-east-asian-10-ref.html">
+<meta name="assert" content="Enables display of ruby variant glyphs (OpenType feature: ruby)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-east-asian: ruby;
+ }
+ .low {
+ font-feature-settings: "jp78" off, "jp83" off, "jp90" off, "jp04" off, "smpl" off, "trad" off, "fwid" off, "pwid" off, "ruby" on ;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with eight crosses (✗), then one check mark (✓). </p>
+<section class="test">
+ <p class="high">YZabcdefg</p>
+ <p class="low">YZabcdefg</p>
+ <p class="ref">BBBBBBBBA</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-ref.html
new file mode 100644
index 0000000000..deb5f9324a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian-ref.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<title>CSS Test: feature value matching for font-variant-east-asian</title>
+<link rel="author" title="John Daggett" href="mailto:jdaggett@mozilla.com"/>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<script type="text/javascript" src="support/fonts/gsubtest-features.js"></script>
+<script type="text/javascript" src="support/js/font-variant-features.js"></script>
+<link rel="stylesheet" href="support/css/font-variant-features.css" type="text/css"/>
+</head>
+<body>
+<div id="content"></div>
+<script type="text/javascript">
+ document.getElementById("content").appendChild(createFeatureTestTable(gPropertyData, "font-variant-east-asian", true, false));
+</script>
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-east-asian.html b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian.html
new file mode 100644
index 0000000000..3fbb43e1cb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-east-asian.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<title>CSS Test: feature value matching for font-variant-east-asian</title>
+<link rel="author" title="John Daggett" href="mailto:jdaggett@mozilla.com"/>
+<link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-variant-east-asian-prop"/>
+<link rel="match" href="font-variant-east-asian-ref.html"/>
+<meta name="assert" content="Values of font-variant-east-asian should enable specific features without enabling others"/>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<script type="text/javascript" src="support/fonts/gsubtest-features.js"></script>
+<script type="text/javascript" src="support/js/font-variant-features.js"></script>
+<link rel="stylesheet" href="support/css/font-variant-features.css" type="text/css"/>
+</head>
+<body>
+<div id="content"></div>
+<script type="text/javascript">
+ document.getElementById("content").appendChild(createFeatureTestTable(gPropertyData, "font-variant-east-asian", false, false));
+</script>
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-emoji-1-notref.html b/testing/web-platform/tests/css/css-fonts/font-variant-emoji-1-notref.html
new file mode 100644
index 0000000000..bbf3654ccf
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-emoji-1-notref.html
@@ -0,0 +1,8 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>CSS Fonts: font-variant-emoji reference file</title>
+<style>
+div { font: 40px/2 serif; }
+</style>
+<body>
+<div>&#x263A;&#xFE0F; &#x263A;&#xFE0E;</div>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-emoji-1.html b/testing/web-platform/tests/css/css-fonts/font-variant-emoji-1.html
new file mode 100644
index 0000000000..53cf539edd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-emoji-1.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>CSS Fonts: font-variant-emoji test</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-variant-emoji-prop"/>
+<link rel="mismatch" href="font-variant-emoji-1-notref.html"/>
+<meta name="assert" content="U+FE0E and U+FE0F variation selectors should result in different presentation of U+263A WHITE SMILING FACE"/>
+<style>
+div { font: 40px/2 serif; }
+</style>
+<body>
+<!-- To check that the two variation selectors give different results, the not-reference file has them swapped.
+ Note: this test assumes the system has both text and emoji glyphs available for U+263A. -->
+<div>&#x263A;&#xFE0E; &#x263A;&#xFE0F;</div>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-emoji-2-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-emoji-2-ref.html
new file mode 100644
index 0000000000..d899e0ff53
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-emoji-2-ref.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>CSS Fonts: font-variant-emoji reference file</title>
+<style>
+div { font: 40px/2 serif; }
+</style>
+<body>
+<p>text</p>
+<div>&#x263A;&#xfe0e; &#x263A;&#xfe0e; &#x263A;&#xfe0f;</div>
+<p>emoji</p>
+<div>&#x263A;&#xfe0f; &#x263A;&#xfe0e; &#x263A;&#xfe0f;</div>
+<p>unicode</p>
+<div>&#x263A;&#xfe0e; &#x263A;&#xfe0e; &#x263A;&#xfe0f;</div>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-emoji-2.html b/testing/web-platform/tests/css/css-fonts/font-variant-emoji-2.html
new file mode 100644
index 0000000000..cce4b03604
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-emoji-2.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>CSS Fonts: font-variant-emoji test</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-variant-emoji-prop"/>
+<link rel="match" href="font-variant-emoji-2-ref.html"/>
+<meta name="assert" content="font-variant-emoji sets a default presentation; VS15 (U+FE0E) or VS16 (U+FE0F) override the rendering specified in font-variant-emoji."/>
+<style>
+div { font: 40px/2 serif; }
+</style>
+<body>
+<p>text</p>
+<div style="font-variant-emoji: text">&#x263A; &#x263A;&#xfe0e; &#x263A;&#xfe0f;</div>
+<p>emoji</p>
+<div style="font-variant-emoji: emoji">&#x263A; &#x263A;&#xfe0e; &#x263A;&#xfe0f;</div>
+<p>unicode</p>
+<div style="font-variant-emoji: unicode">&#x263A; &#x263A;&#xfe0e; &#x263A;&#xfe0f;</div>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-01-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-01-ref.html
new file mode 100644
index 0000000000..68d5561e7f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-01-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-ligatures: normal; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with three check marks (✓) followed by two crosses (✗)</p>
+<section class="test">
+ <p class="ref">AAABB</p>
+ <p class="ref">AAABB</p>
+ <p class="ref">AAABB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-01.html b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-01.html
new file mode 100644
index 0000000000..519bfd4bf4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-01.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-ligatures: normal; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-ligatures-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-ligatures-01-ref.html">
+<meta name="assert" content="common ligatures and contextual forms are on by default, discretionary and historical ligatures are not">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-ligatures: normal;
+ }
+ .low {
+ font-feature-settings: "liga" on, "clig" on, "calt" on, "hlig" off, "dlig" off;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with three check marks (✓) followed by two crosses (✗)</p>
+<section class="test">
+ <p class="high">CDGFE</p>
+ <p class="low">CDGFE</p>
+ <p class="ref">AAABB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-02-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-02-ref.html
new file mode 100644
index 0000000000..08a291fd0c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-02-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-ligatures: none; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with five crosses (✗)</p>
+<section class="test">
+ <p class="ref">BBBBB</p>
+ <p class="ref">BBBBB</p>
+ <p class="ref">BBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-02.html b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-02.html
new file mode 100644
index 0000000000..46a20216b4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-02.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-ligatures: none; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-ligatures-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-ligatures-02-ref.html">
+<meta name="assert" content="all types of ligatures and contextual forms covered by this property are explicitly disabled">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-ligatures: none;
+ }
+ .low {
+ font-feature-settings: "liga" off, "clig" off, "calt" off, "hlig" off, "dlig" off;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with five crosses (✗)</p>
+<section class="test">
+ <p class="high">CDGFE</p>
+ <p class="low">CDGFE</p>
+ <p class="ref">BBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-03-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-03-ref.html
new file mode 100644
index 0000000000..303e64e147
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-03-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-ligatures: common-ligatures; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with two check marks (✓).</p>
+<section class="test">
+ <p class="ref">AA</p>
+ <p class="ref">AA</p>
+ <p class="ref">AA</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-03.html b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-03.html
new file mode 100644
index 0000000000..c783cde23d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-03.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-ligatures: common-ligatures; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-ligatures-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-ligatures-03-ref.html">
+<meta name="assert" content="Enables display of common ligatures (OpenType features: liga, clig)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-ligatures: common-ligatures;
+ }
+ .low {
+ font-feature-settings: "liga" on, "clig" on;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with two check marks (✓).</p>
+<section class="test">
+ <p class="high">CD</p>
+ <p class="low">CD</p>
+ <p class="ref">AA</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-04-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-04-ref.html
new file mode 100644
index 0000000000..fa8cfde7a6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-04-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-ligatures: no-common-ligatures; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with two crosses (✗).</p>
+<section class="test">
+ <p class="ref">BB</p>
+ <p class="ref">BB</p>
+ <p class="ref">BB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-04.html b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-04.html
new file mode 100644
index 0000000000..818454825d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-04.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-ligatures: no-common-ligatures; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-ligatures-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-ligatures-04-ref.html">
+<meta name="assert" content="Disables display of common ligatures (OpenType features: liga, clig)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-ligatures: no-common-ligatures;
+ }
+ .low {
+ font-feature-settings: "liga" off, "clig" off;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with two crosses (✗).</p>
+<section class="test">
+ <p class="high">CD</p>
+ <p class="low">CD</p>
+ <p class="ref">BB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-05-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-05-ref.html
new file mode 100644
index 0000000000..cce551393a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-05-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-ligatures: discretionary-ligatures; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with one check mark (✓).</p>
+<section class="test">
+ <p class="ref">A</p>
+ <p class="ref">A</p>
+ <p class="ref">A</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-05.html b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-05.html
new file mode 100644
index 0000000000..fc1d9ca782
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-05.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-ligatures: discretionary-ligatures; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-ligatures-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-ligatures-05-ref.html">
+<meta name="assert" content="Enables display of discretionary ligatures (OpenType feature: dlig)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-ligatures: discretionary-ligatures;
+ }
+ .low {
+ font-feature-settings: "dlig" on;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with one check mark (✓).</p>
+<section class="test">
+ <p class="high">E</p>
+ <p class="low">E</p>
+ <p class="ref">A</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-06-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-06-ref.html
new file mode 100644
index 0000000000..121a64e37e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-06-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-ligatures: no-discretionary-ligatures; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with one cross (✗).</p>
+<section class="test">
+ <p class="ref">B</p>
+ <p class="ref">B</p>
+ <p class="ref">B</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-06.html b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-06.html
new file mode 100644
index 0000000000..749eb45462
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-06.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-ligatures: no-discretionary-ligatures; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-ligatures-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-ligatures-06-ref.html">
+<meta name="assert" content="Disables display of discretionary ligatures (OpenType feature: dlig)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-ligatures: no-discretionary-ligatures;
+ }
+ .low {
+ font-feature-settings: "dlig" off;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with one cross (✗).</p>
+<section class="test">
+ <p class="high">E</p>
+ <p class="low">E</p>
+ <p class="ref">B</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-07-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-07-ref.html
new file mode 100644
index 0000000000..f549f26f2b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-07-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-ligatures: historical-ligatures; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with one check mark (✓).</p>
+<section class="test">
+ <p class="ref">A</p>
+ <p class="ref">A</p>
+ <p class="ref">A</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-07.html b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-07.html
new file mode 100644
index 0000000000..0c617a7014
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-07.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-ligatures: historical-ligatures; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-ligatures-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-ligatures-07-ref.html">
+<meta name="assert" content="Enables display of historical ligatures (OpenType feature: hlig)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-ligatures: historical-ligatures;
+ }
+ .low {
+ font-feature-settings: "hlig" on;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with one check mark (✓).</p>
+<section class="test">
+ <p class="high">F</p>
+ <p class="low">F</p>
+ <p class="ref">A</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-08-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-08-ref.html
new file mode 100644
index 0000000000..2147544abe
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-08-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-ligatures: no-historical-ligatures; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with one cross (✗).</p>
+<section class="test">
+ <p class="ref">B</p>
+ <p class="ref">B</p>
+ <p class="ref">B</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-08.html b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-08.html
new file mode 100644
index 0000000000..a1e21aab85
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-08.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-ligatures: no-historical-ligatures; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-ligatures-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-ligatures-08-ref.html">
+<meta name="assert" content="Disables display of historical ligatures (OpenType feature: hlig)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-ligatures: no-historical-ligatures;
+ }
+ .low {
+ font-feature-settings: "hlig" off;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with one cross (✗).</p>
+<section class="test">
+ <p class="high">F</p>
+ <p class="low">F</p>
+ <p class="ref">B</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-09-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-09-ref.html
new file mode 100644
index 0000000000..d4293bdfd6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-09-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-ligatures: contextual; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with one check mark (✓).</p>
+<section class="test">
+ <p class="ref">A</p>
+ <p class="ref">A</p>
+ <p class="ref">A</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-09.html b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-09.html
new file mode 100644
index 0000000000..8fce03c4f0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-09.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-ligatures: contextual; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-ligatures-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-ligatures-09-ref.html">
+<meta name="assert" content="Enables display of contextual alternates (OpenType feature: calt)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-ligatures: contextual;
+ }
+ .low {
+ font-feature-settings: "calt" on;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with one check mark (✓).</p>
+<section class="test">
+ <p class="high">G</p>
+ <p class="low">G</p>
+ <p class="ref">A</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-10-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-10-ref.html
new file mode 100644
index 0000000000..bf224d7122
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-10-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-ligatures: no-contextual; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with one cross (✗).</p>
+<section class="test">
+ <p class="ref">B</p>
+ <p class="ref">B</p>
+ <p class="ref">B</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-10.html b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-10.html
new file mode 100644
index 0000000000..b39cb5b775
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-10.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-ligatures: no-contextual; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-ligatures-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-ligatures-10-ref.html">
+<meta name="assert" content="Disables display of contextual alternates (OpenType feature: calt)">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-ligatures: no-contextual;
+ }
+ .low {
+ font-feature-settings: "calt" off;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with one cross (✗).</p>
+<section class="test">
+ <p class="high">G</p>
+ <p class="low">G</p>
+ <p class="ref">B</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-11-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-11-ref.html
new file mode 100644
index 0000000000..e7dff8008c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-11-ref.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-ligatures: none is not equivalent to rlig off.</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ .test {
+ font-family: serif;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the first line shows a lam-alef ligature (<span lang="ar">لا</span>)
+and the second shows an initial lam, final alef (<span lang="ar">&#xFEDF;&zwnj;&#xFE8E;</span>)
+which is <em>normally incorrect</em>.</p>
+<!-- presentation forms used here to show the unligated forms -->
+<section class="test">
+ <p class="high"><span lang="ar">لا</span> </p>
+ <p class="low"><span lang="ar">&#xFEDF;&zwnj;&#xFE8E;</span></p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-11.optional.html b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-11.optional.html
new file mode 100644
index 0000000000..f7cf0ecd08
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-11.optional.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-ligatures: none is not equivalent to rlig off.</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-ligatures-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-ligatures-11-ref.html">
+<meta name="assert" content="Required ligatures, needed for correctly rendering complex scripts, are not affected by the settings above, including ‘none’ (OpenType feature: rlig). Note: platforms are not required to allow disabling rlig.">
+<style>
+ .test {
+ font-family: serif;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-ligatures: none;
+ }
+ .low {
+ font-feature-settings: "rlig" off;
+ }
+ .test :lang(ar) {
+ font-family: serif;
+ }
+</style>
+<body>
+<p>Test passes if the first line shows a lam-alef ligature (<span lang="ar">لا</span>)
+and the second shows an initial lam, final alef (<span lang="ar">&#xFEDF;&zwnj;&#xFE8E;</span>)
+which is <em>normally incorrect</em>.</p>
+<!-- presentation forms used here to show the unligated forms -->
+<section class="test">
+ <p class="high"><span lang="ar">لا</span> </p>
+ <p class="low"><span lang="ar">لا</span></p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-ref.html
new file mode 100644
index 0000000000..73726a2c7f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures-ref.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<title>CSS Test: feature value matching for font-variant-ligatures</title>
+<link rel="author" title="John Daggett" href="mailto:jdaggett@mozilla.com"/>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<script type="text/javascript" src="support/fonts/gsubtest-features.js"></script>
+<script type="text/javascript" src="support/js/font-variant-features.js"></script>
+<link rel="stylesheet" href="support/css/font-variant-features.css" type="text/css"/>
+</head>
+<body>
+<div id="content"></div>
+<script type="text/javascript">
+ document.getElementById("content").appendChild(createFeatureTestTable(gPropertyData, "font-variant-ligatures", true, false));
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-ligatures.html b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures.html
new file mode 100644
index 0000000000..ff217e279f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-ligatures.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<title>CSS Test: feature value matching for font-variant-ligatures</title>
+<link rel="author" title="John Daggett" href="mailto:jdaggett@mozilla.com"/>
+<link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-variant-ligatures-prop"/>
+<link rel="match" href="font-variant-ligatures-ref.html"/>
+<meta name="assert" content="Values of font-variant-ligatures should enable specific features without enabling others"/>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<script type="text/javascript" src="support/fonts/gsubtest-features.js"></script>
+<script type="text/javascript" src="support/js/font-variant-features.js"></script>
+<link rel="stylesheet" href="support/css/font-variant-features.css" type="text/css"/>
+</head>
+<body>
+<div id="content"></div>
+<script type="text/javascript">
+ document.getElementById("content").appendChild(createFeatureTestTable(gPropertyData, "font-variant-ligatures", false, false));
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-numeric-01-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-01-ref.html
new file mode 100644
index 0000000000..5fa6ec5856
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-01-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-numeric: normal; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with eight crosses (✗)
+<!--, followed by one check mark (✓)-->. </p>
+<section class="test">
+ <p class="ref">BBBBBBBB</p>
+ <p class="ref">BBBBBBBB</p>
+ <p class="ref">BBBBBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-numeric-01.html b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-01.html
new file mode 100644
index 0000000000..9a45c446ff
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-01.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-numeric: normal; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-numeric-01-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-numeric-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<meta name="assert" content="None of the features listed below are enabled. ">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-numeric: normal;
+ }
+ .low {
+ font-feature-settings: "lnum" off, "onum" off, "pnum" off, "tnum" off, "frac" off, "afrc" off, "ordn" off, "zero" off;
+ }
+.ref {
+
+}
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with eight crosses (✗)
+<!--, followed by one check mark (✓)-->. </p>
+<section class="test">
+ <p class="high">PQRSTUVW</p>
+ <p class="low">PQRSTUVW</p>
+ <p class="ref">BBBBBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-numeric-02-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-02-ref.html
new file mode 100644
index 0000000000..7293a9052d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-02-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-numeric: lining-nums; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with one check mark (✓) followed by seven crosses (✗). </p>
+<section class="test">
+ <p class="ref">ABBBBBBB</p>
+ <p class="ref">ABBBBBBB</p>
+ <p class="ref">ABBBBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-numeric-02.html b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-02.html
new file mode 100644
index 0000000000..254d8140de
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-02.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-numeric: lining-nums; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-numeric-02-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-numeric-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<meta name="assert" content="Enables display of lining numerals (OpenType feature: lnum). ">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-numeric: lining-nums;
+ }
+ .low {
+ font-feature-settings: "lnum" on, "onum" off, "pnum" off, "tnum" off, "frac" off, "afrc" off, "ordn" off, "zero" off;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with one check mark (✓) followed by seven crosses (✗). </p>
+<section class="test">
+ <p class="high">PQRSTUVW</p>
+ <p class="low">PQRSTUVW</p>
+ <p class="ref">ABBBBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-numeric-03-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-03-ref.html
new file mode 100644
index 0000000000..17ef95cccd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-03-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-numeric: oldstyle-nums; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with one cross (✗), then one check mark (✓) followed by six crosses (✗). </p>
+<section class="test">
+ <p class="ref">BABBBBBB</p>
+ <p class="ref">BABBBBBB</p>
+ <p class="ref">BABBBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-numeric-03.html b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-03.html
new file mode 100644
index 0000000000..f2f0f5d105
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-03.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-numeric: oldstyle-nums; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-numeric-03-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-numeric-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<meta name="assert" content="Enables display of old-style numerals (OpenType feature: onum). ">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-numeric: oldstyle-nums;
+ }
+ .low {
+ font-feature-settings: "lnum" off, "onum" on, "pnum" off, "tnum" off, "frac" off, "afrc" off, "ordn" off, "zero" off;
+ }
+
+
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with one cross (✗), then one check mark (✓) followed by six crosses (✗). </p>
+<section class="test">
+ <p class="high">PQRSTUVW</p>
+ <p class="low">PQRSTUVW</p>
+ <p class="ref">BABBBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-numeric-04-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-04-ref.html
new file mode 100644
index 0000000000..7254e845d1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-04-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-numeric: proportional-nums; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with two crosses (✗), then one check mark (✓) followed by five crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBABBBBB</p>
+ <p class="ref">BBABBBBB</p>
+ <p class="ref">BBABBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-numeric-04.html b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-04.html
new file mode 100644
index 0000000000..e322b63e20
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-04.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-numeric: proportional-nums; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-numeric-04-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-numeric-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<meta name="assert" content="Enables display of proportional numerals (OpenType feature: pnum). ">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-numeric: proportional-nums;
+ }
+ .low {
+ font-feature-settings: "lnum" off, "onum" off, "pnum" on, "tnum" off, "frac" off, "afrc" off, "ordn" off, "zero" off;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with two crosses (✗), then one check mark (✓) followed by five crosses (✗). </p>
+<section class="test">
+ <p class="high">PQRSTUVW</p>
+ <p class="low">PQRSTUVW</p>
+ <p class="ref">BBABBBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-numeric-05-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-05-ref.html
new file mode 100644
index 0000000000..d6f5481101
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-05-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-numeric: tabular-nums; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with three crosses (✗), then one check mark (✓) followed by four crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBBABBBB</p>
+ <p class="ref">BBBABBBB</p>
+ <p class="ref">BBBABBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-numeric-05.html b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-05.html
new file mode 100644
index 0000000000..a9eabe6a75
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-05.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-numeric: tabular-nums; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-numeric-05-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-numeric-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<meta name="assert" content="Enables display of tabular numerals (OpenType feature: tnum). ">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-numeric: tabular-nums;
+ }
+ .low {
+ font-feature-settings: "lnum" off, "onum" off, "pnum" off, "tnum" on, "frac" off, "afrc" off, "ordn" off, "zero" off;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with three crosses (✗), then one check mark (✓) followed by four crosses (✗). </p>
+<section class="test">
+ <p class="high">PQRSTUVW</p>
+ <p class="low">PQRSTUVW</p>
+ <p class="ref">BBBABBBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-numeric-06-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-06-ref.html
new file mode 100644
index 0000000000..0058dbfea7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-06-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-numeric: diagonal-fractions; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with four crosses (✗), then one check mark (✓) followed by three crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBBBABBB</p>
+ <p class="ref">BBBBABBB</p>
+ <p class="ref">BBBBABBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-numeric-06.html b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-06.html
new file mode 100644
index 0000000000..d3777d8a17
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-06.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-numeric: diagonal-fractions; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-numeric-06-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-numeric-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<meta name="assert" content="Enables display of lining diagonal fractions (OpenType feature: frac). ">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-numeric: diagonal-fractions;
+ }
+ .low {
+ font-feature-settings: "lnum" off, "onum" off, "pnum" off, "tnum" off, "frac" on, "afrc" off, "ordn" off, "zero" off;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with four crosses (✗), then one check mark (✓) followed by three crosses (✗). </p>
+<section class="test">
+ <p class="high">PQRSTUVW</p>
+ <p class="low">PQRSTUVW</p>
+ <p class="ref">BBBBABBB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-numeric-07-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-07-ref.html
new file mode 100644
index 0000000000..d5b1214a64
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-07-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-numeric: stacked-fractions; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with five crosses (✗), then one check mark (✓) followed by two crosses (✗). </p>
+<section class="test">
+ <p class="ref">BBBBBABB</p>
+ <p class="ref">BBBBBABB</p>
+ <p class="ref">BBBBBABB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-numeric-07.html b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-07.html
new file mode 100644
index 0000000000..ed0c23eeca
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-07.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-numeric: stacked-fractions; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-numeric-07-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-numeric-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<meta name="assert" content="Enables display of lining stacked fractions (OpenType feature: afrc).">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-numeric: stacked-fractions;
+ }
+ .low {
+ font-feature-settings: "lnum" off, "onum" off, "pnum" off, "tnum" off, "frac" off, "afrc" on, "ordn" off, "zero" off;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with five crosses (✗), then one check mark (✓) followed by two crosses (✗). </p>
+<section class="test">
+ <p class="high">PQRSTUVW</p>
+ <p class="low">PQRSTUVW</p>
+ <p class="ref">BBBBBABB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-numeric-08-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-08-ref.html
new file mode 100644
index 0000000000..002c587077
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-08-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-numeric: ordinal; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with six crosses (✗), then one check mark (✓) followed by one cross (✗). </p>
+<section class="test">
+ <p class="ref">BBBBBBAB</p>
+ <p class="ref">BBBBBBAB</p>
+ <p class="ref">BBBBBBAB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-numeric-08.html b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-08.html
new file mode 100644
index 0000000000..5ff0985fce
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-08.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-numeric: ordinal; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-numeric-08-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-numeric-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<meta name="assert" content="Enables display of letter forms used with ordinal numbers (OpenType feature: ordn).">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-numeric: ordinal;
+ }
+ .low {
+ font-feature-settings: "lnum" off, "onum" off, "pnum" off, "tnum" off, "frac" off, "afrc" off, "ordn" on, "zero" off;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with six crosses (✗), then one check mark (✓) followed by one cross (✗). </p>
+<section class="test">
+ <p class="high">PQRSTUVW</p>
+ <p class="low">PQRSTUVW</p>
+ <p class="ref">BBBBBBAB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-numeric-09-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-09-ref.html
new file mode 100644
index 0000000000..04a70a055e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-09-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-numeric: slashed-zero; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with seven crosses (✗), then one check mark (✓). </p>
+<section class="test">
+ <p class="ref">BBBBBBBA</p>
+ <p class="ref">BBBBBBBA</p>
+ <p class="ref">BBBBBBBA</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-numeric-09.html b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-09.html
new file mode 100644
index 0000000000..48926a78a1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-09.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-numeric: slashed-zero; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="match" href="font-variant-numeric-09-ref.html">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-numeric-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<meta name="assert" content="Enables display of slashed zeros (OpenType feature: zero).">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-numeric: slashed-zero;
+ }
+ .low {
+ font-feature-settings: "lnum" off, "onum" off, "pnum" off, "tnum" off, "frac" off, "afrc" off, "ordn" off, "zero" on;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with seven crosses (✗), then one check mark (✓). </p>
+<section class="test">
+ <p class="high">PQRSTUVW</p>
+ <p class="low">PQRSTUVW</p>
+ <p class="ref">BBBBBBBA</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-numeric-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-ref.html
new file mode 100644
index 0000000000..84394e7f47
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-numeric-ref.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<title>CSS Test: feature value matching for font-variant-numeric</title>
+<link rel="author" title="John Daggett" href="mailto:jdaggett@mozilla.com"/>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<script type="text/javascript" src="support/fonts/gsubtest-features.js"></script>
+<script type="text/javascript" src="support/js/font-variant-features.js"></script>
+<link rel="stylesheet" href="support/css/font-variant-features.css" type="text/css"/>
+</head>
+<body>
+<div id="content"></div>
+<script type="text/javascript">
+ document.getElementById("content").appendChild(createFeatureTestTable(gPropertyData, "font-variant-numeric", true, false));
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-numeric.html b/testing/web-platform/tests/css/css-fonts/font-variant-numeric.html
new file mode 100644
index 0000000000..a2a6c32826
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-numeric.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<title>CSS Test: feature value matching for font-variant-numeric</title>
+<link rel="author" title="John Daggett" href="mailto:jdaggett@mozilla.com"/>
+<link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-variant-numeric-prop"/>
+<link rel="match" href="font-variant-numeric-ref.html"/>
+<meta name="assert" content="Values of font-variant-numeric should enable specific features without enabling others"/>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<script type="text/javascript" src="support/fonts/gsubtest-features.js"></script>
+<script type="text/javascript" src="support/js/font-variant-features.js"></script>
+<link rel="stylesheet" href="support/css/font-variant-features.css" type="text/css"/>
+</head>
+<body>
+<div id="content"></div>
+<script type="text/javascript">
+ document.getElementById("content").appendChild(createFeatureTestTable(gPropertyData, "font-variant-numeric", false, false));
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-position-01-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-position-01-ref.html
new file mode 100644
index 0000000000..5b679d51b7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-position-01-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-position: normal; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with two crosses (✗)</p>
+<section class="test">
+ <p class="ref">BB</p>
+ <p class="ref">BB</p>
+ <p class="ref">BB</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-position-01.html b/testing/web-platform/tests/css/css-fonts/font-variant-position-01.html
new file mode 100644
index 0000000000..17a0e417b1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-position-01.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-position: normal; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-position-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-position-01-ref.html">
+<meta name="assert" content="None of the features listed below are enabled.">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-position: normal;
+ }
+ .low {
+ font-feature-settings: "subs" off, "sups" off;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with two crosses (✗)</p>
+<!-- spans to force each character to be in a separate run -->
+<section class="test">
+ <p class="high"><span>H</span><span>I</span></p>
+ <p class="low"><span>H</span><span>I</span></p>
+ <p class="ref">BB</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-position-02-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-position-02-ref.html
new file mode 100644
index 0000000000..b7b17c69e1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-position-02-ref.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-position: super; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+
+<p>Test passes if the three lines below are identical, with two checkmarks (✓);
+ if the first line has a checkmark followed by two normally sized crosses, the test fails. </p>
+<section class="test">
+ <p class="ref">AA</p>
+ <p class="ref">AA</p>
+ <p class="ref">AA</p>
+
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-position-02.html b/testing/web-platform/tests/css/css-fonts/font-variant-position-02.html
new file mode 100644
index 0000000000..bf4f813fac
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-position-02.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-position: sub; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-position-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-position-02-ref.html">
+<meta name="assert" content="Enables display of subscript variants (OpenType feature: subs).">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-position: sub;
+ }
+ .low {
+ font-feature-settings: "subs" on, "sups" off;
+ }
+</style>
+<body>
+<p>Test passes if the three lines below are identical, with two checkmarks (✓);
+ if the first line has a checkmark followed by two normally sized crosses, the test fails. </p>
+<section class="test">
+ <p>A<span class="high">H</span></p>
+ <p>A<span class="low">H</span></p>
+ <p class="ref">AA</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-position-03-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-position-03-ref.html
new file mode 100644
index 0000000000..2b85be140e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-position-03-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-position: super; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+</style>
+<body>
+ <p>Test passes if the three lines below are identical, with two checkmarks (✓);
+ if the first line has a checkmark followed by two normally sized crosses, the test fails. </p>
+<section class="test">
+ <p class="ref">AA</p>
+ <p class="ref">AA</p>
+ <p class="ref">AA</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-position-03.html b/testing/web-platform/tests/css/css-fonts/font-variant-position-03.html
new file mode 100644
index 0000000000..5c649104b3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-position-03.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: font-variant-position: super; low level equivalence</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-position-prop">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<link rel="match" href="font-variant-position-03-ref.html">
+<meta name="assert" content="Enables display of subscript variants (OpenType feature: subs).">
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+ .test {
+ font-family: fwf;
+ font-size: 3em;
+ line-height: 1.1;
+ }
+ .high {
+ font-variant-position: super;
+ }
+ .low {
+ font-feature-settings: "subs" off, "sups" on;
+ }
+</style>
+<body>
+ <p>Test passes if the three lines below are identical, with two checkmarks (✓);
+ if the first line has a checkmark followed by two normally sized crosses, the test fails. </p>
+<section class="test">
+ <p>A<span class="high">I</span></p>
+ <p>A<span class="low">I</span></p>
+ <p class="ref">AA</p>
+</section> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-position-04-notref.html b/testing/web-platform/tests/css/css-fonts/font-variant-position-04-notref.html
new file mode 100644
index 0000000000..5bfe6db433
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-position-04-notref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Reference (mismatch)</title>
+
+<style>
+ /* Lato has superscript Latin letters, but not subscript ones;
+ * digits are available in both super- and subscript form.
+ */
+ @font-face {
+ font-family: "lato";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ .test {
+ font-family: "lato";
+ font-size: 2em;
+ }
+</style>
+
+<section class="test">
+ <p>Synthetic subscript letters <em>must</em> be used:</p>
+ <p>Text with subscript letters</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-position-04.html b/testing/web-platform/tests/css/css-fonts/font-variant-position-04.html
new file mode 100644
index 0000000000..de1cbd8779
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-position-04.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: font-variant-position must synthesize super/subscripts for unsupported characters</title>
+<link rel="mismatch" href="font-variant-position-04-notref.html">
+<meta name="assert" content="In the case of OpenType fonts that lack subscript or superscript glyphs for a given character, user agents must synthesize appropriate subscript and superscript glyphs">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-variant-position-prop">
+
+<style>
+ /* Lato has superscript Latin letters, but not subscript ones;
+ * digits are available in both super- and subscript form.
+ */
+ @font-face {
+ font-family: "lato";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ .test {
+ font-family: "lato";
+ font-size: 2em;
+ }
+ .sub {
+ font-variant-position: sub;
+ }
+</style>
+
+<section class="test">
+ <p>Synthetic subscript letters <em>must</em> be used:</p>
+ <p>Text with <span class="sub">subscript</span> letters</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-position-05-notref.html b/testing/web-platform/tests/css/css-fonts/font-variant-position-05-notref.html
new file mode 100644
index 0000000000..a79c7b83a7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-position-05-notref.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Reference (mismatch)</title>
+
+<style>
+ /* Lato has superscript Latin letters, but not subscript ones;
+ * digits are available in both super- and subscript form.
+ */
+ @font-face {
+ font-family: "lato";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ .test {
+ font-family: "lato";
+ font-size: 2em;
+ }
+ .super {
+ font-variant-position: super;
+ }
+</style>
+
+<section class="test">
+ <p>Synthetic superscript characters <em>must</em> be used:</p>
+ <!-- ZERO WIDTH SPACE between the spans separates the runs, so the first can use OpenType alternates
+ but the second can't. -->
+ <p>Text with <span class="super">superscript</span>&#x200b;<span class="super"> 3.14</span></p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-position-05.html b/testing/web-platform/tests/css/css-fonts/font-variant-position-05.html
new file mode 100644
index 0000000000..f93cb98617
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-position-05.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8"/>
+<title>CSS Test: font-variant-position must synthesize super/subscripts for unsupported characters</title>
+<link rel="mismatch" href="font-variant-position-05-notref.html">
+<meta name="assert" content="if a variant glyph is not available for all the characters in the run, simulated glyphs should be synthesized for all characters">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-variant-position-prop">
+
+<style>
+ /* Lato has superscript Latin letters, but not subscript ones;
+ * digits are available in both super- and subscript form.
+ */
+ @font-face {
+ font-family: "lato";
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ .test {
+ font-family: "lato";
+ font-size: 2em;
+ }
+ .super {
+ font-variant-position: super;
+ }
+</style>
+
+<section class="test">
+ <p>Synthetic superscript characters <em>must</em> be used:</p>
+ <!-- Note that Lato does not have a superscript alternate for the space or period!
+ Therefore, the entire superscript run should be synthesized. -->
+ <p>Text with <span class="super">superscript 3.14</span></p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-position-ref.html b/testing/web-platform/tests/css/css-fonts/font-variant-position-ref.html
new file mode 100644
index 0000000000..8e71f7e153
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-position-ref.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<title>CSS Test: feature value matching for font-variant-position</title>
+<link rel="author" title="John Daggett" href="mailto:jdaggett@mozilla.com"/>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<script type="text/javascript" src="support/fonts/gsubtest-features.js"></script>
+<script type="text/javascript" src="support/js/font-variant-features.js"></script>
+<link rel="stylesheet" href="support/css/font-variant-features.css" type="text/css"/>
+</head>
+<body>
+<div id="content"></div>
+<script type="text/javascript">
+ document.getElementById("content").appendChild(createFeatureTestTable(gPropertyData, "font-variant-position", true, false));
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variant-position.html b/testing/web-platform/tests/css/css-fonts/font-variant-position.html
new file mode 100644
index 0000000000..857062407d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variant-position.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<title>CSS Test: feature value matching for font-variant-position</title>
+<link rel="author" title="John Daggett" href="mailto:jdaggett@mozilla.com"/>
+<link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-variant-position-prop"/>
+<link rel="match" href="font-variant-position-ref.html"/>
+<meta name="assert" content="Values of font-variant-position should enable specific features without enabling others"/>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<script type="text/javascript" src="support/fonts/gsubtest-features.js"></script>
+<script type="text/javascript" src="support/js/font-variant-features.js"></script>
+<link rel="stylesheet" href="support/css/font-variant-features.css" type="text/css"/>
+</head>
+<body>
+<div id="content"></div>
+<script type="text/javascript">
+ document.getElementById("content").appendChild(createFeatureTestTable(gPropertyData, "font-variant-position", false, false));
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-variation-settings-serialization-001.html b/testing/web-platform/tests/css/css-fonts/font-variation-settings-serialization-001.html
new file mode 100644
index 0000000000..88764fd652
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-variation-settings-serialization-001.html
@@ -0,0 +1,24 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>CSS Test: font-variation-settings serialization</title>
+ <link rel="author" title="Greg Whitworth" href="mailto:gwhit@microsoft.com">
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-4/#propdef-font-variation-settings">
+ <link rel="issue" href="https://github.com/w3c/csswg-drafts/issues/1959#issuecomment-360864254">
+ <meta name="description" content="It was decided in issue 1959 that font-variation-settings is a map, therefore duplicates should be removed">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <body>
+ <div id="test1" style='font-variation-settings: "bldA" 1, "bldA" 2'></div>
+
+ <script>
+ const test1_canEqual = ['"bldA" 2', "'bldA' 2"];
+ test(function() {
+ assert_in_array(getComputedStyle(document.getElementById('test1')).fontVariationSettings, test1_canEqual);
+ }, "font-variation-settings should be serialized to not include duplicates");
+ </script>
+ </body>
+</html>
+
diff --git a/testing/web-platform/tests/css/css-fonts/font-weight-bolder-001-ref.xht b/testing/web-platform/tests/css/css-fonts/font-weight-bolder-001-ref.xht
new file mode 100644
index 0000000000..c90b7dfc23
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-weight-bolder-001-ref.xht
@@ -0,0 +1,60 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: font weight mapping with various families with bolder use (ref)</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-weight" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-boldness" />
+ <meta name="assert" content="Font weights should map to corresponding font faces in a family with all weights" />
+ <style type="text/css">
+ span#verify { font-family: CSSTest Verify; font-weight: normal; }
+ div { margin-bottom: 1em; }
+ body { margin: 50px; }
+ table {
+ border-collapse: collapse;
+ }
+ th {
+ font-weight: normal;
+ text-align: left;
+ padding-right: 1em;
+ }
+ span { }
+ thead th { text-align: center; padding-bottom: 1em; }
+ td { width: 5em; text-align: center; }
+ td.f1 { font-family: CSSTest Weights; }
+ td.f2 { font-family: CSSTest Weights; }
+ td.f3 { font-family: CSSTest Weights; }
+ td.f4 { font-family: CSSTest Weights; }
+ td.f5 { font-family: CSSTest Weights; }
+ td.f6 { font-family: CSSTest Weights; }
+ td.f7 { font-family: CSSTest Weights; }
+ td.f8 { font-family: CSSTest Weights; }
+ th.f1 { display: table-cell; }
+ th.f2 { display: table-cell; }
+ th.f3 { display: table-cell; }
+ th.f4 { display: table-cell; }
+ th.f5 { display: table-cell; }
+ th.f6 { display: table-cell; }
+ th.f7 { display: table-cell; }
+ th.f8 { display: table-cell; }
+ .b { font-weight: bold; }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <table>
+ <thead><th class="f1"></th><th class="f1">Full</th><th class="f2">W1479</th><th class="f3">W15</th><th class="f4">W24</th><th class="f5">W2569</th><th class="f6">W258</th><th class="f7">W3589</th><th class="f8">W47</th></thead>
+ <tr class="w1"><th>100</th><td class="f1"><span>4</span></td><td class="f2"><span>4</span></td><td class="f3"><span>5</span></td><td class="f4"><span>4</span></td><td class="f5"><span>5</span></td><td class="f6"><span>5</span></td><td class="f7"><span>5</span></td><td class="f8"><span>4</span></td></tr>
+ <tr class="w2"><th>200</th><td class="f1"><span>4</span></td><td class="f2"><span>4</span></td><td class="f3"><span>5</span></td><td class="f4"><span>4</span></td><td class="f5"><span>5</span></td><td class="f6"><span>5</span></td><td class="f7"><span>5</span></td><td class="f8"><span>4</span></td></tr>
+ <tr class="w3"><th>300</th><td class="f1"><span>4</span></td><td class="f2"><span>4</span></td><td class="f3"><span>5</span></td><td class="f4"><span>4</span></td><td class="f5"><span>5</span></td><td class="f6"><span>5</span></td><td class="f7"><span>5</span></td><td class="f8"><span>4</span></td></tr>
+ <tr class="w4"><th>400</th><td class="f1"><span>7</span></td><td class="f2"><span>7</span></td><td class="f3 b"><span>5</span></td><td class="f4 b"><span>4</span></td><td class="f5"><span>9</span></td><td class="f6"><span>8</span></td><td class="f7"><span>8</span></td><td class="f8"><span>7</span></td></tr>
+ <tr class="w5"><th>500</th><td class="f1"><span>7</span></td><td class="f2"><span>7</span></td><td class="f3 b"><span>5</span></td><td class="f4 b"><span>4</span></td><td class="f5"><span>9</span></td><td class="f6"><span>8</span></td><td class="f7"><span>8</span></td><td class="f8"><span>7</span></td></tr>
+ <tr class="w6"><th>600</th><td class="f1"><span>9</span></td><td class="f2"><span>9</span></td><td class="f3 b"><span>5</span></td><td class="f4 b"><span>4</span></td><td class="f5"><span>9</span></td><td class="f6"><span>8</span></td><td class="f7"><span>9</span></td><td class="f8"><span>7</span></td></tr>
+ <tr class="w7"><th>700</th><td class="f1"><span>9</span></td><td class="f2"><span>9</span></td><td class="f3 b"><span>5</span></td><td class="f4 b"><span>4</span></td><td class="f5"><span>9</span></td><td class="f6"><span>8</span></td><td class="f7"><span>9</span></td><td class="f8"><span>7</span></td></tr>
+ <tr class="w8"><th>800</th><td class="f1"><span>9</span></td><td class="f2"><span>9</span></td><td class="f3 b"><span>5</span></td><td class="f4 b"><span>4</span></td><td class="f5"><span>9</span></td><td class="f6"><span>8</span></td><td class="f7"><span>9</span></td><td class="f8"><span>7</span></td></tr>
+ <tr class="w9"><th>900</th><td class="f1"><span>9</span></td><td class="f2"><span>9</span></td><td class="f3 b"><span>5</span></td><td class="f4 b"><span>4</span></td><td class="f5"><span>9</span></td><td class="f6"><span>8</span></td><td class="f7"><span>9</span></td><td class="f8"><span>7</span></td></tr>
+ </table>
+ <p>The table above should match the image below. The numbers and bolding (if present) must match to pass.</p>
+ <img src="support/font-weight-bolder-001-ref.png" />
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-weight-bolder-001.xht b/testing/web-platform/tests/css/css-fonts/font-weight-bolder-001.xht
new file mode 100644
index 0000000000..60821ab809
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-weight-bolder-001.xht
@@ -0,0 +1,71 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: font weight mapping with various families with bolder use</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-weight" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-boldness" />
+ <link rel="match" href="font-weight-bolder-001-ref.xht"/>
+ <meta name="flags" content="should" />
+ <meta name="assert" content="Font weights should map to corresponding font faces in a family with all weights" />
+ <style type="text/css">
+ span#verify { font-family: CSSTest Verify; font-weight: normal; }
+ div { margin-bottom: 1em; }
+ body { margin: 50px; }
+ table {
+ border-collapse: collapse;
+ }
+ th {
+ font-weight: normal;
+ text-align: left;
+ padding-right: 1em;
+ }
+ span { font-weight: bolder; }
+ thead th { text-align: center; padding-bottom: 1em; }
+ td { width: 5em; text-align: center; }
+ td.f1 { font-family: CSSTest Weights Full; }
+ td.f2 { font-family: CSSTest Weights W1479; }
+ td.f3 { font-family: CSSTest Weights W15; }
+ td.f4 { font-family: CSSTest Weights W24; }
+ td.f5 { font-family: CSSTest Weights W2569; }
+ td.f6 { font-family: CSSTest Weights W258; }
+ td.f7 { font-family: CSSTest Weights W3589; }
+ td.f8 { font-family: CSSTest Weights W47; }
+ th.f1 { display: table-cell; }
+ th.f2 { display: table-cell; }
+ th.f3 { display: table-cell; }
+ th.f4 { display: table-cell; }
+ th.f5 { display: table-cell; }
+ th.f6 { display: table-cell; }
+ th.f7 { display: table-cell; }
+ th.f8 { display: table-cell; }
+
+ tr.w1 td { font-weight: 100; }
+ tr.w2 td { font-weight: 200; }
+ tr.w3 td { font-weight: 300; }
+ tr.w4 td { font-weight: 400; }
+ tr.w5 td { font-weight: 500; }
+ tr.w6 td { font-weight: 600; }
+ tr.w7 td { font-weight: 700; }
+ tr.w8 td { font-weight: 800; }
+ tr.w9 td { font-weight: 900; }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <table>
+ <thead><th class="f1"></th><th class="f1">Full</th><th class="f2">W1479</th><th class="f3">W15</th><th class="f4">W24</th><th class="f5">W2569</th><th class="f6">W258</th><th class="f7">W3589</th><th class="f8">W47</th></thead>
+ <tr class="w1"><th>100</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ <tr class="w2"><th>200</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ <tr class="w3"><th>300</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ <tr class="w4"><th>400</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ <tr class="w5"><th>500</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ <tr class="w6"><th>600</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ <tr class="w7"><th>700</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ <tr class="w8"><th>800</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ <tr class="w9"><th>900</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ </table>
+ <p>The table above should match the image below. The numbers and bolding (if present) must match to pass.</p>
+ <img src="support/font-weight-bolder-001-ref.png" />
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-weight-lighter-001-ref.xht b/testing/web-platform/tests/css/css-fonts/font-weight-lighter-001-ref.xht
new file mode 100644
index 0000000000..ffeb49a7fa
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-weight-lighter-001-ref.xht
@@ -0,0 +1,60 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: font weight mapping with various families with lighter use (ref)</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-weight" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-boldness" />
+ <meta name="assert" content="Font weights should map to corresponding font faces in a family with all weights" />
+ <style type="text/css">
+ span#verify { font-family: CSSTest Verify; font-weight: normal; }
+ div { margin-bottom: 1em; }
+ body { margin: 50px; }
+ table {
+ border-collapse: collapse;
+ }
+ th {
+ font-weight: normal;
+ text-align: left;
+ padding-right: 1em;
+ }
+ span { }
+ thead th { text-align: center; padding-bottom: 1em; }
+ td { width: 5em; text-align: center; }
+ td.f1 { font-family: CSSTest Weights; }
+ td.f2 { font-family: CSSTest Weights; }
+ td.f3 { font-family: CSSTest Weights; }
+ td.f4 { font-family: CSSTest Weights; }
+ td.f5 { font-family: CSSTest Weights; }
+ td.f6 { font-family: CSSTest Weights; }
+ td.f7 { font-family: CSSTest Weights; }
+ td.f8 { font-family: CSSTest Weights; }
+ th.f1 { display: table-cell; }
+ th.f2 { display: table-cell; }
+ th.f3 { display: table-cell; }
+ th.f4 { display: table-cell; }
+ th.f5 { display: table-cell; }
+ th.f6 { display: table-cell; }
+ th.f7 { display: table-cell; }
+ th.f8 { display: table-cell; }
+ .b { font-weight: bold; }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <table>
+ <thead><th class="f1"></th><th class="f1">Full</th><th class="f2">W1479</th><th class="f3">W15</th><th class="f4">W24</th><th class="f5">W2569</th><th class="f6">W258</th><th class="f7">W3589</th><th class="f8">W47</th></thead>
+ <tr class="w1"><th>100</th><td class="f1"><span>1</span></td><td class="f2"><span>1</span></td><td class="f3"><span>1</span></td><td class="f4"><span>2</span></td><td class="f5"><span>2</span></td><td class="f6"><span>2</span></td><td class="f7"><span>3</span></td><td class="f8"><span>4</span></td></tr>
+ <tr class="w2"><th>200</th><td class="f1"><span>1</span></td><td class="f2"><span>1</span></td><td class="f3"><span>1</span></td><td class="f4"><span>2</span></td><td class="f5"><span>2</span></td><td class="f6"><span>2</span></td><td class="f7"><span>3</span></td><td class="f8"><span>4</span></td></tr>
+ <tr class="w3"><th>300</th><td class="f1"><span>1</span></td><td class="f2"><span>1</span></td><td class="f3"><span>1</span></td><td class="f4"><span>2</span></td><td class="f5"><span>2</span></td><td class="f6"><span>2</span></td><td class="f7"><span>3</span></td><td class="f8"><span>4</span></td></tr>
+ <tr class="w4"><th>400</th><td class="f1"><span>1</span></td><td class="f2"><span>1</span></td><td class="f3"><span>1</span></td><td class="f4"><span>2</span></td><td class="f5"><span>2</span></td><td class="f6"><span>2</span></td><td class="f7"><span>3</span></td><td class="f8"><span>4</span></td></tr>
+ <tr class="w5"><th>500</th><td class="f1"><span>1</span></td><td class="f2"><span>1</span></td><td class="f3"><span>1</span></td><td class="f4"><span>2</span></td><td class="f5"><span>2</span></td><td class="f6"><span>2</span></td><td class="f7"><span>3</span></td><td class="f8"><span>4</span></td></tr>
+ <tr class="w6"><th>600</th><td class="f1"><span>4</span></td><td class="f2"><span>4</span></td><td class="f3"><span>5</span></td><td class="f4"><span>4</span></td><td class="f5"><span>5</span></td><td class="f6"><span>5</span></td><td class="f7"><span>5</span></td><td class="f8"><span>4</span></td></tr>
+ <tr class="w7"><th>700</th><td class="f1"><span>4</span></td><td class="f2"><span>4</span></td><td class="f3"><span>5</span></td><td class="f4"><span>4</span></td><td class="f5"><span>5</span></td><td class="f6"><span>5</span></td><td class="f7"><span>5</span></td><td class="f8"><span>4</span></td></tr>
+ <tr class="w8"><th>800</th><td class="f1"><span>7</span></td><td class="f2"><span>7</span></td><td class="f3 b"><span>5</span></td><td class="f4 b"><span>4</span></td><td class="f5"><span>9</span></td><td class="f6"><span>8</span></td><td class="f7"><span>8</span></td><td class="f8"><span>7</span></td></tr>
+ <tr class="w9"><th>900</th><td class="f1"><span>7</span></td><td class="f2"><span>7</span></td><td class="f3 b"><span>5</span></td><td class="f4 b"><span>4</span></td><td class="f5"><span>9</span></td><td class="f6"><span>8</span></td><td class="f7"><span>8</span></td><td class="f8"><span>7</span></td></tr>
+ </table>
+ <p>The table above should match the image below. The numbers and bolding (if present) must match to pass.</p>
+ <img src="support/font-weight-lighter-001-ref.png" />
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-weight-lighter-001.xht b/testing/web-platform/tests/css/css-fonts/font-weight-lighter-001.xht
new file mode 100644
index 0000000000..c529c79c75
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-weight-lighter-001.xht
@@ -0,0 +1,71 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: font weight mapping with various families with lighter use</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-weight" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-boldness" />
+ <link rel="match" href="font-weight-lighter-001-ref.xht"/>
+ <meta name="flags" content="should" />
+ <meta name="assert" content="Font weights should map to corresponding font faces in a family with all weights" />
+ <style type="text/css">
+ span#verify { font-family: CSSTest Verify; font-weight: normal; }
+ div { margin-bottom: 1em; }
+ body { margin: 50px; }
+ table {
+ border-collapse: collapse;
+ }
+ th {
+ font-weight: normal;
+ text-align: left;
+ padding-right: 1em;
+ }
+ span { font-weight: lighter; }
+ thead th { text-align: center; padding-bottom: 1em; }
+ td { width: 5em; text-align: center; }
+ td.f1 { font-family: CSSTest Weights Full; }
+ td.f2 { font-family: CSSTest Weights W1479; }
+ td.f3 { font-family: CSSTest Weights W15; }
+ td.f4 { font-family: CSSTest Weights W24; }
+ td.f5 { font-family: CSSTest Weights W2569; }
+ td.f6 { font-family: CSSTest Weights W258; }
+ td.f7 { font-family: CSSTest Weights W3589; }
+ td.f8 { font-family: CSSTest Weights W47; }
+ th.f1 { display: table-cell; }
+ th.f2 { display: table-cell; }
+ th.f3 { display: table-cell; }
+ th.f4 { display: table-cell; }
+ th.f5 { display: table-cell; }
+ th.f6 { display: table-cell; }
+ th.f7 { display: table-cell; }
+ th.f8 { display: table-cell; }
+
+ tr.w1 td { font-weight: 100; }
+ tr.w2 td { font-weight: 200; }
+ tr.w3 td { font-weight: 300; }
+ tr.w4 td { font-weight: 400; }
+ tr.w5 td { font-weight: 500; }
+ tr.w6 td { font-weight: 600; }
+ tr.w7 td { font-weight: 700; }
+ tr.w8 td { font-weight: 800; }
+ tr.w9 td { font-weight: 900; }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <table>
+ <thead><th class="f1"></th><th class="f1">Full</th><th class="f2">W1479</th><th class="f3">W15</th><th class="f4">W24</th><th class="f5">W2569</th><th class="f6">W258</th><th class="f7">W3589</th><th class="f8">W47</th></thead>
+ <tr class="w1"><th>100</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ <tr class="w2"><th>200</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ <tr class="w3"><th>300</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ <tr class="w4"><th>400</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ <tr class="w5"><th>500</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ <tr class="w6"><th>600</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ <tr class="w7"><th>700</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ <tr class="w8"><th>800</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ <tr class="w9"><th>900</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ </table>
+ <p>The table above should match the image below. The numbers and bolding (if present) must match to pass.</p>
+ <img src="support/font-weight-lighter-001-ref.png" />
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-weight-normal-001-ref.xht b/testing/web-platform/tests/css/css-fonts/font-weight-normal-001-ref.xht
new file mode 100644
index 0000000000..2078c80e74
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-weight-normal-001-ref.xht
@@ -0,0 +1,60 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: font weight mapping with various families (ref)</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-weight" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-boldness" />
+ <meta name="assert" content="Font weights should map to corresponding font faces in a family with all weights" />
+ <style type="text/css">
+ span#verify { font-family: CSSTest Verify; font-weight: normal; }
+ div { margin-bottom: 1em; }
+ body { margin: 50px; }
+ table {
+ border-collapse: collapse;
+ }
+ th {
+ font-weight: normal;
+ text-align: left;
+ padding-right: 1em;
+ }
+ span { }
+ thead th { text-align: center; padding-bottom: 1em; }
+ td { width: 5em; text-align: center; }
+ td.f1 { font-family: CSSTest Weights; }
+ td.f2 { font-family: CSSTest Weights; }
+ td.f3 { font-family: CSSTest Weights; }
+ td.f4 { font-family: CSSTest Weights; }
+ td.f5 { font-family: CSSTest Weights; }
+ td.f6 { font-family: CSSTest Weights; }
+ td.f7 { font-family: CSSTest Weights; }
+ td.f8 { font-family: CSSTest Weights; }
+ th.f1 { display: table-cell; }
+ th.f2 { display: table-cell; }
+ th.f3 { display: table-cell; }
+ th.f4 { display: table-cell; }
+ th.f5 { display: table-cell; }
+ th.f6 { display: table-cell; }
+ th.f7 { display: table-cell; }
+ th.f8 { display: table-cell; }
+ .b { font-weight: bold; }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <table>
+ <thead><th class="f1"></th><th class="f1">Full</th><th class="f2">W1479</th><th class="f3">W15</th><th class="f4">W24</th><th class="f5">W2569</th><th class="f6">W258</th><th class="f7">W3589</th><th class="f8">W47</th></thead>
+ <tr class="w1"><th>100</th><td class="f1"><span>1</span></td><td class="f2"><span>1</span></td><td class="f3"><span>1</span></td><td class="f4"><span>2</span></td><td class="f5"><span>2</span></td><td class="f6"><span>2</span></td><td class="f7"><span>3</span></td><td class="f8"><span>4</span></td></tr>
+ <tr class="w2"><th>200</th><td class="f1"><span>2</span></td><td class="f2"><span>1</span></td><td class="f3"><span>1</span></td><td class="f4"><span>2</span></td><td class="f5"><span>2</span></td><td class="f6"><span>2</span></td><td class="f7"><span>3</span></td><td class="f8"><span>4</span></td></tr>
+ <tr class="w3"><th>300</th><td class="f1"><span>3</span></td><td class="f2"><span>1</span></td><td class="f3"><span>1</span></td><td class="f4"><span>2</span></td><td class="f5"><span>2</span></td><td class="f6"><span>2</span></td><td class="f7"><span>3</span></td><td class="f8"><span>4</span></td></tr>
+ <tr class="w4"><th>400</th><td class="f1"><span>4</span></td><td class="f2"><span>4</span></td><td class="f3"><span>5</span></td><td class="f4"><span>4</span></td><td class="f5"><span>5</span></td><td class="f6"><span>5</span></td><td class="f7"><span>5</span></td><td class="f8"><span>4</span></td></tr>
+ <tr class="w5"><th>500</th><td class="f1"><span>5</span></td><td class="f2"><span>4</span></td><td class="f3"><span>5</span></td><td class="f4"><span>4</span></td><td class="f5"><span>5</span></td><td class="f6"><span>5</span></td><td class="f7"><span>5</span></td><td class="f8"><span>4</span></td></tr>
+ <tr class="w6"><th>600</th><td class="f1"><span>6</span></td><td class="f2"><span>7</span></td><td class="f3 b"><span>5</span></td><td class="f4 b"><span>4</span></td><td class="f5"><span>6</span></td><td class="f6"><span>8</span></td><td class="f7"><span>8</span></td><td class="f8"><span>7</span></td></tr>
+ <tr class="w7"><th>700</th><td class="f1"><span>7</span></td><td class="f2"><span>7</span></td><td class="f3 b"><span>5</span></td><td class="f4 b"><span>4</span></td><td class="f5"><span>9</span></td><td class="f6"><span>8</span></td><td class="f7"><span>8</span></td><td class="f8"><span>7</span></td></tr>
+ <tr class="w8"><th>800</th><td class="f1"><span>8</span></td><td class="f2"><span>9</span></td><td class="f3 b"><span>5</span></td><td class="f4 b"><span>4</span></td><td class="f5"><span>9</span></td><td class="f6"><span>8</span></td><td class="f7"><span>8</span></td><td class="f8"><span>7</span></td></tr>
+ <tr class="w9"><th>900</th><td class="f1"><span>9</span></td><td class="f2"><span>9</span></td><td class="f3 b"><span>5</span></td><td class="f4 b"><span>4</span></td><td class="f5"><span>9</span></td><td class="f6"><span>8</span></td><td class="f7"><span>9</span></td><td class="f8"><span>7</span></td></tr>
+ </table>
+ <p>The table above should match the image below. The numbers and bolding (if present) must match to pass.</p>
+ <img src="support/font-weight-normal-001-ref.png" />
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/font-weight-normal-001.xht b/testing/web-platform/tests/css/css-fonts/font-weight-normal-001.xht
new file mode 100644
index 0000000000..1106b7c92f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/font-weight-normal-001.xht
@@ -0,0 +1,71 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: font weight mapping with various families</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-weight" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-boldness" />
+ <link rel="match" href="font-weight-normal-001-ref.xht"/>
+ <meta name="flags" content="should" />
+ <meta name="assert" content="Font weights should map to corresponding font faces in a family with all weights" />
+ <style type="text/css">
+ span#verify { font-family: CSSTest Verify; font-weight: normal; }
+ div { margin-bottom: 1em; }
+ body { margin: 50px; }
+ table {
+ border-collapse: collapse;
+ }
+ th {
+ font-weight: normal;
+ text-align: left;
+ padding-right: 1em;
+ }
+ span { }
+ thead th { text-align: center; padding-bottom: 1em; }
+ td { width: 5em; text-align: center; }
+ td.f1 { font-family: CSSTest Weights Full; }
+ td.f2 { font-family: CSSTest Weights W1479; }
+ td.f3 { font-family: CSSTest Weights W15; }
+ td.f4 { font-family: CSSTest Weights W24; }
+ td.f5 { font-family: CSSTest Weights W2569; }
+ td.f6 { font-family: CSSTest Weights W258; }
+ td.f7 { font-family: CSSTest Weights W3589; }
+ td.f8 { font-family: CSSTest Weights W47; }
+ th.f1 { display: table-cell; }
+ th.f2 { display: table-cell; }
+ th.f3 { display: table-cell; }
+ th.f4 { display: table-cell; }
+ th.f5 { display: table-cell; }
+ th.f6 { display: table-cell; }
+ th.f7 { display: table-cell; }
+ th.f8 { display: table-cell; }
+
+ tr.w1 td { font-weight: 100; }
+ tr.w2 td { font-weight: 200; }
+ tr.w3 td { font-weight: 300; }
+ tr.w4 td { font-weight: 400; }
+ tr.w5 td { font-weight: 500; }
+ tr.w6 td { font-weight: 600; }
+ tr.w7 td { font-weight: 700; }
+ tr.w8 td { font-weight: 800; }
+ tr.w9 td { font-weight: 900; }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <table>
+ <thead><th class="f1"></th><th class="f1">Full</th><th class="f2">W1479</th><th class="f3">W15</th><th class="f4">W24</th><th class="f5">W2569</th><th class="f6">W258</th><th class="f7">W3589</th><th class="f8">W47</th></thead>
+ <tr class="w1"><th>100</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ <tr class="w2"><th>200</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ <tr class="w3"><th>300</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ <tr class="w4"><th>400</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ <tr class="w5"><th>500</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ <tr class="w6"><th>600</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ <tr class="w7"><th>700</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ <tr class="w8"><th>800</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ <tr class="w9"><th>900</th><td class="f1"><span>A</span></td><td class="f2"><span>A</span></td><td class="f3"><span>A</span></td><td class="f4"><span>A</span></td><td class="f5"><span>A</span></td><td class="f6"><span>A</span></td><td class="f7"><span>A</span></td><td class="f8"><span>A</span></td></tr>
+ </table>
+ <p>The table above should match the image below. The numbers and bolding (if present) must match to pass.</p>
+ <img src="support/font-weight-normal-001-ref.png" />
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/format-specifiers-variations.html b/testing/web-platform/tests/css/css-fonts/format-specifiers-variations.html
new file mode 100644
index 0000000000..32b8ebed67
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/format-specifiers-variations.html
@@ -0,0 +1,57 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>CSS Test: Supported format specifiers should load</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#src-desc"/>
+<meta name="assert" content="Supported format specifiers should load"/>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<script>
+setup({
+ explicit_done: true
+});
+
+var formatSpecifiers = [
+ "woff",
+ "truetype",
+ "opentype",
+ "woff2",
+ "woff-variations",
+ "truetype-variations",
+ "opentype-variations",
+ "woff2-variations"
+];
+
+var defaultAhemSrc = 'url("/fonts/Ahem.ttf") format("INSERT_FORMAT")';
+
+function runTestOnFormatSpecifiers(formats, expectFail) {
+ for (var i = 0; i < formats.length; ++i) {
+ promise_test((testDetails) => {
+ var familyName = "load_ahem_" + i;
+ var ahemSrcFormat = defaultAhemSrc.replace("INSERT_FORMAT", testDetails.properties.format);
+ var fontFace = new FontFace(familyName, ahemSrcFormat);
+ if (!expectFail) {
+ return fontFace.load();
+ } else {
+ return promise_rejects_dom(testDetails, "SyntaxError", fontFace.load());
+ }
+ }, (expectFail ? "Do not load" : "Load") + " Ahem with format " + formats[i], {
+ "format": formats[i]
+ });
+ }
+}
+
+runTestOnFormatSpecifiers(formatSpecifiers, false);
+runTestOnFormatSpecifiers(formatSpecifiers.map(x => "xyz" + x), true);
+runTestOnFormatSpecifiers(formatSpecifiers.map(x => x + "xyz"), true);
+runTestOnFormatSpecifiers(formatSpecifiers.map(x => x.slice(0, -2)), true);
+runTestOnFormatSpecifiers(formatSpecifiers.map(x => x.slice(2)), true);
+runTestOnFormatSpecifiers(formatSpecifiers.map(x => x.slice(0, x.length / 3) + x.slice(x.length / 3 + 1)), true);
+
+done();
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/generic-family-keywords-001.html b/testing/web-platform/tests/css/css-fonts/generic-family-keywords-001.html
new file mode 100644
index 0000000000..bd39bac3ff
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/generic-family-keywords-001.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<title>CSS Test: Test generic family keywords matching for @font-face</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#family-name-syntax">
+<link rel="author" title="Koji Ishii" href="mailto:kojii@chromium.com">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/css-fonts/support/font-family-keywords.js"></script>
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css"/>
+<style>
+div {
+ font-size: 10px;
+}
+#ahem {
+ font-family: Ahem;
+}
+</style>
+<body>
+ <div><span id="ahem">00000</span></div>
+ <div><span id="test">00000</span></div>
+<script>
+ setup({ explicit_done: true });
+ window.addEventListener("load", () => { document.fonts.ready.then(runTests); });
+ function runTests() {
+ let ahem = document.getElementById('ahem');
+ let ahem_expected_width = ahem.offsetWidth;
+ kGenericFontFamilyKeywords.forEach(keyword => {
+ test(() => {
+ let element = document.getElementById('test');
+ element.setAttribute("style", `font-family: ${keyword};`);
+ let expected_width = element.offsetWidth;
+
+ // Insert the @font-face rules for quoted and unquoted keywords.
+ document.documentElement.insertAdjacentHTML('beforeend', `
+<style>
+@font-face {
+ font-family: ${keyword};
+ src: local(Ahem), url('/fonts/Ahem.ttf');
+}
+</style>
+<style>
+@font-face {
+ font-family: "${keyword}";
+ src: local(Ahem), url('/fonts/Ahem.ttf');
+}
+</style>`);
+
+ assert_equals(element.offsetWidth, expected_width, `unquoted ${keyword} does not match @font-face rule`);
+
+ element.setAttribute("style", `font-family: "${keyword}";`);
+ assert_equals(element.offsetWidth, ahem_expected_width, `quoted ${keyword} matches @font-face rule`);
+ }, `@font-face matching for quoted and unquoted ${keyword}`);
+ });
+ done();
+ }
+</script>
+</body>
diff --git a/testing/web-platform/tests/css/css-fonts/generic-family-keywords-002.html b/testing/web-platform/tests/css/css-fonts/generic-family-keywords-002.html
new file mode 100644
index 0000000000..3edd5dc97f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/generic-family-keywords-002.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>Generic font family: -webkit-* treated as &lt;font-family&gt;</title>
+ <link rel="help" href="https://drafts.csswg.org/css-fonts-4/#generic-font-families">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/css/css-fonts/support/font-family-keywords.js"></script>
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"/>
+ <style>
+ div {
+ font-size: 10px;
+ }
+ #ahem {
+ font-family: Ahem;
+ }
+ </style>
+ </head>
+ <body>
+ <div><span id="ahem">00000</span></div>
+ <div><span id="test">00000</span></div>
+<script>
+ setup({ explicit_done: true });
+ window.addEventListener("load", () => { document.fonts.ready.then(runTests); });
+ function SetFontFamilyAndMeasure(fontFamilyValue) {
+ var element = document.getElementById('test');
+ element.setAttribute("style", `font-family: ${fontFamilyValue}, Ahem;`);
+ return element.offsetWidth;
+ }
+ function runTests() {
+ let ahem = document.getElementById('ahem');
+ let ahem_expected_width = ahem.offsetWidth;
+ let families = kGenericFontFamilyKeywords.map(keyword => `-webkit-${keyword}`).concat(kNonGenericFontFamilyKeywords);
+ families.forEach(name => {
+ test(function() {
+ assert_equals(SetFontFamilyAndMeasure(name), ahem_expected_width);
+ }, `font-family: ${name} treated as <font-family>, not <generic-name>`);
+ });
+ done();
+ }
+</script>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/generic-family-keywords-003.html b/testing/web-platform/tests/css/css-fonts/generic-family-keywords-003.html
new file mode 100644
index 0000000000..c787b59fb2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/generic-family-keywords-003.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<title>Test quotes vs. no-quotes matchings of generic font family keywords in a CanvasRenderingContext2D</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#family-name-syntax">
+<link rel="author" title="Frédéric Wang" href="mailto:fwang@igalia.com">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/css-fonts/support/font-family-keywords.js"></script>
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css"/>
+<body>
+<canvas id="canvas" width="400" height="150"></canvas>
+<script>
+ setup({ explicit_done: true });
+ window.addEventListener("load", () => { document.fonts.ready.then(runTests); });
+ function runTests() {
+ const measured_text = "|||||";
+ const canvas = document.getElementById("canvas");
+ const ctx = canvas.getContext("2d");
+ ctx.font = `25px Ahem`;
+ let ahem_expected_width = ctx.measureText(measured_text).width;
+
+ kGenericFontFamilyKeywords.forEach(keyword => {
+ test(() => {
+ ctx.font = `25px ${keyword}`;
+ let expected_width = ctx.measureText(measured_text).width;
+
+ // Insert the @font-face rules for quoted and unquoted keywords.
+ document.documentElement.insertAdjacentHTML('beforeend', `
+<style>
+@font-face {
+ font-family: ${keyword};
+ src: local(Ahem), url('/fonts/Ahem.ttf');
+}
+</style>
+<style>
+@font-face {
+ font-family: "${keyword}";
+ src: local(Ahem), url('/fonts/Ahem.ttf');
+}
+</style>`);
+
+ ctx.font = `25px ${keyword}`;
+ let unquoted_width = ctx.measureText(measured_text).width;
+ assert_equals(unquoted_width, expected_width, `unquoted ${keyword} does not match @font-face rule`);
+
+ ctx.font = `25px "${keyword}"`;
+ let quoted_width = ctx.measureText(measured_text).width;
+ assert_equals(quoted_width, ahem_expected_width, `quoted ${keyword} matches @font-face rule`);
+ }, `@font-face matching for quoted and unquoted ${keyword} (drawing text in a canvas)`);
+ });
+ done();
+ }
+</script>
+</body>
diff --git a/testing/web-platform/tests/css/css-fonts/hiragana-katakana-kerning-notref.html b/testing/web-platform/tests/css/css-fonts/hiragana-katakana-kerning-notref.html
new file mode 100644
index 0000000000..89d41d4225
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/hiragana-katakana-kerning-notref.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="UTF-8" />
+ <title>CSS Reference: Hiragana/Katakana kerning</title>
+ <style>
+ @font-face {
+ font-family: "Noto Sans JP";
+ src: url(resources/NotoSansJP-kana_test-subset.otf);
+ }
+
+ p {
+ position: absolute;
+ top: 0;
+ left: 0;
+
+ font-size: 6em;
+ font-family: "Noto Sans JP";
+ font-feature-settings: "palt" on;
+ font-kerning: none;
+
+ margin: 1em;
+ }
+
+ .no-kerning-red {
+ color: red;
+ }
+
+ .no-kerning-green {
+ color: green;
+ mix-blend-mode: multiply;
+ }
+ </style>
+ </head>
+ <body>
+ <span>
+ RED or GREEN text is visible if kerning is applying correctly, with only
+ BLACK otherwise:
+ </span>
+ <p class="no-kerning-red">すペ</p>
+ <p class="no-kerning-green">すペ</p>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/hiragana-katakana-kerning.html b/testing/web-platform/tests/css/css-fonts/hiragana-katakana-kerning.html
new file mode 100644
index 0000000000..9d72378581
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/hiragana-katakana-kerning.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="UTF-8" />
+ <title>CSS Test: Hiragana/Katakana kerning</title>
+ <link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+ <!-- Based on testcase by Harry Dalton, see https://bugzilla.mozilla.org/show_bug.cgi?id=1811471;
+ check that kerning works between hiragana and katakana, because both map to the same
+ OpenType script behavior. -->
+ <link rel="mismatch" href="hiragana-katakana-kerning-notref.html">
+ <link rel="help" href="https://learn.microsoft.com/en-us/typography/opentype/spec/scripttags">
+ <style>
+ @font-face {
+ font-family: "Noto Sans JP";
+ src: url(resources/NotoSansJP-kana_test-subset.otf);
+ }
+
+ p {
+ position: absolute;
+ top: 0;
+ left: 0;
+
+ font-size: 6em;
+ font-family: "Noto Sans JP";
+ font-feature-settings: "palt" on;
+
+ margin: 1em;
+ }
+
+ .with-kerning {
+ font-kerning: normal;
+ color: red;
+ }
+
+ .no-kerning {
+ font-kerning: none;
+ color: green;
+ mix-blend-mode: multiply;
+ }
+ </style>
+ </head>
+ <body>
+ <span>
+ RED or GREEN text is visible if kerning is applying correctly, with only
+ BLACK otherwise:
+ </span>
+ <p class="with-kerning">すペ</p>
+ <p class="no-kerning">すペ</p>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/idlharness.html b/testing/web-platform/tests/css/css-fonts/idlharness.html
new file mode 100644
index 0000000000..ecc601bcf6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/idlharness.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<title>CSS Fonts IDL tests</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/WebIDLParser.js"></script>
+<script src="/resources/idlharness.js"></script>
+
+<style>
+ div { display: block; }
+</style>
+<style>
+ @font-face {
+ font-family: fwf;
+ src: url(support/fonts/FontWithFancyFeatures.otf);
+ }
+</style>
+
+<script>
+ "use strict";
+
+ idl_test(
+ ["css-fonts"],
+ ["cssom"],
+ idl_array => {
+ idl_array.add_objects({
+ CSSRule: ['cssRule'],
+ CSSFontFaceRule: ['cssFontFaceRule'],
+ });
+ self.cssRule = document.styleSheets[0].cssRules[0];
+ self.cssFontFaceRule = document.styleSheets[1].cssRules[0];
+ }
+ );
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/infinite-size-crash.html b/testing/web-platform/tests/css/css-fonts/infinite-size-crash.html
new file mode 100644
index 0000000000..d44cf4a37e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/infinite-size-crash.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <style>
+ CITE::first-letter {
+ font-size: 0%;
+ margin-inline-start: 2682182284.200815ch
+ }
+
+ * {
+ font-size: 4294967295% !important;
+ }
+ </style>
+</head>
+<del>
+ <button>
+ <cite></cite>
+ </button>
+</del>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/inheritance.html b/testing/web-platform/tests/css/css-fonts/inheritance.html
new file mode 100644
index 0000000000..8f7d4b9d5a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/inheritance.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Inheritance of CSS Fonts Level 3 & 4 properties</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#property-index">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#property-index">
+<meta name="assert" content="Properties inherit according to the spec.">
+<meta name="assert" content="Properties have initial values according to the spec.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/inheritance-testcommon.js"></script>
+<style>
+ #box {
+ font-size: medium;
+ }
+</style>
+</head>
+<body>
+<div id="box"></div>
+<div id="container">
+ <div id="target"></div>
+</div>
+<script>
+'use strict';
+const box = document.getElementById('box');
+const mediumFontSize = getComputedStyle(box).fontSize;
+
+assert_inherited('font-family', null, '"Not Initial!"'); // Initial value depends on user agent.
+assert_inherited('font-feature-settings', 'normal', '"smcp", "swsh" 2');
+assert_inherited('font-kerning', 'auto', 'none');
+assert_inherited('font-language-override', 'normal' , '"ksw"');
+assert_inherited('font-optical-sizing', 'auto' , 'none');
+assert_inherited('font-size', mediumFontSize /* medium */, '123px');
+assert_inherited('font-size-adjust', 'none', '1.5');
+assert_inherited('font-stretch', '100%' /* normal */, '75%');
+assert_inherited('font-style', 'normal', 'italic');
+assert_inherited('font-synthesis', 'weight style small-caps position', 'none');
+assert_inherited('font-variant', 'normal', 'none');
+assert_inherited('font-variant-alternates', 'normal', 'historical-forms');
+assert_inherited('font-variant-caps', 'normal', 'small-caps');
+assert_inherited('font-variant-east-asian', 'normal', 'ruby');
+assert_inherited('font-variant-emoji', 'normal', 'text');
+assert_inherited('font-variant-ligatures', 'normal', 'none');
+assert_inherited('font-variant-numeric', 'normal', 'ordinal');
+assert_inherited('font-variant-position', 'normal', 'super');
+assert_inherited('font-variation-settings', 'normal', '"wght" 700');
+assert_inherited('font-weight', '400' /* normal */, '900');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/language-specific-01.html b/testing/web-platform/tests/css/css-fonts/language-specific-01.html
new file mode 100644
index 0000000000..dbffdc64b0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/language-specific-01.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>CSS Test: language-specific display</title>
+<link rel="author" title="Chris Lilley" href="chris@w3.org">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#language-specific-support">
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-ligatures-prop">
+<meta name="assert" content="However, in languages such as Turkish which uses both a dotted-i and a dotless-i, it's important to not use this ligature or use a specialized version that contains a dot over the "i".">
+<style>
+ @font-face {
+ font-family: Lato;
+ src: url(support/fonts/Lato-Medium.ttf);
+ }
+ .test {
+ font-size: 4em;
+ font-variant-ligatures: common-ligatures;
+ font-feature-settings: "liga" on, "clig" on;
+ margin-left: 1em;
+ font-family: Lato;
+ }
+
+</style>
+<body>
+
+<p>Test is passed if:</p>
+<ol>
+<li>The word fijord on the first line uses an <strong>fi</strong> ligature</li>
+<li>It is clear that the second line has a letter f followed by a Turkish dotless-i while the third line has a letter f followed by a (dotted) i. If an <strong>fi</strong> ligature is used on either the second or third line, it must still be possible to distinguish the two.</p>
+
+<p class="test" lang="en">fijord</p>
+<section class="test" lang="tr">
+<p>fıstık</p>
+<p>fikir</p>
+</section>
diff --git a/testing/web-platform/tests/css/css-fonts/line-gap-override-ref.html b/testing/web-platform/tests/css/css-fonts/line-gap-override-ref.html
new file mode 100644
index 0000000000..cb6d2ced1a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/line-gap-override-ref.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Tests the line-gap-override descriptor of @font-face</title>
+<style>
+.target {
+ position: absolute;
+ font-size: 20px;
+ top: 10px;
+ left: 10px;
+ width: 60px;
+ height: 30px;
+}
+
+.character {
+ display: inline-block;
+ background-color: green;
+ width: 1em; /* Same as an 'X' in Ahem */
+ height: 1em; /* Same as an 'X' in Ahem */
+ position: absolute;
+}
+
+</style>
+<div class="target">
+ <span class="character" style="top: 0.5em; left: 0"></span>
+ <span class="character" style="top: 2.5em; left: 0"></span>
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/line-gap-override.html b/testing/web-platform/tests/css/css-fonts/line-gap-override.html
new file mode 100644
index 0000000000..487fb2ea59
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/line-gap-override.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="author" href="mailto:xiaochengh@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-metrics-override-desc">
+<link rel="match" href="line-gap-override-ref.html">
+<title>Tests the line-gap-override descriptor of @font-face</title>
+<style>
+@font-face {
+ font-family: Ahem;
+ src: local(Ahem), url(/fonts/Ahem.ttf);
+ line-gap-override: 100%;
+}
+
+.target {
+ font: 20px Ahem;
+ color: green;
+ position: absolute;
+ top: 10px;
+ left: 10px;
+}
+</style>
+
+<div class="target">
+ X<br>
+ X
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/matching/META.yml b/testing/web-platform/tests/css/css-fonts/matching/META.yml
new file mode 100644
index 0000000000..53487a6d85
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/matching/META.yml
@@ -0,0 +1,5 @@
+suggested_reviewers:
+ - drott
+ - fantasai
+ - litherum
+ - svgeesus
diff --git a/testing/web-platform/tests/css/css-fonts/matching/README.md b/testing/web-platform/tests/css/css-fonts/matching/README.md
new file mode 100644
index 0000000000..7d333c5bca
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/matching/README.md
@@ -0,0 +1,50 @@
+# Stretch, Style, Weight Matching Tests
+This directory contains a set of tests for [the font style matching algorithm, section 5.2](https://drafts.csswg.org/css-fonts-4/#font-style-matching) of the [CSS Fonts Module Level 4](https://drafts.csswg.org/css-fonts-4/) specification.
+
+In Level 4 of the spec, the font style matching algorithm has been extended to
+support [OpenType Variations](https://www.microsoft.com/typography/otspec/otvaroverview.htm). This means, the
+`@font-face` property descriptors accept ranges for `font-style`, `font-stretch` and `font-weight` and the matching
+algorithm has been modified to take these into account, and to set variable fonts axis parameters accordingly.
+
+## Test Font
+
+For testing font matching with Variations support a test font called **Variable Test Axis Matching** was created (`variabletest_matching.ttf`).
+
+The design goal for this font is to match variable glyphs against non-variable, static reference glyphs. The variable glyphs are
+scaled according to variation axes for stretch, style, weight. The reference glyphs are not subject to variation interpolation.
+
+### Test Glyphs
+The test font contains glyphs M, N, O, P which scale according to the `wdth`, `slnt`, `ital`, and `wght` registered axes respectively. Glyphs M, N, O have zero advance width. When they are combined with the last, the P glyph, which has a width of 2000 FUnits, they form a full "test grapheme". The glyphs M, N, O, P line up vertically to form something resembling a bar chart of the applied axis parameters. For example, when the `wdth` design space coordinate is set to 100, the M bar glyph is 200 FUnits wide, when it is set to 500, the M bar glyph is 1000 FUnits wide.
+
+### Reference Glyphs
+
+The **Variable Test Axis Matching** font contains reference glyphs 0-9 to match different stops in the design coordinates space of the `wdth` axis, from 0 matching 200 FUnits to 9 matching 2000 FUnits. Analogously, glyphs p, q, w, e, r, t, y, u (the row between the numbers on a QWERTY keyboard) line up to match the N glyph at various stops for `slnt`. Glyphs ;, a, s, d, e, f, g, h, j, k, l match the O glyph for `ital`, and finally /, z, x, c, v, b, n, m match the P glyph for `wdth`.
+
+
+### Building reference tests
+
+Using the **Variable Test Axis Matching** font, [reference tests](https://web-platform-tests.org/writing-tests/reftests.html) in this directory are created as follows:
+
+ 1. Define `@font-face`s with range expressions, which trigger variation axes to be applied to the variable font.
+ 2. Use CSS style definitions to request font faces from the set of declared `@font-face`s and use blocks of the glyph sequence MNOP.
+ 3. To avoid flakiness, add reftest-wait to the html root element and use JS to remove it once font loading is complete.
+ 4. When the test is run, a screenshot is generated from the resulting output rendering.
+ 5. Define a reference rendering in a *-ref.html file, using only the non-variable reference glyphs q-p, a-;, z-/.
+ 6. When the test is run, a screenshot for the reference rendering is generated.
+ 7. For the test to pass the screenshot from 4. using OpenType Variations is compared to the reference screenshot from 6. (which is no using OpenType variations).
+
+## Font Glyphs Reference
+
+The following table explains the relationship between the M, N, O, P variation axis controlled glyphs and the non-scaled glyphs used as references. The values are specified as OpenType axis parameter values. CSS values are mapped to to those values, for example from CSS font-weight values straight to `wght`, for width from percentages straight to `wdth`. For `slnt` the CSS values are positive clockwise, but the OpenType values are positive turning counterclockwise. Here the mapping is inverted, i.e. the CSS value is multiple by -1. Compare the note in [the CSS font style property](https://drafts.csswg.org/css-fonts/#font-style-prop).
+
+| Bar Length in FUnits | 200 | 400 | 600 | 800 | 1000 | 1200 | 1400 | 1600 | 1800
+| :---: | :---: |:---: |:---: |:---: |:---: |:---: |:---: |:---: |:---: |
+| Glyph **N**, Style, `slnt` | 90 | 67.5 | 45 | 20 | 0.00 | -20 | -45 | -67.5 | -90
+| Glyph **M**, Stretch Axis `wdth` | 50 | 62.5 | 75 | 87.5 | 100 | 112.5 | 125 | 150 | 200
+| Glyph **O**, Style, `ital` | 0 | 0.125 | 0.25 | 0.375 | 0.5 | 0.625 | 0.75 | 0.875 | 1
+| Glyph **P**, Weight, `wght` | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900
+| **Ref Glyphs for:** | | | | | | | | |
+| **M** | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8
+| **N** | p | q | w | e | r | t | y | u | i
+| **O** | ; | a | s | d | f | g | h | j | k
+| **P** | / | z | x | c | v | b | n | m | ,
diff --git a/testing/web-platform/tests/css/css-fonts/matching/fixed-stretch-style-over-weight-ref.html b/testing/web-platform/tests/css/css-fonts/matching/fixed-stretch-style-over-weight-ref.html
new file mode 100644
index 0000000000..16826307c8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/matching/fixed-stretch-style-over-weight-ref.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<meta charset="utf-8">
+<style>
+ @font-face {
+ font-family: variable_axes;
+ src: url("resources/variabletest_matching.ttf");
+ }
+
+ body {
+ font-family: variable_axes, sans-serif;
+ font-size: 80px;
+ }
+</style>
+<span>4q;n</span>
+ <span>4q;n</span>
+ <span>4w;n</span>
+ <span>4w;n</span>
+ <span>4y;x</span>
+ <span>4y;x</span>
+ <span>4y;x</span>
+ <span>4u;x</span>
+ <span>4u;x</span>
+<script>
+ document.fonts.ready.then(
+ () => { document.documentElement.classList.remove("reftest-wait"); });
+</script>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/matching/fixed-stretch-style-over-weight.html b/testing/web-platform/tests/css/css-fonts/matching/fixed-stretch-style-over-weight.html
new file mode 100644
index 0000000000..c2b27be120
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/matching/fixed-stretch-style-over-weight.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<meta charset="utf-8">
+<link rel="stylesheet" href="font-matching.css">
+<!-- Tests CSS Fonts Level 4, section 5.2. font matching algorithm. Precedence
+ of properties (stretch over style, style over weight) and style over weight
+ priority. -->
+<style>
+ @font-face {
+ font-family: variable_axes;
+ src: url("resources/variabletest_matching.ttf");
+ font-stretch: 100%;
+ font-style: oblique -67.5deg -45deg;
+ font-weight: 700 800;
+ }
+
+ @font-face {
+ font-family: variable_axes;
+ src: url("resources/variabletest_matching.ttf");
+ font-stretch: 100%;
+ font-style: oblique 45deg 67.5deg;
+ font-weight: 200 300;
+ }
+</style>
+<link rel="match" href="fixed-stretch-style-over-weight-ref.html">
+<span id="stretch_style_weight_1">MNOP</span>
+ <span id="stretch_style_weight_2">MNOP</span>
+ <span id="stretch_style_weight_3">MNOP</span>
+ <span id="stretch_style_weight_4">MNOP</span>
+ <span id="stretch_style_weight_5">MNOP</span>
+ <span id="stretch_style_weight_6">MNOP</span>
+ <span id="stretch_style_weight_7">MNOP</span>
+ <span id="stretch_style_weight_8">MNOP</span>
+ <span id="stretch_style_weight_9">MNOP</span>
+<script>
+ document.fonts.ready.then(
+ () => { document.documentElement.classList.remove("reftest-wait"); });
+</script>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/matching/font-matching.css b/testing/web-platform/tests/css/css-fonts/matching/font-matching.css
new file mode 100644
index 0000000000..ebbef02f62
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/matching/font-matching.css
@@ -0,0 +1,60 @@
+body {
+ font-family: variable_axes, sans-serif;
+ font-size: 80px;
+ font-synthesis: none;
+}
+
+#stretch_style_weight_1 {
+ font-stretch: 50%;
+ font-style: oblique -90deg;
+ font-weight: 100;
+}
+
+#stretch_style_weight_2 {
+ font-stretch: 62.50%;
+ font-style: oblique -67.5deg;
+ font-weight: 200;
+}
+
+#stretch_style_weight_3 {
+ font-stretch: 75%;
+ font-style: oblique -45deg;
+ font-weight: 300;
+}
+
+#stretch_style_weight_4 {
+ font-stretch: 87.50%;
+ font-style: oblique -20deg;
+ font-weight: 400;
+}
+
+#stretch_style_weight_5 {
+ font-stretch: 100%;
+ font-style: oblique 0deg;
+ font-weight: 500;
+}
+
+#stretch_style_weight_6 {
+ font-stretch: 112.50%;
+ font-style: oblique 20deg;
+ font-weight: 600;
+}
+
+#stretch_style_weight_7 {
+ font-stretch: 125%;
+ font-style: oblique 45deg;
+ font-weight: 700;
+}
+
+#stretch_style_weight_8 {
+ font-stretch: 150%;
+ font-style: oblique 67.5deg;
+ font-weight: 800;
+}
+
+#stretch_style_weight_9 {
+ font-stretch: 200%;
+ font-style: oblique 90deg;
+ font-weight: 900;
+}
+
diff --git a/testing/web-platform/tests/css/css-fonts/matching/font-unicode-PUA-ref.html b/testing/web-platform/tests/css/css-fonts/matching/font-unicode-PUA-ref.html
new file mode 100644
index 0000000000..01b95e8e72
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/matching/font-unicode-PUA-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Vitor Roriz" href="https://github.com/vitorroriz">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#char-handling-issues">
+<style>
+.target {
+ font-family: serif, sans-serif, cursive, fantasy, monospace, system-ui, emoji, math, fangsong, ui-serif, ui-sans-serif, ui-monospace, ui-rounded, 'Times';
+}
+p {
+ font-size: 22px;
+}
+.times {
+ font-family: 'Times';
+}
+</style>
+</head>
+<body>
+"If a given character is a Private-Use Area Unicode codepoint, user agents must only match font families named in the font-family list that are not generic families. If none of the families named in the font-family list contain a glyph for that codepoint, user agents must display some form of missing glyph symbol for that character rather than attempting installed font fallback for that codepoint." - <a href="https://drafts.csswg.org/css-fonts-4/#char-handling-issues">css-fonts-4</a>
+<h3>The first line should render as the second. This means that no generic font was used during fallback and the first non generic font was used. </h3>
+<p class="times">&#xE0AD;&#xE0AE;&#xE0AD;&#xE0AF;&#xE0B0;&#xE0B1;&#xE0C0;&#xE0C1;&#xE0D3;&#xE0D4;</p>
+<p class="times">&#xE0AD;&#xE0AE;&#xE0AD;&#xE0AF;&#xE0B0;&#xE0B1;&#xE0C0;&#xE0C1;&#xE0D3;&#xE0D4;</p>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/matching/font-unicode-PUA.html b/testing/web-platform/tests/css/css-fonts/matching/font-unicode-PUA.html
new file mode 100644
index 0000000000..9ed897aa00
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/matching/font-unicode-PUA.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Vitor Roriz" href="https://github.com/vitorroriz">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#char-handling-issues">
+<link rel="match" href="./font-unicode-PUA-ref.html">
+<style>
+.target {
+ font-family: serif, sans-serif, cursive, fantasy, monospace, system-ui, emoji, math, fangsong, ui-serif, ui-sans-serif, ui-monospace, ui-rounded, 'Times';
+}
+p {
+ font-size: 22px;
+}
+.times {
+ font-family: 'Times';
+}
+</style>
+</head>
+<body>
+"If a given character is a Private-Use Area Unicode codepoint, user agents must only match font families named in the font-family list that are not generic families. If none of the families named in the font-family list contain a glyph for that codepoint, user agents must display some form of missing glyph symbol for that character rather than attempting installed font fallback for that codepoint." - <a href="https://drafts.csswg.org/css-fonts-4/#char-handling-issues">css-fonts-4</a>
+<h3>The first line should render as the second. This means that no generic font was used during fallback and the first non generic font was used. </h3>
+<p class="target">&#xE0AD;&#xE0AE;&#xE0AD;&#xE0AF;&#xE0B0;&#xE0B1;&#xE0C0;&#xE0C1;&#xE0D3;&#xE0D4;</p>
+<p class="times">&#xE0AD;&#xE0AE;&#xE0AD;&#xE0AF;&#xE0B0;&#xE0B1;&#xE0C0;&#xE0C1;&#xE0D3;&#xE0D4;</p>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/matching/range-descriptor-reversed-ref.html b/testing/web-platform/tests/css/css-fonts/matching/range-descriptor-reversed-ref.html
new file mode 100644
index 0000000000..e59dc50dc7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/matching/range-descriptor-reversed-ref.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<style>
+ @font-face {
+ font-family: variable_axes;
+ src: url("resources/variabletest_matching.ttf");
+ }
+
+ body {
+ font-family: variable_axes, sans-serif;
+ font-size: 80px;
+ }
+</style>
+<span>0p;/</span>
+<span>8i;,</span>
+<script>
+ document.fonts.ready.then(
+ () => { document.documentElement.classList.remove("reftest-wait"); });
+</script>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/matching/range-descriptor-reversed.html b/testing/web-platform/tests/css/css-fonts/matching/range-descriptor-reversed.html
new file mode 100644
index 0000000000..71b424d5fe
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/matching/range-descriptor-reversed.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: Property descriptor ranges</title>
+<link rel="author" title="Dominik Röttsches" href="mailto:drott@chromium.org"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-prop-desc">
+<link rel="match" href="range-descriptor-reversed-ref.html">
+<meta name="assert" content="User agents must swap the computed value of the startpoint and endpoint of the range in order to forbid decreasing ranges.">
+</head>
+<link rel="stylesheet" href="font-matching.css">
+<style>
+ @font-face {
+ font-family: variable_axes;
+ src: url("resources/variabletest_matching.ttf");
+ font-stretch: 200% 50%;
+ font-style: oblique 90deg -90deg;
+ font-weight: 900 100;
+ }
+</style>
+<link rel="match" href="stretch-distance-over-weight-distance-ref.html">
+<span id="stretch_style_weight_1">MNOP</span>
+<span id="stretch_style_weight_9">MNOP</span>
+<script>
+ document.fonts.ready.then(
+ () => { document.documentElement.classList.remove("reftest-wait"); });
+</script>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/matching/resources/variabletest_matching.ttf b/testing/web-platform/tests/css/css-fonts/matching/resources/variabletest_matching.ttf
new file mode 100644
index 0000000000..89ed12a2c0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/matching/resources/variabletest_matching.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/matching/stretch-distance-over-weight-distance-ref.html b/testing/web-platform/tests/css/css-fonts/matching/stretch-distance-over-weight-distance-ref.html
new file mode 100644
index 0000000000..7589a15f12
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/matching/stretch-distance-over-weight-distance-ref.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<meta charset="utf-8">
+<style>
+ @font-face {
+ font-family: variable_axes;
+ src: url("resources/variabletest_matching.ttf");
+ }
+
+ body {
+ font-family: variable_axes, sans-serif;
+ font-size: 80px;
+ }
+</style>
+<span>1y;n</span>
+ <span>1y;n</span>
+ <span>2y;n</span>
+ <span>2y;n</span>
+ <span>2y;n</span>
+ <span>6w;x</span>
+ <span>6w;x</span>
+ <span>7w;x</span>
+ <span>7w;x</span>
+<script>
+ document.fonts.ready.then(
+ () => { document.documentElement.classList.remove("reftest-wait"); });
+</script>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/matching/stretch-distance-over-weight-distance.html b/testing/web-platform/tests/css/css-fonts/matching/stretch-distance-over-weight-distance.html
new file mode 100644
index 0000000000..e899c8b4d0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/matching/stretch-distance-over-weight-distance.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<meta charset="utf-8">
+<link rel="stylesheet" href="font-matching.css">
+<!-- Tests CSS Fonts Level 4, section 5.2. font matching algorithm. Precedence
+ of properties (stretch over style, style over weight) and distance of stretch . -->
+<style>
+ /* Matches 2 & 3 in stretch, but style and weight at the other end of the
+ spectrum, choosen for 1-5. */
+ @font-face {
+ font-family: variable_axes;
+ src: url("resources/variabletest_matching.ttf");
+ font-stretch: 62.5% 75%;
+ font-style: oblique 45deg 67.5deg;
+ font-weight: 700 800;
+ }
+
+ /* Same stretch as above, and better weight match for 2 & 3, but must not
+ get choosen since worse style distance. */
+ @font-face {
+ font-family: variable_axes;
+ src: url("resources/variabletest_matching.ttf");
+ font-stretch: 62.5% 75%;
+ font-style: oblique 90deg;
+ font-weight: 200 300;
+ }
+
+ /* Matches 7 & 8 in stretch, but style and weight at the opposite end of the
+ spectrum, choosen for 6-9. */
+ @font-face {
+ font-family: variable_axes;
+ src: url("resources/variabletest_matching.ttf");
+ font-stretch: 125% 150%;
+ font-style: oblique -67.5deg -45deg;
+ font-weight: 200 300;
+ }
+
+
+ /* Same stretch as previous, and better weight match for 7 & 8 but most not
+ get choosen because of worse style distance. */
+ @font-face {
+ font-family: variable_axes;
+ src: url("resources/variabletest_matching.ttf");
+ font-stretch: 125% 150%;
+ font-style: oblique -90deg;
+ font-weight: 700 800;
+ }
+</style>
+<link rel="match" href="stretch-distance-over-weight-distance-ref.html">
+<span id="stretch_style_weight_1">MNOP</span>
+ <span id="stretch_style_weight_2">MNOP</span>
+ <span id="stretch_style_weight_3">MNOP</span>
+ <span id="stretch_style_weight_4">MNOP</span>
+ <span id="stretch_style_weight_5">MNOP</span>
+ <span id="stretch_style_weight_6">MNOP</span>
+ <span id="stretch_style_weight_7">MNOP</span>
+ <span id="stretch_style_weight_8">MNOP</span>
+ <span id="stretch_style_weight_9">MNOP</span>
+<script>
+ document.fonts.ready.then(
+ () => { document.documentElement.classList.remove("reftest-wait"); });
+</script>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/matching/style-ranges-over-weight-direction-ref.html b/testing/web-platform/tests/css/css-fonts/matching/style-ranges-over-weight-direction-ref.html
new file mode 100644
index 0000000000..5a7c13959a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/matching/style-ranges-over-weight-direction-ref.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<meta charset="utf-8">
+<style>
+ @font-face {
+ font-family: variable_axes;
+ src: url("resources/variabletest_matching.ttf");
+ }
+
+ body {
+ font-family: variable_axes, sans-serif;
+ font-size: 80px;
+ }
+</style>
+<span>1p;c</span>
+ <span>1p;c</span>
+ <span>2p;c</span>
+ <span>2e;x</span>
+ <span>2e;x</span>
+ <span>6t;n</span>
+ <span>6i;v</span>
+ <span>7i;v</span>
+ <span>7i;v</span>
+<script>
+ document.fonts.ready.then(
+ () => { document.documentElement.classList.remove("reftest-wait"); });
+</script>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/matching/style-ranges-over-weight-direction.html b/testing/web-platform/tests/css/css-fonts/matching/style-ranges-over-weight-direction.html
new file mode 100644
index 0000000000..f263a11127
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/matching/style-ranges-over-weight-direction.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<meta charset="utf-8">
+<link rel="stylesheet" href="font-matching.css">
+<!-- Tests CSS Fonts Level 4, section 5.2. font matching algorithm. Precedence
+ of properties (stretch over style, style over weight) and search
+ direction for style. -->
+<style>
+ /* Matches, 2 & 3 in stretch, has wrong style, but in the right search
+ direction, so weight 400 gets chosen for 1-3. */
+ @font-face {
+ font-family: variable_axes;
+ src: url("resources/variabletest_matching.ttf");
+ font-stretch: 62.5% 75%;
+ font-style: oblique -90deg;
+ font-weight: 400;
+ }
+
+ /* Matches 2 & 3 in stretch and weight but has wrong style and in the wrong
+ search direction, chosen for 4 and 5. */
+ @font-face {
+ font-family: variable_axes;
+ src: url("resources/variabletest_matching.ttf");
+ font-stretch: 62.5% 75%;
+ font-style: oblique -20deg;
+ font-weight: 200 300;
+ }
+
+
+ /* Matches 7 & 8 in stretch, has wrong style, but in the right search
+ direction from 7 and above, so weight 600 gets chosen for 7-9. */
+ @font-face {
+ font-family: variable_axes;
+ src: url("resources/variabletest_matching.ttf");
+ font-stretch: 125% 150%;
+ font-style: oblique 90deg;
+ font-weight: 500;
+ }
+
+
+ /* Matches 7 & 8 in stretch and weight, but has wrong style and in the wrong
+ search direction for 7 and above, gets chosen for 6. */
+ @font-face {
+ font-family: variable_axes;
+ src: url("resources/variabletest_matching.ttf");
+ font-stretch: 125% 150%;
+ font-style: oblique 20deg;
+ font-weight: 700 800;
+ }
+</style>
+<link rel="match" href="style-ranges-over-weight-direction-ref.html">
+<span id="stretch_style_weight_1">MNOP</span>
+ <span id="stretch_style_weight_2">MNOP</span>
+ <span id="stretch_style_weight_3">MNOP</span>
+ <span id="stretch_style_weight_4">MNOP</span>
+ <span id="stretch_style_weight_5">MNOP</span>
+ <span id="stretch_style_weight_6">MNOP</span>
+ <span id="stretch_style_weight_7">MNOP</span>
+ <span id="stretch_style_weight_8">MNOP</span>
+ <span id="stretch_style_weight_9">MNOP</span>
+<script>
+ document.fonts.ready.then(
+ () => { document.documentElement.classList.remove("reftest-wait"); });
+</script>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/font-size-math-001.tentative-ref.html b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/font-size-math-001.tentative-ref.html
new file mode 100644
index 0000000000..45e72ffcf5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/font-size-math-001.tentative-ref.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>font-size: math (reference)</title>
+ <meta charset="utf-8">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style>
+ .container {
+ /* Ahem font does not have a MATH table so the font-size scale factor
+ is always 0.71^{computed - inherited math script level} */
+ font: 100px/1 Ahem;
+ }
+ </style>
+ </head>
+ <body>
+ <div class="container">
+ <div style="font-size: medium;">
+ <div style="font-size: 1em;">X</div>
+ </div>
+ <div style="font-size: x-large;">
+ <div style="font-size: 200%">
+ <div style="font-size: 3em">
+ <div style="font-size: smaller">
+ <div style="font-size: 1em;">
+ <div style="font-size: larger">
+ <div style="font-size: 4em">
+ <div style="font-size: 500%">X</div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/font-size-math-001.tentative.html b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/font-size-math-001.tentative.html
new file mode 100644
index 0000000000..b996498560
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/font-size-math-001.tentative.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>font-size: math</title>
+ <meta charset="utf-8">
+ <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3746">
+ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-script-level-property">
+ <meta name="assert" content="Test that a specified font-size: math behaves like 1em when mixed with other keyword and relative sizes.">
+ <link rel="match" href="font-size-math-001.tentative-ref.html">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style>
+ .container {
+ /* Ahem font does not have a MATH table so the font-size scale factor
+ is always 0.71^{computed - inherited math script level} */
+ font: 100px/1 Ahem;
+ }
+ </style>
+ </head>
+ <body>
+ <div class="container">
+ <div style="font-size: medium;">
+ <div style="font-size: math;">X</div>
+ </div>
+ <div style="font-size: x-large;">
+ <div style="font-size: 200%">
+ <div style="font-size: 3em">
+ <div style="font-size: smaller">
+ <div style="font-size: math;">
+ <div style="font-size: larger">
+ <div style="font-size: 4em">
+ <div style="font-size: 500%">X</div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/font-size-math-002.tentative-ref.html b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/font-size-math-002.tentative-ref.html
new file mode 100644
index 0000000000..caf4183693
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/font-size-math-002.tentative-ref.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>font-size: math inheritance (reference)</title>
+ <meta charset="utf-8">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style>
+ .container {
+ /* Ahem font does not have a MATH table so the font-size scale factor
+ is always 0.71^{computed - inherited math script level} */
+ font: 100px/1 Ahem;
+ }
+ </style>
+ </head>
+ <body>
+ <p>Test passes if you see a square of side 100px.</p>
+ <div class="container">
+ <div>
+ <div>
+ <div>
+ <div>
+ <div>X</div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/font-size-math-002.tentative.html b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/font-size-math-002.tentative.html
new file mode 100644
index 0000000000..7491409f2f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/font-size-math-002.tentative.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>font-size: math inheritance</title>
+ <meta charset="utf-8">
+ <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3746">
+ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-script-level-property">
+ <meta name="assert" content="Test inheritance for a specified font-size: math.">
+ <link rel="match" href="font-size-math-002.tentative-ref.html">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style>
+ .container {
+ /* Ahem font does not have a MATH table so the font-size scale factor
+ is always 0.71^{computed - inherited math script level} */
+ font: 100px/1 Ahem;
+ }
+ </style>
+ </head>
+ <body>
+ <p>Test passes if you see a square of side 100px.</p>
+ <div class="container">
+ <div style="font-size: math">
+ <div>
+ <div>
+ <div>
+ <div style="math-depth: 1">X</div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-depth-001-crash.html b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-depth-001-crash.html
new file mode 100644
index 0000000000..00e0c62772
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-depth-001-crash.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>math-depth limits</title>
+ <meta charset="utf-8">
+ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-script-level-property">
+ <meta name="assert" content="Check change between possible limits or overflowing values of an integer math-depth do not cause any crash">
+ <style>
+ @font-face {
+ font-family: scriptpercentscaledown80-scriptscriptpercentscaledown40;
+ src: url("/fonts/math/scriptpercentscaledown80-scriptscriptpercentscaledown40.woff");
+ }
+ body {
+ font-family: scriptpercentscaledown80-scriptscriptpercentscaledown40;
+ }
+ </style>
+ </head>
+ <body>
+ <div style="math-depth: -128">
+ <div style="font-size: math; math-depth: 127">
+ <div style="font-size: math; math-depth: -128">
+ </div>
+ </div>
+ </div>
+ <div style="math-depth: -32768">
+ <div style="font-size: math; math-depth: 32767">
+ <div style="font-size: math; math-depth: -32768">
+ </div>
+ </div>
+ </div>
+ <div style="math-depth: -2147483648">
+ <div style="font-size: math; math-depth: 2147483647">
+ <div style="font-size: math; math-depth: -2147483648">
+ </div>
+ </div>
+ </div>
+ <div style="math-depth: -9223372036854775808">
+ <div style="font-size: math; math-depth: 9223372036854775807">
+ <div style="font-size: math; math-depth: -9223372036854775808">
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-001.tentative.html b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-001.tentative.html
new file mode 100644
index 0000000000..9dff79025a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-001.tentative.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>math-depth</title>
+ <meta charset="utf-8">
+ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-script-level-property">
+ <meta name="assert" content="Check the computed value of math-depth">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script>
+ function mathDepth(id) {
+ return window.getComputedStyle(document.getElementById(id)).
+ getPropertyValue("math-depth");
+ }
+ setup({ explicit_done: true });
+ window.addEventListener("load", function() {
+ test(function() {
+ assert_equals(mathDepth("initial"), "0");
+ assert_equals(mathDepth("initialFrom11"), "0");
+ }, "Initial value of math-depth");
+ test(function() {
+ assert_equals(mathDepth("inherited11"), "11");
+ assert_equals(mathDepth("inherited-7"), "-7");
+ }, "Inherited values of math-depth");
+ test(function() {
+ assert_equals(mathDepth("inherited9specifiedAutoInline"), "10");
+ assert_equals(mathDepth("inherited9specifiedAutoDisplay"), "9");
+ }, "Specified math-depth: auto-add");
+ test(function() {
+ assert_equals(mathDepth("specified11"), "11");
+ assert_equals(mathDepth("specified-7"), "-7");
+ }, "Specified math-depth: <integer>");
+ test(function() {
+ assert_equals(mathDepth("specifiedAdd10From5"), "15");
+ assert_equals(mathDepth("specifiedAdd-15From5"), "-10");
+ }, "Specified math-depth: add(<integer>)");
+ test(function() {
+ assert_equals(mathDepth("invalidKeywordFrom3"), "3");
+ assert_equals(mathDepth("invalidFloatFrom3"), "3");
+ assert_equals(mathDepth("invalidCalcFrom3"), "3");
+ assert_equals(mathDepth("invalidAddCalcFrom3"), "3");
+ assert_equals(mathDepth("invalidAddFloatFrom3"), "3");
+ }, "Specified math-depth: invalid expressions");
+ test(function() {
+ const cssVariable = 3;
+ assert_equals(mathDepth("specifiedCalcFrom9"), `${Math.round(cssVariable/2)+10}`);
+ assert_equals(mathDepth("specifiedAddCalcFrom9"), `${9+(3*4-5)}`);
+ }, "Specified math-depth: calc() expressions");
+ done();
+ });
+ </script>
+ </head>
+ <body>
+ <div id="log"></div>
+ <div id="initial"></div>
+ <div id="specified11" style="math-depth: 11">
+ <div id="initialFrom11" style="math-depth: initial"></div>
+ <div id="inherited11"></div>
+ </div>
+ <div id="specified-7" style="math-depth: -7">
+ <div id="inherited-7"></div>
+ </div>
+ <div style="math-depth: 9">
+ <div style="math-style: compact">
+ <div id="inherited9specifiedAutoInline" style="math-depth: auto-add" ></div>
+ </div>
+ <div style="math-style: normal">
+ <div id="inherited9specifiedAutoDisplay" style="math-depth: auto-add" ></div>
+ </div>
+ </div>
+ <div style="math-depth: 5">
+ <div id="specifiedAdd10From5" style="math-depth: add(10)"></div>
+ <div id="specifiedAdd-15From5" style="math-depth: add(-15)"></div>
+ </div>
+ <div style="math-depth: 3;">
+ <div id="invalidKeywordFrom3" style="math-depth: auto"></div>
+ <div id="invalidFloatFrom3" style="math-depth: 3.14"></div>
+ <div id="invalidCalcFrom3" style="math-depth: 1,2"></div>
+ <div id="invalidAddCalcFrom3" style="math-depth: add(3,4)"></div>
+ <div id="invalidAddFloatFrom3" style="math-depth: add(3.14)"></div>
+ </div>
+ <div style="math-depth: 9;">
+ <div id="specifiedCalcFrom9" style="--css-variable: 3; math-depth: calc(var(--css-variable)/2 + 10)"></div>
+ <div id="specifiedAddCalcFrom9" style="math-depth: add(calc(3*4 - 5))"></div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-002.tentative.html b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-002.tentative.html
new file mode 100644
index 0000000000..ab0f8fa955
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-002.tentative.html
@@ -0,0 +1,194 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>math-script-level</title>
+ <meta charset="utf-8">
+ <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3746">
+ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-script-level-property">
+ <link rel="help" href="https://www.w3.org/TR/cssom-1/#serialize-a-css-component-value">
+ <meta name="assert" content="Verify effect of math-depth: auto-add | add(<integer) | (<integer>, starting from different values of math-depth.">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style>
+ .container {
+ /* Ahem font does not have a MATH table so the font-size scale factor
+ is always 0.71^{computed - inherited math script level} */
+ font: 20px/1 Ahem;
+ }
+ </style>
+ <script>
+ var epsilon = .1;
+ function fontSize(id) {
+ return parseFloat((/(.+)px/).exec(getComputedStyle(document.getElementById(id)).getPropertyValue("font-size"))[1]);
+ }
+ setup({ explicit_done: true });
+ window.addEventListener("load", function() {
+ document.fonts.ready.then(function() {
+ test(function() {
+ assert_equals(fontSize("autoDisplay"), 200);
+ assert_equals(fontSize("autoInline"), 500 * .71);
+ }, "auto");
+ test(function() {
+ var initialSize = 2000 * Math.pow(.71, 7);
+ assert_approx_equals(fontSize("autoDisplayFrom7"), initialSize, epsilon);
+ assert_approx_equals(fontSize("autoInlineFrom7"), initialSize * .71, epsilon);
+ }, "auto ; starting from level 7");
+ test(function() {
+ assert_equals(fontSize("add0"), 200);
+ assert_equals(fontSize("add-1"), 100);
+ assert_equals(fontSize("add1"), 355);
+ assert_approx_equals(fontSize("add-2"), 397, 1);
+ assert_approx_equals(fontSize("add2"), 504, 1);
+ assert_approx_equals(fontSize("add-9"), 654, 1);
+ assert_approx_equals(fontSize("add9"), 92, 1);
+ }, "add(<integer>)");
+ test(function() {
+ assert_equals(fontSize("add0from3"), 200);
+ assert_equals(fontSize("add-1from3"), 100);
+ assert_equals(fontSize("add1from3"), 355);
+ assert_approx_equals(fontSize("add-2from3"), 397, 1);
+ assert_approx_equals(fontSize("add2from3"), 504, 1);
+ assert_approx_equals(fontSize("add-9from3"), 654, 1);
+ assert_approx_equals(fontSize("add9from3"), 92, 1);
+ }, "add(<integer>) ; starting from level 3");
+ test(function() {
+ assert_equals(fontSize("set0"), 200);
+ assert_equals(fontSize("set-1"), 100);
+ assert_equals(fontSize("set1"), 355);
+ assert_approx_equals(fontSize("set-2"), 397, 1);
+ assert_approx_equals(fontSize("set2"), 504, 1);
+ assert_approx_equals(fontSize("set-9"), 654, 1);
+ assert_approx_equals(fontSize("set9"), 92, 1);
+ }, "<integer>");
+ test(function() {
+ assert_equals(fontSize("set50"), 200);
+ assert_equals(fontSize("set49"), 100);
+ assert_equals(fontSize("set51"), 355);
+ assert_approx_equals(fontSize("set48"), 397, 1);
+ assert_approx_equals(fontSize("set52"), 504, 1);
+ assert_approx_equals(fontSize("set41"), 654, 1);
+ assert_approx_equals(fontSize("set59"), 92, 1);
+ }, "<integer> ; starting from level 50");
+ done();
+ });
+ });
+ </script>
+ </head>
+ <body>
+ <div id="log"></div>
+ <div>
+ <div class="container">
+ <div>
+ <div style="font-size: 200px; math-style: normal">
+ <div id="autoDisplay" style="font-size: math; math-depth: auto-add"></div>
+ </div>
+ <div style="font-size: 500px; math-style: compact">
+ <div id="autoInline" style="font-size: math; math-depth: auto-add"></div>
+ </div>
+ </div>
+ <div style="font-size: 2000px;">
+ <div style="math-style: normal; font-size: math; math-depth: 7">
+ <div id="autoDisplayFrom7" style="font-size: math; math-depth: auto-add"></div>
+ </div>
+ <div style="math-style: compact; font-size: math; math-depth: 7">
+ <div id="autoInlineFrom7" style="font-size: math; math-depth: auto-add"></div>
+ </div>
+ </div>
+ <div>
+ <div style="font-size: 200px">
+ <div id="add0" style="font-size: math; math-depth: add(0)"></div>
+ </div>
+ <div style="font-size: 71px">
+ <div id="add-1" style="font-size: math; math-depth: add(-1)"></div>
+ </div>
+ <div style="font-size: 500px">
+ <div id="add1" style="font-size: math; math-depth: add(1)"></div>
+ </div>
+ <div style="font-size: 200px">
+ <div id="add-2" style="font-size: math; math-depth: add(-2)"></div>
+ </div>
+ <div style="font-size: 1000px">
+ <div id="add2" style="font-size: math; math-depth: add(2)"></div>
+ </div>
+ <div style="font-size: 30px">
+ <div id="add-9" style="font-size: math; math-depth: add(-9)"></div>
+ </div>
+ <div style="font-size: 2000px">
+ <div id="add9" style="font-size: math; math-depth: add(9)"></div>
+ </div>
+ </div>
+ <div style="math-depth: 3;">
+ <div style="font-size: 200px;">
+ <div id="add0from3" style="font-size: math; math-depth: add(0)"></div>
+ </div>
+ <div style="font-size: 71px;">
+ <div id="add-1from3" style="font-size: math; math-depth: add(-1)"></div>
+ </div>
+ <div style="font-size: 500px;">
+ <div id="add1from3" style="font-size: math; math-depth: add(1)"></div>
+ </div>
+ <div style="font-size: 200px;">
+ <div id="add-2from3" style="font-size: math; math-depth: add(-2)"></div>
+ </div>
+ <div style="font-size: 1000px;">
+ <div id="add2from3" style="font-size: math; math-depth: add(2)"></div>
+ </div>
+ <div style="font-size: 30px;">
+ <div id="add-9from3" style="font-size: math; math-depth: add(-9)"></div>
+ </div>
+ <div style="font-size: 2000px;">
+ <div id="add9from3" style="font-size: math; math-depth: add(9)"></div>
+ </div>
+ </div>
+ <div>
+ <div style="font-size: 200px">
+ <div id="set0" style="font-size: math; math-depth: 0"></div>
+ </div>
+ <div style="font-size: 71px">
+ <div id="set-1" style="font-size: math; math-depth: -1"></div>
+ </div>
+ <div style="font-size: 500px">
+ <div id="set1" style="font-size: math; math-depth: 1"></div>
+ </div>
+ <div style="font-size: 200px">
+ <div id="set-2" style="font-size: math; math-depth: -2"></div>
+ </div>
+ <div style="font-size: 1000px">
+ <div id="set2" style="font-size: math; math-depth: 2"></div>
+ </div>
+ <div style="font-size: 30px">
+ <div id="set-9" style="font-size: math; math-depth: -9"></div>
+ </div>
+ <div style="font-size: 2000px">
+ <div id="set9" style="font-size: math; math-depth: 9"></div>
+ </div>
+ </div>
+ </div>
+ <div style="math-depth: 50">
+ <div style="font-size: 200px;">
+ <div id="set50" style="font-size: math; math-depth: 50"></div>
+ </div>
+ <div style="font-size: 71px;">
+ <div id="set49" style="font-size: math; math-depth: 49"></div>
+ </div>
+ <div style="font-size: 500px;">
+ <div id="set51" style="font-size: math; math-depth: 51"></div>
+ </div>
+ <div style="font-size: 200px;">
+ <div id="set48" style="font-size: math; math-depth: 48"></div>
+ </div>
+ <div style="font-size: 1000px;">
+ <div id="set52" style="font-size: math; math-depth: 52"></div>
+ </div>
+ <div style="font-size: 30px;">
+ <div id="set41" style="font-size: math; math-depth: 41"></div>
+ </div>
+ <div style="font-size: 2000px;">
+ <div id="set59" style="font-size: math; math-depth: 59"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-003.tentative-ref.html b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-003.tentative-ref.html
new file mode 100644
index 0000000000..d73e71f41c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-003.tentative-ref.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>math-depth</title>
+ <meta charset="utf-8">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style>
+ .container {
+ /* Ahem font does not have a MATH table so the font-size scale factor
+ is always 0.71^{computed - inherited math script level} */
+ font: 100px/1 Ahem;
+ }
+ </style>
+ </head>
+ <body>
+ <p>Test passes if you see two squares of side 100px.</p>
+ <div class="container">
+ <div>X</div>
+ </div>
+ <br/>
+ <div class="container">
+ <div>X</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-003.tentative.html b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-003.tentative.html
new file mode 100644
index 0000000000..47b67aa8a8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-003.tentative.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>math-depth</title>
+ <meta charset="utf-8">
+ <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3746">
+ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-script-level-property">
+ <meta name="assert" content="If specified font-size is not 'math' then math-depth does not affect the computed value of font-size.">
+ <link rel="match" href="math-script-level-003.tentative-ref.html">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style>
+ .container {
+ /* Ahem font does not have a MATH table so the font-size scale factor
+ is always 0.71^{computed - inherited math script level} */
+ font: 100px/1 Ahem;
+ }
+ </style>
+ </head>
+ <body>
+ <p>Test passes if you see two squares of side 100px.</p>
+ <div class="container">
+ <!-- font-size: <length> -->
+ <div style="math-depth: 1; font-size: 100px;">X</div>
+ </div>
+ <br/>
+ <div class="container">
+ <!-- inherited font-size -->
+ <div style="math-depth: 1;">X</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-004.tentative.html b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-004.tentative.html
new file mode 100644
index 0000000000..a46c478596
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-004.tentative.html
@@ -0,0 +1,410 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>math-script-level</title>
+ <meta charset="utf-8">
+ <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3746">
+ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-script-level-property">
+ <meta name="assert" content="Check the resolved value of math-script-level">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style>
+ @font-face {
+ font-family: scriptpercentscaledown80-scriptscriptpercentscaledown40;
+ src: url("/fonts/math/scriptpercentscaledown80-scriptscriptpercentscaledown40.woff");
+ }
+ @font-face {
+ font-family: scriptpercentscaledown0-scriptscriptpercentscaledown40;
+ src: url("/fonts/math/scriptpercentscaledown0-scriptscriptpercentscaledown40.woff");
+ }
+ @font-face {
+ font-family: scriptpercentscaledown80-scriptscriptpercentscaledown0;
+ src: url("/fonts/math/scriptpercentscaledown80-scriptscriptpercentscaledown0.woff");
+ }
+ #scale80-40-scaledown, #scale80-40-scaleup {
+ font-family: scriptpercentscaledown80-scriptscriptpercentscaledown40;
+ }
+ #scale0-40-scaledown, #scale0-40-scaleup {
+ font-family: scriptpercentscaledown0-scriptscriptpercentscaledown40;
+ }
+ #scale80-0-scaledown, #scale80-0-scaleup {
+ font-family: scriptpercentscaledown80-scriptscriptpercentscaledown0;
+ }
+ #default-scaledown, #default-scaleup {
+ /* Ahem font does not have any MATH table, so uses default scale. */
+ font-family: Ahem;
+ }
+ .big { font-size: 3000px; }
+ .small { font-size: 150px; }
+ .level-3 { font-size: math; math-depth: -3; }
+ .level-1 { font-size: math; math-depth: -1; }
+ .level0 { font-size: math; math-depth: 0; }
+ .level1 { font-size: math; math-depth: 1; }
+ .level2 { font-size: math; math-depth: 2; }
+ .level3 { font-size: math; math-depth: 3; }
+ .level5 { font-size: math; math-depth: 5; }
+ </style>
+ <script>
+ const big = 3000;
+ const small = 150;
+ setup({ explicit_done: true });
+ function fontSize(element) {
+ return parseFloat((/(.+)px/).exec(getComputedStyle(element).
+ getPropertyValue("font-size"))[1]);
+ }
+ function CheckFontSizes(id, sizes) {
+ var container = document.getElementById(id);
+ for (var level in sizes) {
+ var divs = container.getElementsByClassName(`level${level}`);
+ for (var i = 0; i < divs.length; i++) {
+ assert_approx_equals(fontSize(divs[i]), sizes[level], 1, `Wrong font-size (id=${id} ; level=${level} ; i=${i})`);
+ }
+ }
+ }
+ window.addEventListener("load", function() {
+ document.fonts.ready.then(function() {
+ test(function() {
+ CheckFontSizes("scale80-40-scaledown", {
+ "-3": big,
+ "-1": big * .71 * .71,
+ "0": big * .71 * .71 * .71,
+ "1": big * .71 * .71 * .71 * .8,
+ "2": big * .71 * .71 * .71 * .4,
+ "3": big * .71 * .71 * .71 * .4 * .71,
+ "5": big * .71 * .71 * .71 * .4 * .71 * .71 * .71
+ });
+ CheckFontSizes("scale80-40-scaleup", {
+ "5": small,
+ "3": small / (.71 * .71),
+ "2": small / (.71 * .71 * .71),
+ "1": small / (.71 * .71 * .71 * (.4 / .8)),
+ "0": small / (.71 * .71 * .71 * .4),
+ "-1": small / (.71 * .71 * .71 * .4 * .71),
+ "-3": small / (.71 * .71 * .71 * .4 * .71 * .71 * .71)
+ });
+ }, "scriptPercentScaleDown=80, scriptScriptPercentScaleDown=40");
+
+ test(function() {
+ var scriptPercentScaleDown = .71;
+ CheckFontSizes("scale0-40-scaledown", {
+ "-3": big,
+ "-1": big * .71 * .71,
+ "0": big * .71 * .71 * .71,
+ "1": big * .71 * .71 * .71 * scriptPercentScaleDown,
+ "2": big * .71 * .71 * .71 * .4,
+ "3": big * .71 * .71 * .71 * .4 * .71,
+ "5": big * .71 * .71 * .71 * .4 * .71 * .71 * .71
+ });
+ CheckFontSizes("scale0-40-scaleup", {
+ "5": small,
+ "3": small / (.71 * .71),
+ "2": small / (.71 * .71 * .71),
+ "1": small / (.71 * .71 * .71 * (.4 / scriptPercentScaleDown)),
+ "0": small / (.71 * .71 * .71 * .4),
+ "-1": small / (.71 * .71 * .71 * .4 * .71),
+ "-3": small / (.71 * .71 * .71 * .4 * .71 * .71 * .71)
+ });
+ }, "scriptPercentScaleDown=0, scriptScriptPercentScaleDown=40");
+
+ test(function() {
+ var scriptScriptPercentScaleDown = 0.5041;
+ CheckFontSizes("scale80-0-scaledown", {
+ "-3": big,
+ "-1": big * .71 * .71,
+ "0": big * .71 * .71 * .71,
+ "1": big * .71 * .71 * .71 * .8,
+ "2": big * .71 * .71 * .71 * scriptScriptPercentScaleDown,
+ "3": big * .71 * .71 * .71 * scriptScriptPercentScaleDown * .71,
+ "5": big * .71 * .71 * .71 * scriptScriptPercentScaleDown * .71 * .71 * .71
+ });
+ CheckFontSizes("scale80-0-scaleup", {
+ "5": small,
+ "3": small / (.71 * .71),
+ "2": small / (.71 * .71 * .71),
+ "1": small / (.71 * .71 * .71 * (scriptScriptPercentScaleDown / .8)),
+ "0": small / (.71 * .71 * .71 * scriptScriptPercentScaleDown),
+ "-1": small / (.71 * .71 * .71 * scriptScriptPercentScaleDown * .71),
+ "-3": small / (.71 * .71 * .71 * scriptScriptPercentScaleDown * .71 * .71 * .71)
+ });
+ }, "scriptPercentScaleDown=80, scriptScriptPercentScaleDown=0");
+
+ test(function() {
+ CheckFontSizes("default-scaledown", {
+ "-3": big,
+ "-1": big * .71 * .71,
+ "0": big * .71 * .71 * .71,
+ "1": big * .71 * .71 * .71 * .71,
+ "2": big * .71 * .71 * .71 * .71 * .71,
+ "3": big * .71 * .71 * .71 * .71 * .71 * .71,
+ "5": big * .71 * .71 * .71 * .71 * .71 * .71 * .71 * .71
+ });
+ CheckFontSizes("default-scaleup", {
+ "5": small,
+ "3": small / (.71 * .71),
+ "2": small / (.71 * .71 * .71),
+ "1": small / (.71 * .71 * .71 * .71),
+ "0": small / (.71 * .71 * .71 * .71 * .71),
+ "-1": small / (.71 * .71 * .71 * .71 * .71 * .71),
+ "-3": small / (.71 * .71 * .71 * .71 * .71 * .71 * .71 * .71)
+ });
+ }, "No MATH table");
+
+ done();
+ });
+ });
+ </script>
+ </head>
+ <body>
+ <div id="log"></div>
+
+ <div class="level-3" id="scale80-40-scaledown">
+ <div class="big">
+ <div class="level5"><!-- -3 to 5 --></div>
+ <div class="level3"><!-- -3 to 3 --></div>
+ <div class="level2"><!-- -3 to 2 --></div>
+ <div class="level1"><!-- -3 to 1 --></div>
+ <div class="level0"><!-- -3 to 0 --></div>
+ <div class="level-1"><!-- -3 to -1 -->
+ <div class="level5"><!-- -1 to 5 --></div>
+ <div class="level3"><!-- -1 to 3 --></div>
+ <div class="level2"><!-- -1 to 2 --></div>
+ <div class="level1"><!-- -1 to 1 --></div>
+ <div class="level0"><!-- -1 to 0 -->
+ <div class="level5"><!-- 0 to 5 --></div>
+ <div class="level3"><!-- 0 to 3 --></div>
+ <div class="level2"><!-- 0 to 2 --></div>
+ <div class="level1"><!-- 0 to 1 -->
+ <div class="level5"><!-- 1 to 5 --></div>
+ <div class="level3"><!-- 1 to 3 --></div>
+ <div class="level2"><!-- 1 to 2 -->
+ <div class="level5"><!-- 2 to 5 --></div>
+ <div class="level3"><!-- 2 to 3 -->
+ <div class="level5"><!-- 3 to 5 --></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="level5" id="scale80-40-scaleup">
+ <div class="small">
+ <div class="level-3"><!-- 5 to -3 --></div>
+ <div class="level-1"><!-- 5 to -1 --></div>
+ <div class="level0"><!-- 5 to 0 --></div>
+ <div class="level1"><!-- 5 to 1 --></div>
+ <div class="level2"><!-- 5 to 2 --></div>
+ <div class="level3"><!-- 5 to 3 -->
+ <div class="level-3"><!-- 3 to -3 --></div>
+ <div class="level-1"><!-- 3 to -1 --></div>
+ <div class="level0"><!-- 3 to 0 --></div>
+ <div class="level1"><!-- 3 to 1 --></div>
+ <div class="level2"><!-- 3 to 2 -->
+ <div class="level-3"><!-- 2 to -3 --></div>
+ <div class="level-1"><!-- 2 to -1 --></div>
+ <div class="level0"><!-- 2 to 0 --></div>
+ <div class="level1"><!-- 2 to 1 -->
+ <div class="level-3"><!-- 1 to -3 --></div>
+ <div class="level-1"><!-- 1 to -1 --></div>
+ <div class="level0"><!-- 1 to 0 -->
+ <div class="level-3"><!-- 0 to -3 --></div>
+ <div class="level-1"><!-- 0 to -1 -->
+ <div class="level-3"><!-- -1 to -3 --></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="level-3" id="scale0-40-scaledown">
+ <div class="big">
+ <div class="level5"><!-- -3 to 5 --></div>
+ <div class="level3"><!-- -3 to 3 --></div>
+ <div class="level2"><!-- -3 to 2 --></div>
+ <div class="level1"><!-- -3 to 1 --></div>
+ <div class="level0"><!-- -3 to 0 --></div>
+ <div class="level-1"><!-- -3 to -1 -->
+ <div class="level5"><!-- -1 to 5 --></div>
+ <div class="level3"><!-- -1 to 3 --></div>
+ <div class="level2"><!-- -1 to 2 --></div>
+ <div class="level1"><!-- -1 to 1 --></div>
+ <div class="level0"><!-- -1 to 0 -->
+ <div class="level5"><!-- 0 to 5 --></div>
+ <div class="level3"><!-- 0 to 3 --></div>
+ <div class="level2"><!-- 0 to 2 --></div>
+ <div class="level1"><!-- 0 to 1 -->
+ <div class="level5"><!-- 1 to 5 --></div>
+ <div class="level3"><!-- 1 to 3 --></div>
+ <div class="level2"><!-- 1 to 2 -->
+ <div class="level5"><!-- 2 to 5 --></div>
+ <div class="level3"><!-- 2 to 3 -->
+ <div class="level5"><!-- 3 to 5 --></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="level5" id="scale0-40-scaleup">
+ <div class="small">
+ <div class="level-3"><!-- 5 to -3 --></div>
+ <div class="level-1"><!-- 5 to -1 --></div>
+ <div class="level0"><!-- 5 to 0 --></div>
+ <div class="level1"><!-- 5 to 1 --></div>
+ <div class="level2"><!-- 5 to 2 --></div>
+ <div class="level3"><!-- 5 to 3 -->
+ <div class="level-3"><!-- 3 to -3 --></div>
+ <div class="level-1"><!-- 3 to -1 --></div>
+ <div class="level0"><!-- 3 to 0 --></div>
+ <div class="level1"><!-- 3 to 1 --></div>
+ <div class="level2"><!-- 3 to 2 -->
+ <div class="level-3"><!-- 2 to -3 --></div>
+ <div class="level-1"><!-- 2 to -1 --></div>
+ <div class="level0"><!-- 2 to 0 --></div>
+ <div class="level1"><!-- 2 to 1 -->
+ <div class="level-3"><!-- 1 to -3 --></div>
+ <div class="level-1"><!-- 1 to -1 --></div>
+ <div class="level0"><!-- 1 to 0 -->
+ <div class="level-3"><!-- 0 to -3 --></div>
+ <div class="level-1"><!-- 0 to -1 -->
+ <div class="level-3"><!-- -1 to -3 --></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="level-3" id="scale80-0-scaledown">
+ <div class="big">
+ <div class="level5"><!-- -3 to 5 --></div>
+ <div class="level3"><!-- -3 to 3 --></div>
+ <div class="level2"><!-- -3 to 2 --></div>
+ <div class="level1"><!-- -3 to 1 --></div>
+ <div class="level0"><!-- -3 to 0 --></div>
+ <div class="level-1"><!-- -3 to -1 -->
+ <div class="level5"><!-- -1 to 5 --></div>
+ <div class="level3"><!-- -1 to 3 --></div>
+ <div class="level2"><!-- -1 to 2 --></div>
+ <div class="level1"><!-- -1 to 1 --></div>
+ <div class="level0"><!-- -1 to 0 -->
+ <div class="level5"><!-- 0 to 5 --></div>
+ <div class="level3"><!-- 0 to 3 --></div>
+ <div class="level2"><!-- 0 to 2 --></div>
+ <div class="level1"><!-- 0 to 1 -->
+ <div class="level5"><!-- 1 to 5 --></div>
+ <div class="level3"><!-- 1 to 3 --></div>
+ <div class="level2"><!-- 1 to 2 -->
+ <div class="level5"><!-- 2 to 5 --></div>
+ <div class="level3"><!-- 2 to 3 -->
+ <div class="level5"><!-- 3 to 5 --></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="level5" id="scale80-0-scaleup">
+ <div class="small">
+ <div class="level-3"><!-- 5 to -3 --></div>
+ <div class="level-1"><!-- 5 to -1 --></div>
+ <div class="level0"><!-- 5 to 0 --></div>
+ <div class="level1"><!-- 5 to 1 --></div>
+ <div class="level2"><!-- 5 to 2 --></div>
+ <div class="level3"><!-- 5 to 3 -->
+ <div class="level-3"><!-- 3 to -3 --></div>
+ <div class="level-1"><!-- 3 to -1 --></div>
+ <div class="level0"><!-- 3 to 0 --></div>
+ <div class="level1"><!-- 3 to 1 --></div>
+ <div class="level2"><!-- 3 to 2 -->
+ <div class="level-3"><!-- 2 to -3 --></div>
+ <div class="level-1"><!-- 2 to -1 --></div>
+ <div class="level0"><!-- 2 to 0 --></div>
+ <div class="level1"><!-- 2 to 1 -->
+ <div class="level-3"><!-- 1 to -3 --></div>
+ <div class="level-1"><!-- 1 to -1 --></div>
+ <div class="level0"><!-- 1 to 0 -->
+ <div class="level-3"><!-- 0 to -3 --></div>
+ <div class="level-1"><!-- 0 to -1 -->
+ <div class="level-3"><!-- -1 to -3 --></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="level-3" id="default-scaledown">
+ <div class="big">
+ <div class="level5"><!-- -3 to 5 --></div>
+ <div class="level3"><!-- -3 to 3 --></div>
+ <div class="level2"><!-- -3 to 2 --></div>
+ <div class="level1"><!-- -3 to 1 --></div>
+ <div class="level0"><!-- -3 to 0 --></div>
+ <div class="level-1"><!-- -3 to -1 -->
+ <div class="level5"><!-- -1 to 5 --></div>
+ <div class="level3"><!-- -1 to 3 --></div>
+ <div class="level2"><!-- -1 to 2 --></div>
+ <div class="level1"><!-- -1 to 1 --></div>
+ <div class="level0"><!-- -1 to 0 -->
+ <div class="level5"><!-- 0 to 5 --></div>
+ <div class="level3"><!-- 0 to 3 --></div>
+ <div class="level2"><!-- 0 to 2 --></div>
+ <div class="level1"><!-- 0 to 1 -->
+ <div class="level5"><!-- 1 to 5 --></div>
+ <div class="level3"><!-- 1 to 3 --></div>
+ <div class="level2"><!-- 1 to 2 -->
+ <div class="level5"><!-- 2 to 5 --></div>
+ <div class="level3"><!-- 2 to 3 -->
+ <div class="level5"><!-- 3 to 5 --></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="level5" id="default-scaleup">
+ <div class="small">
+ <div class="level-3"><!-- 5 to -3 --></div>
+ <div class="level-1"><!-- 5 to -1 --></div>
+ <div class="level0"><!-- 5 to 0 --></div>
+ <div class="level1"><!-- 5 to 1 --></div>
+ <div class="level2"><!-- 5 to 2 --></div>
+ <div class="level3"><!-- 5 to 3 -->
+ <div class="level-3"><!-- 3 to -3 --></div>
+ <div class="level-1"><!-- 3 to -1 --></div>
+ <div class="level0"><!-- 3 to 0 --></div>
+ <div class="level1"><!-- 3 to 1 --></div>
+ <div class="level2"><!-- 3 to 2 -->
+ <div class="level-3"><!-- 2 to -3 --></div>
+ <div class="level-1"><!-- 2 to -1 --></div>
+ <div class="level0"><!-- 2 to 0 --></div>
+ <div class="level1"><!-- 2 to 1 -->
+ <div class="level-3"><!-- 1 to -3 --></div>
+ <div class="level-1"><!-- 1 to -1 --></div>
+ <div class="level0"><!-- 1 to 0 -->
+ <div class="level-3"><!-- 0 to -3 --></div>
+ <div class="level-1"><!-- 0 to -1 -->
+ <div class="level-3"><!-- -1 to -3 --></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-001.tentative-ref.html b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-001.tentative-ref.html
new file mode 100644
index 0000000000..8540de4194
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-001.tentative-ref.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>math-script-level: auto and math-style (reference)</title>
+ <meta charset="utf-8">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style>
+ .container {
+ /* Ahem font does not have a MATH table so the font-size scale factor
+ is always 0.71^{computed - inherited math script level} */
+ font: 100px/1 Ahem;
+ }
+ </style>
+ </head>
+ <body>
+ <p>Test passes if you see a square of side 100 × 0.71^(0 − 0) = 100px.</p>
+ <div class="container">
+ <div style="font-size: 100px">X</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-001.tentative.html b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-001.tentative.html
new file mode 100644
index 0000000000..bb59dfdd17
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-001.tentative.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>math-script-level: auto and math-style</title>
+ <meta charset="utf-8">
+ <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3746">
+ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-script-level-property">
+ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-style-property">
+ <meta name="assert" content="If specified font-size is math and specified math-depth is 'auto-add' and the inherited value of math-style is 'normal' then the computed math-depth is the one of its parent.">
+ <link rel="match" href="math-script-level-auto-and-math-style-001.tentative-ref.html">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style>
+ .container {
+ /* Ahem font does not have a MATH table so the font-size scale factor
+ is always 0.71^{computed - inherited math script level} */
+ font: 100px/1 Ahem;
+ }
+ </style>
+ </head>
+ <body>
+ <p>Test passes if you see a square of side 100 × 0.71^(0 − 0) = 100px.</p>
+ <div class="container" style="math-style: normal;">
+ <div style="font-size: math; math-depth: auto-add">X</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-002.tentative-ref.html b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-002.tentative-ref.html
new file mode 100644
index 0000000000..f3ddde49f5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-002.tentative-ref.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>math-script-level: auto and math-style (reference)</title>
+ <meta charset="utf-8">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style>
+ .container {
+ /* Ahem font does not have a MATH table so the font-size scale factor
+ is always 0.71^{computed - inherited math script level} */
+ font: 500px/1 Ahem;
+ }
+ </style>
+ </head>
+ <body>
+ <p>Test passes if you see a square of side 500 × 0.71^(1 − 0) = 355px.</p>
+ <div class="container">
+ <div style="font-size: 355px">X</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-002.tentative.html b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-002.tentative.html
new file mode 100644
index 0000000000..21c912528a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-002.tentative.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>math-script-level: auto and math-style</title>
+ <meta charset="utf-8">
+ <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3746">
+ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-script-level-property">
+ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-style-property">
+ <meta name="assert" content="If the specified font-size is 'math' and specified math-depth is 'auto-add' and the inherited value of math-style is 'compact' then the computed math-depth is the one of its parent.">
+ <link rel="match" href="math-script-level-auto-and-math-style-002.tentative-ref.html">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style>
+ .container {
+ /* Ahem font does not have a MATH table so the font-size scale factor
+ is always 0.71^{computed - inherited math script level} */
+ font: 500px/1 Ahem;
+ }
+ </style>
+ </head>
+ <body>
+ <p>Test passes if you see a square of side 500 × 0.71^(1 − 0) = 355px.</p>
+ <div class="container" style="math-style: compact;">
+ <div style="font-size: math; math-depth: auto-add">X</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-003.tentative-ref.html b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-003.tentative-ref.html
new file mode 100644
index 0000000000..741da4f75c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-003.tentative-ref.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>math-script-level: auto and math-style (reference)</title>
+ <meta charset="utf-8">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style>
+ .container {
+ /* Ahem font does not have a MATH table so the font-size scale factor
+ is always 0.71^{computed - inherited math script level} */
+ font: 500px/1 Ahem;
+ }
+ </style>
+ </head>
+ <body>
+ <p>Test passes if you see a square of side 500px.</p>
+ <div class="container">
+ <div style="font-size: 500px">X</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-003.tentative.html b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-003.tentative.html
new file mode 100644
index 0000000000..5739a12bb5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-003.tentative.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>math-script-level: auto and math-style</title>
+ <meta charset="utf-8">
+ <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3746">
+ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-script-level-property">
+ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-style-property">
+ <meta name="assert" content="Initial value of math-style is 'normal'">
+ <link rel="match" href="math-script-level-auto-and-math-style-003.tentative-ref.html">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style>
+ .container {
+ /* Ahem font does not have a MATH table so the font-size scale factor
+ is always 0.71^{computed - inherited math script level} */
+ font: 500px/1 Ahem;
+ }
+ </style>
+ </head>
+ <body>
+ <p>Test passes if you see a square of side 500px.</p>
+ <div class="container">
+ <div style="font-size: math; math-depth: auto-add">X</div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-004.tentative-ref.html b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-004.tentative-ref.html
new file mode 100644
index 0000000000..edda57e25e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-004.tentative-ref.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>math-script-level: auto and math-style (reference)</title>
+ <meta charset="utf-8">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style>
+ .container {
+ /* Ahem font does not have a MATH table so the font-size scale factor
+ is always 0.71^{computed - inherited math script level} */
+ font: 500px/1 Ahem;
+ }
+ </style>
+ </head>
+ <body>
+ <p>Test passes if you see a square of side 500px.</p>
+ <div class="container">
+ <div>
+ <div>
+ <div style="font-size: 500px">X</div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-004.tentative.html b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-004.tentative.html
new file mode 100644
index 0000000000..aed3bf9142
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-004.tentative.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>math-script-level: auto and math-style</title>
+ <meta charset="utf-8">
+ <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3746">
+ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-script-level-property">
+ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-style-property">
+ <meta name="assert" content="Initial value of math-style is 'normal'">
+ <link rel="match" href="math-script-level-auto-and-math-style-004.tentative-ref.html">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style>
+ .container {
+ /* Ahem font does not have a MATH table so the font-size scale factor
+ is always 0.71^{computed - inherited math script level} */
+ font: 500px/1 Ahem;
+ }
+ </style>
+ </head>
+ <body>
+ <p>Test passes if you see a square of side 500px.</p>
+ <div class="container">
+ <div style="math-style: compact">
+ <div style="math-style: initial">
+ <div style="font-size: math; math-depth: auto-add">X</div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-005.tentative-ref.html b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-005.tentative-ref.html
new file mode 100644
index 0000000000..3f1641e4a4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-005.tentative-ref.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>math-script-level: auto and math-style (reference)</title>
+ <meta charset="utf-8">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style>
+ .container {
+ /* Ahem font does not have a MATH table so the font-size scale factor
+ is always 0.71^{computed - inherited math script level} */
+ font: 100px/1 Ahem;
+ }
+ </style>
+ </head>
+ <body>
+ <p>Test passes if you see a square of side 100 × 0.71^(0 − 0) = 100px.</p>
+ <div class="container">
+ <div>
+ <div>
+ <div>
+ <div style="font-size: 100px">X</div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-005.tentative.html b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-005.tentative.html
new file mode 100644
index 0000000000..01b876b515
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-005.tentative.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>math-script-level: auto and math-style</title>
+ <meta charset="utf-8">
+ <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3746">
+ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-script-level-property">
+ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-style-property">
+ <meta name="assert" content="math-style is inherited">
+ <link rel="match" href="math-script-level-auto-and-math-style-005.tentative-ref.html">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style>
+ .container {
+ /* Ahem font does not have a MATH table so the font-size scale factor
+ is always 0.71^{computed - inherited math script level} */
+ font: 100px/1 Ahem;
+ }
+ </style>
+ </head>
+ <body>
+ <p>Test passes if you see a square of side 100 × 0.71^(0 − 0) = 100px.</p>
+ <div class="container">
+ <div style="math-style: normal;">
+ <div>
+ <div>
+ <div style="font-size: math; math-depth: auto-add">X</div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-font-size-clamping-001.tentative-ref.html b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-font-size-clamping-001.tentative-ref.html
new file mode 100644
index 0000000000..cb5326ad71
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-font-size-clamping-001.tentative-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>math-script-level (reference)</title>
+ <meta charset="utf-8">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style>
+ .container {
+ /* Ahem font does not have a MATH table so the font-size scale factor
+ is always 0.71^{computed - inherited math script level} */
+ font: 12px/1 Ahem;
+ }
+ </style>
+ </head>
+ <body>
+ <p>Test passes if you see a square of side 12px.</p>
+ <div class="container">
+ <div>
+ <div>X</div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-font-size-clamping-001.tentative.html b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-font-size-clamping-001.tentative.html
new file mode 100644
index 0000000000..36b477aa32
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-script-level-font-size-clamping-001.tentative.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>math-script-level clamping</title>
+ <meta charset="utf-8">
+ <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3739">
+ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-script-level-property">
+ <meta name="assert" content="Clamping due to browser's min font size only affects the used size.">
+ <link rel="match" href="math-script-level-font-size-clamping-001.tentative-ref.html">
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style>
+ .container {
+ /* Ahem font does not have a MATH table so the font-size scale factor
+ is always 0.71^{computed - inherited math script level} */
+ font: 12px/1 Ahem;
+ }
+ </style>
+ </head>
+ <body>
+ <p>Test passes if you see a square of side 12px.</p>
+ <div class="container"><!-- Initial size is 12px. -->
+ <div style="font-size: math; math-depth: add(8);"><!-- Size is 12*.71^8 = 0.7749042374949131 < 1px. -->
+ <div style="font-size: math; math-depth: add(-8);">X</div><!-- back to 12px. -->
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-style-001.tentative.html b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-style-001.tentative.html
new file mode 100644
index 0000000000..e63f28b191
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/math-script-level-and-math-style/math-style-001.tentative.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>math-style</title>
+ <meta charset="utf-8">
+ <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3746">
+ <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#the-math-style-property">
+ <meta name="assert" content="Check the resolved value of math-style">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script>
+ function mathStyle(id) {
+ return window.getComputedStyle(document.getElementById(id)).
+ getPropertyValue("math-style");
+ }
+ setup({ explicit_done: true });
+ window.addEventListener("load", function() {
+ test(function() {
+ assert_equals(mathStyle("initial"), "normal");
+ }, "Initial value of math-style");
+ test(function() {
+ assert_equals(mathStyle("specifiedInline"), "compact");
+ assert_equals(mathStyle("specifiedDisplay"), "normal");
+ }, "Specified values of math-style");
+ test(function() {
+ assert_equals(mathStyle("inheritedInline"), "compact");
+ assert_equals(mathStyle("inheritedDisplay"), "normal");
+ }, "Inherited values of math-style");
+ done();
+ });
+ </script>
+ </head>
+ <body>
+ <div id="log"></div>
+ <div id="initial"></div>
+ <div id="specifiedInline" style="math-style: compact">
+ <div id="inheritedInline"></div>
+ </div>
+ <div id="specifiedDisplay" style="math-style: normal">
+ <div id="inheritedDisplay"></div>
+ </div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/metrics-override-normal-keyword-ref.html b/testing/web-platform/tests/css/css-fonts/metrics-override-normal-keyword-ref.html
new file mode 100644
index 0000000000..7575db40e1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/metrics-override-normal-keyword-ref.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="author" href="mailto:xiaochengh@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-metrics-override-desc">
+<link rel="stylesheet" href="/fonts/ahem.css">
+<title>Tests the 'normal' keyword on descriptors ascent-override, descent-override and line-gap-override</title>
+
+<style>
+@font-face {
+ font-family: reference-font;
+ src: local(Ahem), url(/fonts/Ahem.ttf);
+}
+</style>
+
+<div style="font-family: reference-font">Test<br>Test</div>
+
+<div style="font-family: reference-font">Test<br>Test</div>
+
+<div style="font-family: reference-font">Test<br>Test</div>
diff --git a/testing/web-platform/tests/css/css-fonts/metrics-override-normal-keyword.html b/testing/web-platform/tests/css/css-fonts/metrics-override-normal-keyword.html
new file mode 100644
index 0000000000..cf8c711ef2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/metrics-override-normal-keyword.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="author" href="mailto:xiaochengh@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-metrics-override-desc">
+<link rel="match" href="metrics-override-normal-keyword-ref.html">
+<title>Tests the 'normal' keyword on descriptors ascent-override, descent-override and line-gap-override</title>
+<style>
+@font-face {
+ font-family: ascent-font;
+ src: local(Ahem), url(/fonts/Ahem.ttf);
+ ascent-override: 50%;
+ ascent-override: normal;
+}
+
+@font-face {
+ font-family: descent-font;
+ src: local(Ahem), url(/fonts/Ahem.ttf);
+ descent-override: 50%;
+ descent-override: normal;
+}
+
+@font-face {
+ font-family: line-gap-font;
+ src: local(Ahem), url(/fonts/Ahem.ttf);
+ line-gap-override: 50%;
+ line-gap-override: normal;
+}
+</style>
+
+<div style="font-family: ascent-font">Test<br>Test</div>
+
+<div style="font-family: descent-font">Test<br>Test</div>
+
+<div style="font-family: line-gap-font">Test<br>Test</div>
diff --git a/testing/web-platform/tests/css/css-fonts/palette-mix-computed.html b/testing/web-platform/tests/css/css-fonts/palette-mix-computed.html
new file mode 100644
index 0000000000..bade68111b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/palette-mix-computed.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Serializing of palette-mix() function</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#propdef-font-palette">
+<meta name="assert" content="Check serialization of palette-mix() value in computed style">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+ test_computed_value(`font-palette`, `palette-mix(in oklab, light 30%, dark)`);
+ test_computed_value(`font-palette`, `palette-mix(in oklab, light 30%, light)`, `light`);
+ test_computed_value(`font-palette`, `palette-mix(in oklab, light 30%, normal)`);
+ test_computed_value(`font-palette`, `palette-mix(in oklab, --custom-palette 30%, normal)`);
+
+ // Percentage value serialization
+ test_computed_value(`font-palette`, `palette-mix(in oklab, light 50%, dark 50%)`, `palette-mix(in oklab, light, dark)`);
+ test_computed_value(`font-palette`, `palette-mix(in oklab, light, dark 50%)`, `palette-mix(in oklab, light, dark)`);
+ test_computed_value(`font-palette`, `palette-mix(in oklab, light 50%, dark)`, `palette-mix(in oklab, light, dark)`);
+ test_computed_value(`font-palette`, `palette-mix(in oklab, light, dark)`, `palette-mix(in oklab, light, dark)`);
+ test_computed_value(`font-palette`, `palette-mix(in oklab, light 50%, dark 70%)`, `palette-mix(in oklab, light 50%, dark 70%)`);
+ test_computed_value(`font-palette`, `palette-mix(in oklab, light 70%, dark 70%)`, `palette-mix(in oklab, light 70%, dark 70%)`);
+ test_computed_value(`font-palette`, `palette-mix(in oklab, light, dark 70%)`, `palette-mix(in oklab, light 30%, dark)`);
+ test_computed_value(`font-palette`, `palette-mix(in oklab, light 30%, dark 70%)`, `palette-mix(in oklab, light 30%, dark)`);
+ test_computed_value(`font-palette`, `palette-mix(in oklab, light 60%, dark)`, `palette-mix(in oklab, light 60%, dark)`);
+ test_computed_value(`font-palette`, `palette-mix(in oklab, light 10%, dark 40%)`, `palette-mix(in oklab, light 10%, dark 40%)`);
+
+ // Color spaces parsing
+ for (const colorSpace of [ "hsl", "hwb", "lch", "oklch", "lab", "oklab", "srgb", "srgb-linear", "xyz", "xyz-d50", "xyz-d65" ]) {
+ const resultColorSpace = colorSpace == "xyz" ? "xyz-d65" : colorSpace;
+ test_computed_value(`font-palette`, `palette-mix(in ${colorSpace}, light 10%, dark)`, `palette-mix(in ${resultColorSpace}, light 10%, dark)`);
+ }
+
+ // Nested palette-mix()
+ test_computed_value(`font-palette`, `palette-mix(in oklab, palette-mix(in srgb, light 30%, normal) 20%, dark)`);
+ test_computed_value(`font-palette`, `palette-mix(in oklab, palette-mix(in srgb, light 30%, normal) 30%, palette-mix(in srgb, --custom-palette 30%, dark))`);
+</script>
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/palette-values-rule-add-2-ref.html b/testing/web-platform/tests/css/css-fonts/palette-values-rule-add-2-ref.html
new file mode 100644
index 0000000000..325cea54d5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/palette-values-rule-add-2-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests that dynamically adding a @font-palette-values rule causes the necessary rendering update</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 1;
+}
+</style>
+</head>
+<body>
+<div style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/palette-values-rule-add-2.html b/testing/web-platform/tests/css/css-fonts/palette-values-rule-add-2.html
new file mode 100644
index 0000000000..25859a7e4b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/palette-values-rule-add-2.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<head>
+<meta charset="utf-8">
+<title>Tests that dynamically adding a @font-palette-values rule causes the necessary rendering update</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="palette-values-rule-add-2-ref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<div style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+<script>
+let count = 0;
+function tick() {
+ if (count > 3) {
+ let style = document.createElement("style");
+ document.head.appendChild(style);
+ style.sheet.insertRule(`
+ @font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 1;
+ }`);
+ document.documentElement.classList.remove("reftest-wait");
+ } else {
+ ++count;
+ requestAnimationFrame(tick);
+ }
+}
+[...document.fonts][0].load().then(tick);
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/palette-values-rule-add-notref.html b/testing/web-platform/tests/css/css-fonts/palette-values-rule-add-notref.html
new file mode 100644
index 0000000000..3b06dfd79c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/palette-values-rule-add-notref.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests that dynamically adding a @font-palette-values rule causes the necessary rendering update</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<div style="font: 48px 'COLR-test-font'; font-palette: MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/palette-values-rule-add.html b/testing/web-platform/tests/css/css-fonts/palette-values-rule-add.html
new file mode 100644
index 0000000000..51dbfbe730
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/palette-values-rule-add.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<head>
+<meta charset="utf-8">
+<title>Tests that dynamically adding a @font-palette-values rule causes the necessary rendering update</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="mismatch" href="palette-values-rule-add-notref.html">
+<style>
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<div style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+<script>
+let count = 0;
+function tick() {
+ if (count > 3) {
+ let style = document.createElement("style");
+ document.head.appendChild(style);
+ style.sheet.insertRule(`
+ @font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 1;
+ }`);
+ document.documentElement.classList.remove("reftest-wait");
+ } else {
+ ++count;
+ requestAnimationFrame(tick);
+ }
+}
+[...document.fonts][0].load().then(tick);
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/palette-values-rule-delete-2-ref.html b/testing/web-platform/tests/css/css-fonts/palette-values-rule-delete-2-ref.html
new file mode 100644
index 0000000000..8b170c8413
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/palette-values-rule-delete-2-ref.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests that dynamically deleting a @font-palette-values rule causes the necessary rendering update</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style id="style">
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+</style>
+</head>
+<body>
+<div style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/palette-values-rule-delete-2.html b/testing/web-platform/tests/css/css-fonts/palette-values-rule-delete-2.html
new file mode 100644
index 0000000000..4e65142ff8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/palette-values-rule-delete-2.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<head>
+<meta charset="utf-8">
+<title>Tests that dynamically deleting a @font-palette-values rule causes the necessary rendering update</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="match" href="palette-values-rule-delete-2-ref.html">
+<style id="style">
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 1;
+}
+</style>
+</head>
+<body>
+<div style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+<script>
+let count = 0;
+function tick() {
+ if (count > 3) {
+ document.getElementById("style").sheet.deleteRule(1);
+ document.documentElement.classList.remove("reftest-wait");
+ } else {
+ ++count;
+ requestAnimationFrame(tick);
+ }
+}
+[...document.fonts][0].load().then(tick);
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/palette-values-rule-delete-notref.html b/testing/web-platform/tests/css/css-fonts/palette-values-rule-delete-notref.html
new file mode 100644
index 0000000000..9b2b10ca28
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/palette-values-rule-delete-notref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Tests that dynamically deleting a @font-palette-values rule causes the necessary rendering update</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<style id="style">
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 1;
+}
+</style>
+</head>
+<body>
+<div style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/palette-values-rule-delete.html b/testing/web-platform/tests/css/css-fonts/palette-values-rule-delete.html
new file mode 100644
index 0000000000..e2d7b53e1d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/palette-values-rule-delete.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<head>
+<meta charset="utf-8">
+<title>Tests that dynamically deleting a @font-palette-values rule causes the necessary rendering update</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-values">
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com">
+<link rel="mismatch" href="palette-values-rule-delete-notref.html">
+<style id="style">
+@font-face {
+ font-family: "COLR-test-font";
+ src: url("resources/COLR-palettes-test-font.ttf") format("truetype");
+}
+
+@font-palette-values --MyPalette {
+ font-family: "COLR-test-font";
+ base-palette: 1;
+}
+</style>
+</head>
+<body>
+<div style="font: 48px 'COLR-test-font'; font-palette: --MyPalette;">A</div>
+<script>
+let count = 0;
+function tick() {
+ if (count > 3) {
+ document.getElementById("style").sheet.deleteRule(1);
+ document.documentElement.classList.remove("reftest-wait");
+ } else {
+ ++count;
+ requestAnimationFrame(tick);
+ }
+}
+[...document.fonts][0].load().then(tick);
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/ahem-ex-500.otf b/testing/web-platform/tests/css/css-fonts/parsing/ahem-ex-500.otf
new file mode 100644
index 0000000000..9966da1929
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/ahem-ex-500.otf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-computed.html b/testing/web-platform/tests/css/css-fonts/parsing/font-computed.html
new file mode 100644
index 0000000000..ab2694d211
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-computed.html
@@ -0,0 +1,251 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: getComputedStyle().font</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-prop">
+<meta name="assert" content="font computed value round-trips.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+<style>
+ #container {
+ font-weight: 800;
+ font-size: 40px;
+ }
+</style>
+</head>
+<body>
+<div id="container">
+ <div id="target"></div>
+</div>
+<script>
+'use strict';
+
+// Firefox and Edge 18 serialize these as supplied.
+// Blink and Safari have implementation-dependent or platform-dependent serializations.
+function test_system_font(keyword) {
+ test(() => {
+ const target = document.getElementById('target');
+ const previousValue = 'italic xx-large/0px fantasy';
+ target.style.font = previousValue;
+ target.style.font = keyword;
+ const readValue = getComputedStyle(target).font;
+ assert_not_equals(readValue, '', 'font should be set');
+ assert_not_equals(readValue, previousValue, 'font should be updated');
+ target.style.font = previousValue;
+ target.style.font = readValue;
+ assert_equals(getComputedStyle(target).font, readValue, "serialization should round-trip");
+ }, keyword + ' should be a supported system font.');
+}
+
+test_system_font('caption');
+test_system_font('icon');
+test_system_font('menu');
+test_system_font('message-box');
+test_system_font('small-caption');
+test_system_font('status-bar');
+
+// a value other than normal
+const generate_style = () => 'italic';
+
+// value other than normal
+const generate_variant = () => 'small-caps';
+
+// values other than normal
+const generate_weight = (() => {
+ const alternatives = [
+ 'bold',
+ 'bolder',
+ 'lighter',
+ '100',
+ '900'
+ ];
+ let counter = 0;
+ return () => alternatives[counter++ % alternatives.length];
+})();
+
+const compute_weight = (() => {
+ const cache = {}
+ return (weight) => {
+ if (!(weight in cache)) {
+ const weight_reference = document.createElement('div');
+ document.getElementById('container').appendChild(weight_reference);
+ weight_reference.style.fontWeight = weight;
+ cache[weight] = getComputedStyle(weight_reference).fontWeight;
+ weight_reference.remove();
+ }
+ return cache[weight];
+ }
+})();
+
+// values other than normal
+const generate_stretch = (() => {
+ const alternatives = [
+ 'ultra-condensed',
+ 'extra-condensed',
+ 'condensed',
+ 'semi-condensed',
+ 'semi-expanded',
+ 'expanded',
+ 'extra-expanded',
+ 'ultra-expanded'
+ ];
+ let counter = 0;
+ return () => alternatives[counter++ % alternatives.length];
+})();
+
+const generate_size = (() => {
+ const alternatives = [
+ // <absolute-size>
+ 'xx-small',
+ 'medium',
+ 'xx-large',
+
+ // <relative-size>
+ 'larger',
+ 'smaller',
+
+ // <length-percentage>
+ '10px',
+ '20%',
+ 'calc(30% - 40px)',
+ ];
+ let counter = 0;
+ return () => alternatives[counter++ % alternatives.length];
+})();
+
+const generate_line_height = (() => {
+ const alternatives = [
+ null,
+ 'normal',
+ '1.2',
+ 'calc(120% + 1.2em)'
+ ];
+ let counter = 0;
+ return () => alternatives[counter++ % alternatives.length];
+})();
+
+const generate_family = (() => {
+ const alternatives = [
+ 'serif',
+ 'sans-serif',
+ 'cursive',
+ 'fantasy',
+ 'monospace',
+ 'Menu',
+ '"Non-Generic Example Family Name"'
+ ];
+ let counter = 0;
+ return () => alternatives[counter++ % alternatives.length];
+})();
+
+function test_specific(prefix) {
+ const reference = document.createElement('div');
+ document.getElementById('container').appendChild(reference);
+
+ let parts = [];
+ let canonical = [];
+ let style = null;
+ let variant = null;
+ let weight = null;
+ let stretch = null;
+ for (let entry of prefix) {
+ if (entry === 'style') {
+ style = generate_style();
+ parts.push(style);
+ } else if (entry === 'variant') {
+ variant = generate_variant();
+ parts.push(variant);
+ } else if (entry === 'weight') {
+ weight = generate_weight();
+ parts.push(weight);
+ } else if (entry === 'stretch') {
+ stretch = generate_stretch();
+ parts.push(stretch);
+ } else {
+ // normal
+ parts.push('normal');
+ }
+ }
+
+ if (style) {
+ canonical.push(style);
+ reference.style.fontStyle = style;
+ }
+
+ if (variant) {
+ canonical.push(variant);
+ reference.style.fontVariant = style;
+ }
+ if (weight) {
+ canonical.push(compute_weight(weight));
+ reference.style.fontWeight = style;
+ }
+ if (stretch) {
+ canonical.push(stretch);
+ reference.style.fontStretch = style;
+ }
+
+ const size = generate_size();
+ reference.style.fontSize = size;
+ const line_height = generate_line_height();
+ if (line_height) {
+ parts.push(size + '/' + line_height);
+ reference.style.lineHeight = line_height;
+ } else {
+ parts.push(size);
+ }
+
+ const family = generate_family();
+ parts.push(family);
+ reference.style.fontFamily = family;
+
+ if (!line_height || line_height === 'normal') {
+ canonical.push(getComputedStyle(reference).fontSize);
+ } else {
+ // Implementations differ on adjacent space when serializing '/'
+ // https://github.com/w3c/csswg-drafts/issues/4282
+ canonical.push(getComputedStyle(reference).fontSize + ' / ' + getComputedStyle(reference).lineHeight);
+ }
+
+ canonical.push(family);
+
+ reference.remove();
+
+ test_computed_value('font', parts.join(' '), canonical.join(' '));
+}
+
+// Font style, variant, weight and stretch may appear in any order.
+// Any or all may be omitted. Each accepts the keyword 'normal'.
+// We generate every permutation of these four properties, treating
+// the cases of a property value being omitted or being explicitly
+// 'normal' as being distinct permutations from when the property
+// has a value other than 'normal'.
+function test_various(prefix) {
+ test_specific(prefix);
+ if (prefix.length === 4) {
+ // Font style, variant, weight and stretch may not appear
+ // more than once.
+ return;
+ }
+
+ const alternatives = [
+ 'normal',
+ 'style',
+ 'variant',
+ 'weight',
+ 'stretch'
+ ];
+ for (let alternative of alternatives) {
+ // Since this is called recursively, check prefix for existing
+ // alternatives, otherwise we may have two styles or two variants, etc.
+ if (alternative === 'normal' || !prefix.includes(alternative))
+ test_various(prefix.concat(alternative));
+ }
+}
+
+test_various([]);
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-face-src-format.html b/testing/web-platform/tests/css/css-fonts/parsing/font-face-src-format.html
new file mode 100644
index 0000000000..7a5bb5b97e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-face-src-format.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<title>CSS Fonts 4 test: parsing the format() function in the src descriptor</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-face-src-parsing">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style id="testStyle">
+</style>
+<script>
+ const sheet = testStyle.sheet;
+ tests = [
+ // No format() function
+ { src: 'url("foo.ttf")', valid: true },
+ { src: 'url("foo.ttf"), url("bar.ttf")', valid: true },
+ // Empty format() is not valid
+ { src: 'url("foo.ttf") format()', valid: false },
+ // Garbage data instead of format() is not valid
+ { src: 'url("foo.ttf") dummy()', valid: false },
+ // Garbage data following valid format() is not valid
+ { src: 'url("foo.ttf") format("woff") dummy()', valid: false },
+ // Garbage data preceding valid format() is not valid
+ { src: 'url("foo.ttf") dummy() format("woff")', valid: false },
+ // Quoted strings in format()
+ { src: 'url("foo.ttf") format("collection")', valid: true },
+ { src: 'url("foo.ttf") format("opentype")', valid: true },
+ { src: 'url("foo.ttf") format("truetype")', valid: true },
+ { src: 'url("foo.ttf") format("woff")', valid: true },
+ { src: 'url("foo.ttf") format("woff2")', valid: true },
+ // Multiple strings (was valid in CSS Fonts 3, but not allowed in Fonts 4)
+ { src: 'url("foo.ttf") format("opentype", "truetype")', valid: false },
+ // Keywords (new in Fonts 4)
+ { src: 'url("foo.ttf") format(collection)', valid: true },
+ { src: 'url("foo.ttf") format(opentype)', valid: true },
+ { src: 'url("foo.ttf") format(truetype)', valid: true },
+ { src: 'url("foo.ttf") format(woff)', valid: true },
+ { src: 'url("foo.ttf") format(woff2)', valid: true },
+ // Multiple keywords are not accepted
+ { src: 'url("foo.ttf") format(opentype, truetype)', valid: false },
+ { src: 'url("foo.ttf") format(opentype truetype)', valid: false },
+ // Invalid format keywords should be a parse error
+ { src: 'url("foo.ttf") format(auto)', valid: false },
+ { src: 'url("foo.ttf") format(default)', valid: false },
+ { src: 'url("foo.ttf") format(inherit)', valid: false },
+ { src: 'url("foo.ttf") format(initial)', valid: false },
+ { src: 'url("foo.ttf") format(none)', valid: false },
+ { src: 'url("foo.ttf") format(normal)', valid: false },
+ { src: 'url("foo.ttf") format(xyzzy)', valid: false },
+ // Unknown format string still matches the grammar, although it won't be
+ // loaded. UAs may choose to either not load it, or not add unsupported
+ // entries to the list, ensure that subsequent component of the list are
+ // still recognized.
+ { src: 'url("foo.ttf") format("embedded-opentype"), url("bar.html")', valid: true },
+ { src: 'url("foo.ttf") format(embedded-opentype), url("bar.html")', valid: true },
+ { src: 'url("foo.ttf") format("svg"), url("bar.html")', valid: true },
+ { src: 'url("foo.ttf") format(svg), url("bar.html")', valid: true },
+ // A parsing error in one component does not make the entire descriptor invalid.
+ { src: 'url("foo.ttf") format(xyzz 200px), url("bar.html")', valid: true },
+ { src: 'url("foo.ttf") format(xyzz), url("bar.html")', valid: true },
+ { src: 'url("foo.ttf") dummy(xyzzy), url("bar.html")', valid: true },
+ { src: 'url("foo.ttf") format(), url("bar.html")', valid: true },
+ { src: 'url("foo.ttf") format(none), url("bar.html")', valid: true },
+ ];
+
+ for (let t of tests) {
+ test(() => {
+ assert_equals(sheet.cssRules.length, 0, "testSheet should initially be empty");
+ sheet.insertRule("@font-face { src: " + t.src + "}");
+ try {
+ assert_equals(sheet.cssRules[0].style.getPropertyValue("src") != "", t.valid);
+ } finally {
+ sheet.deleteRule(0);
+ }
+ }, "Check that src: " + t.src + " is " + (t.valid ? "valid" : "invalid"));
+ }
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-face-src-list.html b/testing/web-platform/tests/css/css-fonts/parsing/font-face-src-list.html
new file mode 100644
index 0000000000..07aeacd2ee
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-face-src-list.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<title>CSS Fonts 4 test: parsing the src descriptor list</title>
+<meta name="assert" content="A parse error in one component of the source list does not invalidate the entire descriptor">
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-face-src-parsing">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style id="testStyle">
+</style>
+<script>
+ const sheet = testStyle.sheet;
+ tests = [
+ // A component with a parse error does not invalidate the entire descriptor
+ // if there's some other valid component present.
+ { src: 'local(inherit), url(foo.ttf)', valid: true },
+ { src: 'local("myfont"), local(unset)', valid: true },
+ { src: 'local(), url(foo.ttf)', valid: true },
+ { src: 'local(12px monospace), url(foo.ttf)', valid: true },
+ { src: 'local("myfont") format(opentype), url(foo.ttf)', valid: true },
+ { src: 'url(not a valid url/bar.ttf), url(foo.ttf)', valid: true },
+ { src: 'url(foo.ttf) format(bad), url(foo.ttf)', valid: true },
+ { src: 'url(foo.ttf) tech(unknown), url(foo.ttf)', valid: true },
+ { src: 'url(foo.ttf) tech(color-COLRv0) otherfunc(othervalue), url(foo.ttf)', valid: true },
+ { src: 'url(foo.ttf), url(something.ttf) format(broken)', valid: true },
+ { src: '/* an empty component */, url(foo.ttf)', valid: true },
+ { src: 'local(""), url(foo.ttf), unparseable-garbage, local("another font name")', valid: true },
+ // But if all components are bad, the descriptor is invalid.
+ { src: 'local(), local(initial)', valid: false },
+ { src: 'local("textfont") format(opentype), local("emoji") tech(color-COLRv0)', valid: false },
+ { src: 'local(), /*empty*/, url(should be quoted.ttf), junk', valid: false },
+ { src: 'url(foo.ttf) format(unknown), url(bar.ttf) tech(broken)', valid: false },
+ { src: 'url(foo.ttf) tech(color-COLRv0) otherfunc(othervalue), junk', valid: false },
+ ];
+
+ for (let t of tests) {
+ test(() => {
+ assert_equals(sheet.cssRules.length, 0, "testSheet should initially be empty");
+ sheet.insertRule("@font-face { src: " + t.src + "}");
+ try {
+ assert_equals(sheet.cssRules[0].style.getPropertyValue("src") != "", t.valid);
+ } finally {
+ sheet.deleteRule(0);
+ }
+ }, "Check that src: " + t.src + " is " + (t.valid ? "valid" : "invalid"));
+ }
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-face-src-local.html b/testing/web-platform/tests/css/css-fonts/parsing/font-face-src-local.html
new file mode 100644
index 0000000000..30c435afaf
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-face-src-local.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<title>CSS Fonts Module Level 4: parsing @font-face src:local()</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#local-font-fallback">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style id="testStyle">
+</style>
+<script>
+ const sheet = testStyle.sheet;
+ tests = [
+ // Gargbage data following valid local() is not valid
+ { src:'local(A) dummy()', valid:false},
+ // Gargbage data preceding valid local() is not valid
+ { src:'dummy() local(A)', valid:false},
+ // Unquoted collapsing space
+ { src:'local( A )', valid:true },
+ { src:'local(A B)', valid:true },
+ { src:'local(A B)', valid:true },
+ { src:'local( A B )', valid:true },
+ // Unquoted local() with invalid CSS-wide keywords excluded from <custom-ident>
+ { src:'local(default)', valid:false },
+ { src:'local(inherit)', valid:false },
+ { src:'local(revert)', valid:false },
+ { src:'local(unset)', valid:false },
+ // Unquoted local() with CSS-wide keywords as part of the name
+ { src:'local(default A)', valid:true },
+ { src:'local(inherit A)', valid:true },
+ { src:'local(revert A)', valid:true },
+ { src:'local(unset A)', valid:true },
+ // Quoted local() with CSS-wide keywords
+ { src:'local("default")', valid:true },
+ { src:'local("inherit")', valid:true },
+ { src:'local("revert")', valid:true },
+ { src:'local("unset")', valid:true }
+ ];
+
+ for (let t of tests) {
+ test(() => {
+ assert_equals(sheet.cssRules.length, 0, "testSheet should initially be empty");
+ sheet.insertRule("@font-face { src: " + t.src + "}");
+ assert_equals(sheet.cssRules[0].style.getPropertyValue("src") != "", t.valid);
+ sheet.deleteRule(0);
+ }, "Check that src: " + t.src + " is " + (t.valid ? "valid" : "invalid"));
+ }
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-face-src-tech.html b/testing/web-platform/tests/css/css-fonts/parsing/font-face-src-tech.html
new file mode 100644
index 0000000000..0a58c34524
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-face-src-tech.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html>
+<title>CSS Fonts 4 test: parsing the tech() function in the src descriptor</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-face-src-parsing">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style id="testStyle">
+</style>
+<script>
+ const sheet = testStyle.sheet;
+ tests = [
+ // No tech() function
+ { src: 'url("foo.ttf")', valid: true },
+ // Empty tech() is not valid
+ { src: 'url("foo.ttf") tech()', valid: false },
+ // Check that each valid keyword is accepted
+ { src: 'url("foo.ttf") tech(features-opentype)', valid: true },
+ { src: 'url("foo.ttf") tech(features-aat)', valid: true },
+ { src: 'url("foo.ttf") tech(color-COLRv0)', valid: true },
+ { src: 'url("foo.ttf") tech(color-COLRv1)', valid: true },
+ { src: 'url("foo.ttf") tech(color-sbix)', valid: true },
+ { src: 'url("foo.ttf") tech(color-CBDT)', valid: true },
+ { src: 'url("foo.ttf") tech(variations)', valid: true },
+ { src: 'url("foo.ttf") tech(palettes)', valid: true },
+ // tech() does not accept strings (unlike format()!)
+ { src: 'url("foo.ttf") tech("features-opentype")', valid: false },
+ { src: 'url("foo.ttf") tech("color-COLRv0")', valid: false },
+ { src: 'url("foo.ttf") tech("variations")', valid: false },
+ // tech() accepts a comma-separated list of keywords
+ { src: 'url("foo.ttf") tech(features-opentype, color-COLRv0, variations, palettes)', valid: true },
+ { src: 'url("foo.ttf") tech(features-opentype color-COLRv0 variations palettes)', valid: false },
+ // Invalid font-tech keywords should be a parse error
+ { src: 'url("foo.ttf") tech(feature-opentype)', valid: false },
+ { src: 'url("foo.ttf") tech(feature-aat)', valid: false },
+ { src: 'url("foo.ttf") tech(feature-graphite)', valid: false },
+ { src: 'url("foo.ttf") tech(auto)', valid: false },
+ { src: 'url("foo.ttf") tech(default)', valid: false },
+ { src: 'url("foo.ttf") tech(inherit)', valid: false },
+ { src: 'url("foo.ttf") tech(initial)', valid: false },
+ { src: 'url("foo.ttf") tech(none)', valid: false },
+ { src: 'url("foo.ttf") tech(normal)', valid: false },
+ { src: 'url("foo.ttf") tech(xyzzy)', valid: false },
+ { src: 'url("foo.ttf") tech(xyzzy, features-opentype)', valid: false },
+ { src: 'url("foo.ttf") tech(features-opentype, xyzzy)', valid: false },
+ // format() function must precede tech() if both are present
+ { src: 'url("foo.ttf") format(opentype) tech(features-opentype)', valid: true },
+ { src: 'url("foo.ttf") tech(features-opentype) format(opentype)', valid: false },
+ // Unsupported technology (for example: no browser has incremental transfer yet), might be
+ // dropped from the list, next component of the list should be accepted.
+ { src: 'url("foo.ttf") tech(incremental), url("bar.html")', dontcomparetech: true, valid: true },
+ { src: 'url("foo.ttf") tech(incremental, color-SVG, features-graphite, features-aat), url("bar.html")', dontcomparetech: true, valid: true },
+ { src: 'url("foo.ttf") tech(color-SVG, features-graphite), url("bar.html")', dontcomparetech: true, valid: true },
+ { src: 'url("foo.ttf") tech(color-SVG), url("bar.html")', dontcomparetech: true, valid: true },
+ { src: 'url("foo.ttf") tech(features-graphite), url("bar.html")', dontcomparetech: true, valid: true },
+ // No invalid functions.
+ { src: 'url("foo.ttf") dummy("opentype") tech(variations)', valid: false },
+ { src: 'url("foo.ttf") dummy("opentype") dummy(variations)', valid: false },
+ { src: 'url("foo.ttf") format(opentype) tech(features-opentype) dummy(something)', valid: false },
+ // A parsing error in one component does not make the entire descriptor invalid.
+ { src: 'url("foo.ttf") format(dummy), url("foo.ttf") tech(variations)', valid: true },
+ // check_same_tech isn't currently smart enough to handle this.
+ { src: 'url("foo.ttf") tech(color), url("bar.html")', dontcomparetech: true, valid: true },
+ ];
+
+ // Assert that the two arguments have the same set of keywords in the tech() function,
+ // (although their ordering may differ).
+ function check_same_tech(serialized, specified) {
+ if (!specified.includes("tech(")) {
+ assert_false(serialized.includes("tech("), "expected no tech() function");
+ return;
+ }
+ // Extract the lists of tech() keywords and sort them for comparison.
+ const tech = /tech\((.+)\)/;
+ var specified_techs = tech.exec(specified)[1].split(/,\s*/).sort().join(", ");
+ var serialized_techs = tech.exec(serialized)[1].split(/,\s*/).sort().join(", ");
+ // Per CSSOM spec, keywords are serialized in ASCII-lowercase form:
+ // https://drafts.csswg.org/cssom/#serialize-a-css-component-value
+ assert_equals(serialized_techs, specified_techs.toLowerCase(), "expected matching tech() lists");
+ }
+
+ for (let t of tests) {
+ test(() => {
+ assert_equals(sheet.cssRules.length, 0, "testSheet should initially be empty");
+ sheet.insertRule("@font-face { src: " + t.src + "}");
+ try {
+ assert_equals(sheet.cssRules[0].style.getPropertyValue("src") != "", t.valid);
+ if (t.valid && !t.dontcomparetech) {
+ check_same_tech(sheet.cssRules[0].style.getPropertyValue("src"), t.src);
+ }
+ } finally {
+ sheet.deleteRule(0);
+ }
+ }, "Check that src: " + t.src + " is " + (t.valid ? "valid" : "invalid"));
+ }
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-family-computed.html b/testing/web-platform/tests/css/css-fonts/parsing/font-family-computed.html
new file mode 100644
index 0000000000..2f5f7dd91c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-family-computed.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: getComputedStyle().fontFamily</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-family-prop">
+<meta name="assert" content="font-family computed value is as specified.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value('font-family', 'serif');
+test_computed_value('font-family', 'sans-serif');
+test_computed_value('font-family', 'cursive');
+test_computed_value('font-family', 'fantasy');
+test_computed_value('font-family', 'monospace');
+test_computed_value('font-family', 'serif, sans-serif, cursive, fantasy, monospace');
+
+test_computed_value('font-family', 'Helvetica, Verdana, sans-serif');
+test_computed_value('font-family', '"New Century Schoolbook", serif');
+test_computed_value('font-family', '"21st Century", fantasy');
+
+test_computed_value('font-family', '"inherit", "serif"');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-family-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-family-invalid.html
new file mode 100644
index 0000000000..f4403e7e64
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-family-invalid.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: parsing font-family with invalid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-family-prop">
+<meta name="assert" content="font-family supports only the grammar '[ <family-name> | <generic-family> ] #'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value('font-family', 'cursive serif');
+
+test_invalid_value('font-family', 'Red/Black, sans-serif');
+test_invalid_value('font-family', '"Lucida" Grande, sans-serif');
+test_invalid_value('font-family', 'Ahem!, sans-serif');
+test_invalid_value('font-family', 'test@foo, sans-serif');
+test_invalid_value('font-family', '#POUND, sans-serif');
+test_invalid_value('font-family', 'Hawaii 5-0, sans-serif');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-family-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-family-valid.html
new file mode 100644
index 0000000000..ceaa9a0d14
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-family-valid.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: parsing font-family with valid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-family-prop">
+<meta name="assert" content="font-family supports the full grammar '[ <family-name> | <generic-family> ] #'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value('font-family', 'Serif', 'serif');
+test_valid_value('font-family', 'Sans-Serif', 'sans-serif');
+test_valid_value('font-family', 'Cursive', 'cursive');
+test_valid_value('font-family', 'Fantasy', 'fantasy');
+test_valid_value('font-family', 'Monospace', 'monospace');
+test_valid_value('font-family', 'System-UI', 'system-ui');
+test_valid_value('font-family', 'serif, sans-serif, cursive, fantasy, monospace, system-ui');
+
+test_valid_value('font-family', 'Helvetica, Verdana, sans-serif');
+test_valid_value('font-family', '"New Century Schoolbook", serif');
+test_valid_value('font-family', "'21st Century', fantasy", '"21st Century", fantasy');
+
+test_valid_value('font-family', '"inherit", "serif"');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-feature-settings-computed.html b/testing/web-platform/tests/css/css-fonts/parsing/font-feature-settings-computed.html
new file mode 100644
index 0000000000..44b9d1c535
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-feature-settings-computed.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: getComputedStyle().fontFeatureSettings</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<meta name="assert" content="The computed value of font-feature-settings is a map, so any duplicates in the specified value must not be preserved.">
+<!-- Note that this conflicts with the computed value being "as specified", which the summary shows.
+ See https://github.com/w3c/csswg-drafts/issues/8296#issuecomment-1377622802 -->
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value('font-feature-settings', 'normal');
+
+test_computed_value('font-feature-settings', '"dlig"');
+test_computed_value('font-feature-settings', '"smcp"');
+test_computed_value('font-feature-settings', '"c2sc"');
+test_computed_value('font-feature-settings', '"liga" 0');
+test_computed_value('font-feature-settings', '"tnum", "hist"', '"hist", "tnum"');
+
+test_computed_value('font-feature-settings', '"PKRN"');
+
+test_computed_value('font-feature-settings', '"dlig", "smcp", "dlig" 0', '"dlig" 0, "smcp"');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-feature-settings-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-feature-settings-invalid.html
new file mode 100644
index 0000000000..37689ce705
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-feature-settings-invalid.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: parsing font-feature-settings with invalid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<meta name="assert" content="font-feature-settings supports only the grammar 'normal | <feature-tag-value> #'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value('font-feature-settings', 'normal "dlig"');
+test_invalid_value('font-feature-settings', '"c2sc", normal');
+
+test_invalid_value('font-feature-settings', '"tnum" "hist"');
+test_invalid_value('font-feature-settings', '"silly" off');
+
+test_invalid_value('font-feature-settings', 'dlig');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-feature-settings-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-feature-settings-valid.html
new file mode 100644
index 0000000000..9ed4b5cde2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-feature-settings-valid.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: parsing font-feature-settings with valid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop">
+<meta name="assert" content="font-feature-settings supports the full grammar 'normal | <feature-tag-value> #'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value('font-feature-settings', 'normal');
+
+// <feature-tag-value> = <string> [ <integer> | on | off ]?
+test_valid_value('font-feature-settings', '"dlig" 1', '"dlig"');
+test_valid_value('font-feature-settings', '"smcp" on', '"smcp"');
+test_valid_value('font-feature-settings', "'c2sc'", '"c2sc"');
+test_valid_value('font-feature-settings', '"liga" off', '"liga" 0');
+test_valid_value('font-feature-settings', '"tnum", \'hist\'', '"tnum", "hist"');
+
+test_valid_value('font-feature-settings', '"PKRN"');
+
+test_valid_value('font-feature-settings', '"dlig" 1, "smcp" on, "dlig" 0', '"dlig", "smcp", "dlig" 0');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-invalid.html
new file mode 100644
index 0000000000..4262750b0e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-invalid.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing font with invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-prop">
+<meta name="assert" content="font supports only the grammar '[ [ <'font-style'> || <font-variant-css2> || <'font-weight'> || <font-stretch-css3> ]? <'font-size'> [ / <'line-height'> ]? <'font-family'> ] | caption | icon | menu | message-box | small-caption | status-bar'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value('font', 'menu icon');
+
+test_invalid_value('font', 'italic oblique xx-small serif');
+test_invalid_value('font', 'small-caps small-caps medium/normal sans-serif');
+test_invalid_value('font', 'bold bolder xx-large/1.2 cursive');
+test_invalid_value('font', 'ultra-condensed extra-condensed larger/calc(120% + 1.2em) fantasy');
+test_invalid_value('font', 'italic small-caps lighter condensed normal smaller monospace');
+test_invalid_value('font', 'normal 100 semi-condensed oblique small-caps 10px/normal Menu');
+test_invalid_value('font', 'normal normal normal normal normal 20%/1.2 \"FB Armada\"');
+
+test_invalid_value('font', 'italic small-caps lighter condensed smaller');
+test_invalid_value('font', 'normal 100 semi-condensed oblique small-caps Menu');
+test_invalid_value('font', '100% larger / 2 fantasy');
+
+test_invalid_value('font', 'oldstyle-nums medium serif');
+test_invalid_value('font', 'common-ligatures medium serif');
+test_invalid_value('font', 'normal full-width medium serif');
+test_invalid_value('font', 'italic titling-caps medium serif');
+test_invalid_value('font', 'petite-caps medium serif');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-kerning-computed.html b/testing/web-platform/tests/css/css-fonts/parsing/font-kerning-computed.html
new file mode 100644
index 0000000000..8abd71b03b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-kerning-computed.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: getComputedStyle().fontKerning</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-kerning-prop">
+<meta name="assert" content="font-kerning computed value is as specified.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value('font-kerning', 'auto');
+test_computed_value('font-kerning', 'normal');
+test_computed_value('font-kerning', 'none');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-kerning-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-kerning-invalid.html
new file mode 100644
index 0000000000..46e94b0a76
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-kerning-invalid.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: parsing font-kerning with invalid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-kerning-prop">
+<meta name="assert" content="font-kerning supports only the grammar 'auto | normal | none'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value('font-kerning', 'normal auto');
+test_invalid_value('font-kerning', 'none, auto');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-kerning-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-kerning-valid.html
new file mode 100644
index 0000000000..623f860dd7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-kerning-valid.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: parsing font-kerning with valid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-kerning-prop">
+<meta name="assert" content="font-kerning supports the full grammar 'auto | normal | none'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value('font-kerning', 'auto');
+test_valid_value('font-kerning', 'normal');
+test_valid_value('font-kerning', 'none');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-language-override-computed.html b/testing/web-platform/tests/css/css-fonts/parsing/font-language-override-computed.html
new file mode 100644
index 0000000000..d208b15b12
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-language-override-computed.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: getComputedStyle().fontLanguageOverride</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#propdef-font-language-override">
+<meta name="assert" content="font-language-override computed value is as specified.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value('font-language-override', 'normal');
+test_computed_value('font-language-override', '"KSW"');
+test_computed_value('font-language-override', '"ENG "', '"ENG"');
+test_computed_value('font-language-override', '"en "', '"en"');
+test_computed_value('font-language-override', '" en "', '" en"');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-language-override-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-language-override-invalid.html
new file mode 100644
index 0000000000..448d1ec292
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-language-override-invalid.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing font-language-override with invalid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#propdef-font-language-override">
+<meta name="assert" content="font-language-override supports only the grammar 'normal | <string>'.">
+<meta name="assert" content="font-language-override string has three letters.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value('font-language-override', 'auto');
+test_invalid_value('font-language-override', 'normal "ksw"');
+
+test_invalid_value('font-language-override', '"turkish"'); // overlong string
+test_invalid_value('font-language-override', '"xøx"'); // non-ASCII character
+test_invalid_value('font-language-override', '""'); // empty string
+test_invalid_value('font-language-override', '"ENG "'); // too much padding
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-language-override-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-language-override-valid.html
new file mode 100644
index 0000000000..53793ef3a5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-language-override-valid.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing font-language-override with valid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#propdef-font-language-override">
+<meta name="assert" content="font-language-override supports the full grammar 'normal | <string>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value('font-language-override', 'normal');
+test_valid_value('font-language-override', '"KSW"');
+test_valid_value('font-language-override', '"APPH"');
+test_valid_value('font-language-override', '"ENG "', '"ENG"'); // Shortest serialization strips trailing spaces.
+test_valid_value('font-language-override', '"ksw"'); // Will not match the registered (uppercase) tag, but valid grammar.
+test_valid_value('font-language-override', '"tr"');
+test_valid_value('font-language-override', '"en "', '"en"');
+test_valid_value('font-language-override', '" en "', '" en"'); // Leading space is not trimmed
+test_valid_value('font-language-override', '"1 %"');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-optical-sizing-computed.html b/testing/web-platform/tests/css/css-fonts/parsing/font-optical-sizing-computed.html
new file mode 100644
index 0000000000..9e0719b12c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-optical-sizing-computed.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: getComputedStyle().fontOpticalSizing</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#propdef-font-optical-sizing">
+<meta name="assert" content="font-optical-sizing computed value is as specified.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value('font-optical-sizing', 'auto');
+test_computed_value('font-optical-sizing', 'none');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-optical-sizing-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-optical-sizing-invalid.html
new file mode 100644
index 0000000000..efd0f6257c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-optical-sizing-invalid.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing font-optical-sizing with invalid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#propdef-font-optical-sizing">
+<meta name="assert" content="font-optical-sizing supports only the grammar 'auto | none'.">
+<meta name="assert" content="font-optical-sizing string has three letters.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value('font-optical-sizing', 'normal');
+test_invalid_value('font-optical-sizing', 'auto none');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-optical-sizing-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-optical-sizing-valid.html
new file mode 100644
index 0000000000..f9545d8920
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-optical-sizing-valid.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing font-optical-sizing with valid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#propdef-font-optical-sizing">
+<meta name="assert" content="font-optical-sizing supports the full grammar 'auto | none'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value('font-optical-sizing', 'auto');
+test_valid_value('font-optical-sizing', 'none');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-palette-computed.html b/testing/web-platform/tests/css/css-fonts/parsing/font-palette-computed.html
new file mode 100644
index 0000000000..1de3364979
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-palette-computed.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: getComputedStyle().fontPalette</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<meta name="assert" content="font-palette computed value is as specified.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value('font-palette', 'normal');
+test_computed_value('font-palette', 'light');
+test_computed_value('font-palette', 'dark');
+test_computed_value('font-palette', '--pitchfork');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-palette-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-palette-invalid.html
new file mode 100644
index 0000000000..d9c9b1adbf
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-palette-invalid.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing font-palette with invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<meta name="assert" content="font-palette supports only the grammar 'normal | light | dark | <palette-identifier>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value('font-palette', 'normal none');
+test_invalid_value('font-palette', 'none, light');
+test_invalid_value('font-palette', 'A');
+test_invalid_value('font-palette', 'none');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-palette-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-palette-valid.html
new file mode 100644
index 0000000000..516da172ee
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-palette-valid.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing font-palette with valid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-prop">
+<meta name="assert" content="font-palette supports the full grammar 'normal | light | dark | <palette-identifier>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value('font-palette', 'normal');
+test_valid_value('font-palette', 'light');
+test_valid_value('font-palette', 'dark');
+test_valid_value('font-palette', '--pitchfork');
+test_valid_value('font-palette', '--');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-palette-values-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-palette-values-invalid.html
new file mode 100644
index 0000000000..2056055f34
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-palette-values-invalid.html
@@ -0,0 +1,288 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-values">
+<meta name="assert" content="@font-palette-values is parsed correctly.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style id="style">
+@font-palette-values {
+}
+
+@font-palette-values A {
+}
+
+@font-palette-values --A --B {
+}
+
+/* 0 */
+@font-palette-values --A {
+ font-family: a, serif; /* multiple families are allowed, but not generics */
+}
+
+/* 1 */
+@font-palette-values --A {
+ font-family: 1;
+}
+
+/* 2 */
+@font-palette-values --A {
+ font: 12px a;
+}
+
+/* 3 */
+@font-palette-values --A {
+ base-palette: 1 2;
+}
+
+/* 4 */
+@font-palette-values --A {
+ base-palette: ident;
+}
+
+/* 5 */
+@font-palette-values --A {
+ base-palette: "a" "b";
+}
+
+/* 6 */
+@font-palette-values --A {
+ base-palette: ;
+}
+
+/* 7 */
+@font-palette-values --A {
+ override-colors: ident #123;
+}
+
+/* 8 */
+@font-palette-values --A {
+ override-colors: 0 "red";
+}
+
+/* 9 */
+@font-palette-values --A {
+ override-colors: 0 #123, 1;
+}
+
+/* 10 */
+@font-palette-values --A {
+ override-colors: ;
+}
+
+/* 11 */
+@font-palette-values --A {
+ override-colors: 0 #123 1;
+}
+
+/* 12 */
+@font-palette-values --A {
+ override-colors: 0;
+}
+
+/* 13 */
+@font-palette-values --A {
+ font-family: "";
+}
+
+/* 14 */
+@font-palette-values --A {
+ base-palette: initial;
+ override-colors: initial;
+}
+
+/* 15 */
+@font-palette-values --A {
+ base-palette: inherit;
+ override-colors: inherit;
+}
+
+/* 16 */
+@font-palette-values --A {
+ base-palette: unset;
+ override-colors: unset;
+}
+
+/* 17 */
+@font-palette-values --A {
+ base-palette: -1;
+ override-color: -1 #123;
+}
+
+/* 18 */
+@font-palette-values --A {
+ override-colors: 0 canvas;
+}
+</style>
+</head>
+<body>
+<script>
+let rules = document.getElementById("style").sheet.cssRules;
+test(function() {
+ assert_equals(rules.length, 19);
+});
+
+test(function() {
+ let text = rules[0].cssText;
+ let rule = rules[0];
+ assert_equals(text.indexOf("font-family"), -1);
+ assert_equals(rule.fontFamily, "");
+ rule.fontFamily = "SomeFontFamily";
+ assert_equals(rule.fontFamily, "");
+ assert_equals(rule.basePalette, "");
+ rule.basePalette = "7";
+ assert_equals(rule.basePalette, "");
+ assert_throws_js(TypeError, function() {
+ rule.clear();
+ });
+ assert_throws_js(TypeError, function() {
+ rule.delete(4);
+ });
+ assert_throws_js(TypeError, function() {
+ rule.set(4, "0 #123");
+ });
+});
+
+test(function() {
+ let text = rules[1].cssText;
+ let rule = rules[1];
+ assert_equals(text.indexOf("font-family"), -1);
+ assert_equals(rule.fontFamily, "");
+});
+
+test(function() {
+ let text = rules[2].cssText;
+ let rule = rules[2];
+ assert_equals(text.indexOf("font:"), -1);
+ assert_equals(rule.fontFamily, "");
+});
+
+test(function() {
+ let text = rules[3].cssText;
+ let rule = rules[3];
+ assert_equals(text.indexOf("base-palette"), -1);
+ assert_equals(rule.basePalette, "");
+});
+
+test(function() {
+ let text = rules[4].cssText;
+ let rule = rules[4];
+ assert_equals(text.indexOf("base-palette"), -1);
+ assert_equals(rule.basePalette, "");
+});
+
+test(function() {
+ let text = rules[5].cssText;
+ let rule = rules[5];
+ assert_equals(text.indexOf("base-palette"), -1);
+ assert_equals(rule.basePalette, "");
+});
+
+test(function() {
+ let text = rules[6].cssText;
+ let rule = rules[6];
+ assert_equals(text.indexOf("base-palette"), -1);
+ assert_equals(rule.basePalette, "");
+});
+
+test(function() {
+ let text = rules[7].cssText;
+ let rule = rules[7];
+ assert_equals(text.indexOf("override-colors"), -1);
+ assert_equals(rule.overrideColors, "");
+});
+
+test(function() {
+ let text = rules[8].cssText;
+ let rule = rules[8];
+ assert_equals(text.indexOf("override-colors"), -1);
+ assert_equals(rule.overrideColors, "");
+});
+
+test(function() {
+ let text = rules[9].cssText;
+ let rule = rules[9];
+ assert_equals(text.indexOf("override-colors"), -1);
+ assert_equals(rule.overrideColors, "");
+});
+
+test(function() {
+ let text = rules[10].cssText;
+ let rule = rules[10];
+ assert_equals(text.indexOf("override-colors"), -1);
+ assert_equals(rule.overrideColors, "");
+});
+
+test(function() {
+ let text = rules[11].cssText;
+ let rule = rules[11];
+ assert_equals(text.indexOf("override-colors"), -1);
+ assert_equals(rule.overrideColors, "");
+});
+
+test(function() {
+ let text = rules[12].cssText;
+ let rule = rules[12];
+ assert_equals(text.indexOf("override-colors"), -1);
+ assert_equals(rule.overrideColors, "");
+});
+
+test(function() {
+ let text = rules[13].cssText;
+ let rule = rules[13];
+ // I see nothing in the spec that indicates an empty string is a parse error.
+ assert_not_equals(text.indexOf("font-family"), -1);
+});
+
+test(function() {
+ let text = rules[14].cssText;
+ let rule = rules[14];
+ assert_equals(text.indexOf("base-palette"), -1);
+ assert_equals(text.indexOf("override-colors"), -1);
+ assert_equals(rule.basePalette, "");
+ assert_equals(rule.overrideColors, "");
+});
+
+test(function() {
+ let text = rules[15].cssText;
+ let rule = rules[15];
+ assert_equals(text.indexOf("base-palette"), -1);
+ assert_equals(text.indexOf("override-colors"), -1);
+ assert_equals(rule.basePalette, "");
+ assert_equals(rule.overrideColors, "");
+});
+
+test(function() {
+ let text = rules[16].cssText;
+ let rule = rules[16];
+ assert_equals(text.indexOf("base-palette"), -1);
+ assert_equals(text.indexOf("override-colors"), -1);
+ assert_equals(rule.basePalette, "");
+ assert_equals(rule.overrideColors, "");
+});
+
+test(function() {
+ assert_equals(CSSRule.FONT_PALETTE_VALUES_RULE, undefined);
+});
+
+test(function() {
+ let text = rules[17].cssText;
+ let rule = rules[17];
+ assert_equals(text.indexOf("base-palette"), -1);
+ assert_equals(text.indexOf("override-color"), -1);
+ assert_equals(rule.basePalette, "");
+ assert_equals(rule.overrideColors, "");
+});
+
+test(function() {
+ let text = rules[18].cssText;
+ let rule = rules[18];
+ assert_equals(text.indexOf("override-colors"), -1);
+ assert_equals(rule.basePalette, "");
+ assert_equals(rule.overrideColors, "");
+});
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-palette-values-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-palette-values-valid.html
new file mode 100644
index 0000000000..3c0c0626f5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-palette-values-valid.html
@@ -0,0 +1,390 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing @font-palette-values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-values">
+<meta name="assert" content="@font-palette-values is parsed correctly.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style id="style">
+/* 0 */
+@font-palette-values --A {
+}
+
+/* 1 */
+@font-palette-values --B {
+ font-weight: 400;
+}
+
+/* 2 */
+@font-palette-values --C {
+ font-family: foo;
+ font-family: bar;
+ base-palette: 1;
+ base-palette: "baz";
+ base-palette: 2;
+ override-colors: "a" #123;
+ override-colors: 3 #123;
+ override-colors: "b" #123;
+}
+
+/* 3 */
+@font-palette-values --D {
+ base-palette: "foo";
+ base-palette: 1;
+ base-palette: "bar";
+ override-colors: 3 #123;
+ override-colors: "baz" #123;
+ override-colors: 4 #123;
+}
+
+/* 4 */
+@font-palette-values --E {
+ override-colors: 3 rgb(17, 34, 51);
+ override-colors: 3 rgb(68, 85, 102);
+}
+
+/* 5 */
+@font-palette-values --F {
+ font-family: "foo";
+}
+
+/* 6 */
+@font-palette-values --G {
+ override-colors: 3 rgb(17, 34, 51), 4 rgb(68, 85, 102);
+}
+
+/* 7 */
+@font-palette-values --H {
+ override-colors: 3 rgb(17, 34, 51), 3 rgb(68, 85, 102);
+}
+
+/* 8 */
+@font-palette-values --I {
+ override-colors: 0 #0000FF;
+}
+
+/* 9 */
+@font-palette-values --J {
+ override-colors: 0 green;
+}
+
+/* 10 */
+@font-palette-values --K {
+ override-colors: 0 transparent;
+}
+
+/* 11 */
+@font-palette-values --L {
+ override-colors: 0 rgba(1 2 3 / 4);
+}
+
+/* 12 */
+@font-palette-values --M {
+ override-colors: 0 lab(29.2345% 39.3825 20.0664);
+}
+
+/* 13 */
+@font-palette-values --N {
+ override-colors: 0 color(display-p3 100% 100% 100%);
+}
+
+/* 14 */
+@font-palette-values --O {
+ override-colors: 0 transparent;
+}
+
+/* 15 */
+@font-palette-values -- {
+}
+
+/* 16 */
+@font-palette-values --P {
+ font-family: foo, bar, baz;
+}
+</style>
+</head>
+<body>
+<script>
+let rules = document.getElementById("style").sheet.cssRules;
+let supports_lab = CSS.supports('color', 'lab(29.2345% 39.3825 20.0664)');
+let supports_display_p3_color_space =
+ CSS.supports('color', 'color(display-p3 100% 100% 100%)');
+
+test(function() {
+ let text = rules[0].cssText;
+ assert_not_equals(text.indexOf("@font-palette-values "), -1);
+ assert_not_equals(text.indexOf(" --A "), -1);
+ assert_not_equals(text.indexOf("{"), -1);
+ assert_not_equals(text.indexOf("}"), -1);
+ assert_equals(text.indexOf("font-family"), -1);
+ assert_equals(text.indexOf("base-palette"), -1);
+ assert_equals(text.indexOf("override-colors"), -1);
+});
+
+test(function() {
+ let rule = rules[0];
+ assert_equals(rule.constructor.name, "CSSFontPaletteValuesRule");
+ assert_equals(rule.name, "--A");
+ assert_equals(rule.fontFamily, "");
+ assert_equals(rule.basePalette, "");
+ assert_equals(rule.overrideColors, "");
+});
+
+test(function() {
+ let text = rules[1].cssText;
+ assert_equals(text.indexOf("font-weight"), -1);
+});
+
+test(function() {
+ let rule = rules[1];
+ assert_equals(rule.name, "--B");
+ assert_equals(rule.fontFamily, "");
+ assert_equals(rule.basePalette, "");
+ assert_equals(rule.overrideColors, "");
+});
+
+test(function() {
+ let text = rules[2].cssText;
+ assert_equals(text.indexOf("font-family: foo;"), -1);
+ assert_not_equals(text.indexOf("font-family: bar;"), -1);
+ assert_equals(text.indexOf("base-palette: 1;"), -1);
+ assert_equals(text.indexOf("base-palette: \"baz\""), -1);
+ assert_not_equals(text.indexOf("base-palette: 2;"), -1);
+ assert_equals(text.indexOf("override-colors: \"a\""), -1);
+ assert_not_equals(text.indexOf("override-colors: 3"), -1);
+ assert_equals(text.indexOf("override-colors: \"b\""), -1);
+});
+
+test(function() {
+ let rule = rules[2];
+ assert_equals(rule.name, "--C");
+ assert_equals(rule.fontFamily, "bar");
+ assert_equals(rule.basePalette, "2");
+ assert_equals(rule.overrideColors, "3 rgb(17, 34, 51)");
+});
+
+test(function() {
+ let text = rules[3].cssText;
+ assert_equals(text.indexOf("base-palette: \"foo\";"), -1);
+ assert_not_equals(text.indexOf("base-palette: 1"), -1);
+ assert_equals(text.indexOf("base-palette: \"bar\";"), -1);
+ assert_equals(text.indexOf("override-colors: 3"), -1);
+ assert_equals(text.indexOf("override-colors: \"baz\""), -1);
+ assert_not_equals(text.indexOf("override-colors: 4"), -1);
+});
+
+test(function() {
+ let rule = rules[3];
+ assert_equals(rule.name, "--D");
+ assert_equals(rule.fontFamily, "");
+ assert_equals(rule.basePalette, "1");
+ assert_equals(rule.overrideColors.indexOf("),"), -1);
+ assert_equals(rule.overrideColors.indexOf("4 "), 0);
+ assert_not_equals(rule.overrideColors.indexOf("rgb"), -1);
+});
+
+test(function() {
+ let text = rules[4].cssText;
+ assert_equals(text.indexOf("51"), -1);
+ assert_not_equals(text.indexOf("102"), -1);
+});
+
+test(function() {
+ let rule = rules[4];
+ assert_equals(rule.name, "--E");
+ assert_equals(rule.fontFamily, "");
+ assert_equals(rule.basePalette, "");
+ assert_equals(rule.overrideColors.indexOf("),"), -1);
+ assert_equals(rule.overrideColors.indexOf("3 "), 0);
+ assert_not_equals(rule.overrideColors.indexOf("102"), -1);
+});
+
+test(function() {
+ let text = rules[5].cssText;
+ assert_not_equals(text.indexOf("foo"), -1);
+});
+
+test(function() {
+ let rule = rules[5];
+ assert_equals(rule.name, "--F");
+ assert_in_array(rule.fontFamily, ["foo", "\"foo\""]);
+ assert_equals(rule.basePalette, "");
+ assert_equals(rule.overrideColors, "");
+});
+
+test(function() {
+ let text = rules[6].cssText;
+ assert_not_equals(text.indexOf("51"), -1);
+ assert_not_equals(text.indexOf("102"), -1);
+});
+
+test(function() {
+ let rule = rules[6];
+ assert_equals(rule.name, "--G");
+ assert_equals(rule.fontFamily, "");
+ assert_equals(rule.basePalette, "");
+ assert_equals(rule.overrideColors.split("),").length, 2);
+ assert_equals(rule.overrideColors.indexOf("3 "), 0);
+ assert_not_equals(rule.overrideColors.indexOf("), 4 "), -1);
+ assert_not_equals(rule.overrideColors.indexOf("51"), -1);
+ assert_not_equals(rule.overrideColors.indexOf("102"), -1);
+});
+
+test(function() {
+ let text = rules[7].cssText;
+ assert_not_equals(text.indexOf("51"), -1);
+ assert_not_equals(text.indexOf("102"), -1);
+});
+
+test(function() {
+ let rule = rules[7];
+ assert_equals(rule.name, "--H");
+ assert_equals(rule.fontFamily, "");
+ assert_equals(rule.basePalette, "");
+ assert_not_equals(rule.overrideColors.indexOf("),"), -1);
+ assert_equals(rule.overrideColors.indexOf("3 "), 0);
+ assert_not_equals(rule.overrideColors.indexOf("), 3 "), -1);
+ assert_not_equals(rule.overrideColors.indexOf("51"), -1);
+ assert_not_equals(rule.overrideColors.indexOf("102"), -1);
+});
+
+test(function() {
+ let text = rules[8].cssText;
+ assert_not_equals(text.indexOf("override-colors"), -1);
+ assert_not_equals(text.indexOf("rgb(0, 0, 255)"), -1);
+});
+
+test(function() {
+ let rule = rules[8];
+ assert_equals(rule.name, "--I");
+ assert_equals(rule.fontFamily, "");
+ assert_equals(rule.basePalette, "");
+ assert_equals(rule.overrideColors.indexOf("),"), -1);
+ assert_not_equals(rule.overrideColors.indexOf("rgb(0, 0, 255)"), -1);
+});
+
+test(function() {
+ let text = rules[9].cssText;
+ assert_not_equals(text.indexOf("override-colors"), -1);
+ assert_true(text.includes("rgb(0, 128, 0)") ||
+ text.includes("green"));
+});
+
+test(function() {
+ let rule = rules[9];
+ assert_equals(rule.name, "--J");
+ assert_equals(rule.fontFamily, "");
+ assert_equals(rule.basePalette, "");
+ assert_equals(rule.overrideColors.indexOf("),"), -1);
+ assert_true(rule.overrideColors.includes("rgb(0, 128, 0)") ||
+ rule.overrideColors.includes("green"))
+});
+
+test(function() {
+ let text = rules[10].cssText;
+ assert_not_equals(text.indexOf("override-colors"), -1);
+ assert_true(text.includes("rgba(0, 0, 0, 0)") ||
+ text.includes("transparent"));
+});
+
+test(function() {
+ let rule = rules[10];
+ assert_equals(rule.name, "--K");
+ assert_equals(rule.fontFamily, "");
+ assert_equals(rule.basePalette, "");
+ assert_equals(rule.overrideColors.indexOf("),"), -1);
+ assert_true(rule.overrideColors.includes("rgba(0, 0, 0, 0)") ||
+ rule.overrideColors.includes("transparent"));
+});
+
+test(function() {
+ let text = rules[11].cssText;
+ assert_not_equals(text.indexOf("override-colors"), -1);
+ assert_not_equals(text.indexOf("2"), -1);
+});
+
+test(function() {
+ let rule = rules[11];
+ assert_equals(rule.name, "--L");
+ assert_equals(rule.fontFamily, "");
+ assert_equals(rule.basePalette, "");
+ assert_equals(rule.overrideColors.indexOf("),"), -1);
+ assert_not_equals(rule.overrideColors.indexOf("2"), -1);
+});
+
+test(function() {
+ let text = rules[12].cssText;
+ if (supports_lab) {
+ assert_not_equals(text.indexOf("override-colors"), -1);
+ assert_not_equals(text.indexOf("29"), -1);
+ }
+});
+
+test(function() {
+ let rule = rules[12];
+ assert_equals(rule.name, "--M");
+ assert_equals(rule.fontFamily, "");
+ assert_equals(rule.basePalette, "");
+ if (supports_lab) {
+ assert_equals(rule.overrideColors.indexOf("),"), -1);
+ assert_not_equals(rule.overrideColors.indexOf("lab"), -1);
+ }
+});
+
+test(function() {
+ let text = rules[13].cssText;
+ if (supports_display_p3_color_space) {
+ assert_not_equals(text.indexOf("override-colors"), -1);
+ assert_not_equals(text.indexOf("display-p3"), -1);
+ }
+});
+
+test(function() {
+ let rule = rules[13];
+ assert_equals(rule.name, "--N");
+ assert_equals(rule.fontFamily, "");
+ assert_equals(rule.basePalette, "");
+ if (supports_display_p3_color_space) {
+ assert_equals(rule.overrideColors.indexOf("),"), -1);
+ assert_not_equals(rule.overrideColors.indexOf("display-p3"), -1);
+ }
+});
+
+test(function() {
+ let text = rules[14].cssText;
+ assert_not_equals(text.indexOf("override-colors"), -1);
+});
+
+test(function() {
+ let rule = rules[14];
+ assert_equals(rule.name, "--O");
+ assert_equals(rule.fontFamily, "");
+ assert_equals(rule.basePalette, "");
+ assert_not_equals(rule.overrideColors, "");
+});
+
+test(function() {
+ let text = rules[15].cssText;
+ assert_not_equals(text.indexOf("--"), -1);
+});
+
+test(function() {
+ let rule = rules[15];
+ assert_equals(rule.name, "--");
+ assert_equals(rule.fontFamily, "");
+ assert_equals(rule.basePalette, "");
+ assert_equals(rule.overrideColors, "");
+});
+
+test(function() {
+ let rule = rules[16];
+ assert_equals(rule.name, "--P");
+ assert_equals(rule.fontFamily, "foo, bar, baz");
+ assert_equals(rule.basePalette, "");
+ assert_equals(rule.overrideColors, "");
+});
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-shorthand-variant.html b/testing/web-platform/tests/css/css-fonts/parsing/font-shorthand-variant.html
new file mode 100644
index 0000000000..98a02ff9bb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-shorthand-variant.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: font-variant vs font shorthand</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-prop">
+<meta name="assert" content="Only the CSS2 font-variant values (normal | small-caps) are supported by the font shorthand.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<div id="container">
+ <div id="target"></div>
+</div>
+<script>
+test(() => {
+ const target = document.getElementById('target');
+ target.style.font = "medium serif";
+ target.style.fontVariant = "small-caps";
+ assert_equals(target.style.font, "small-caps medium serif", "font should be updated");
+ target.style.fontVariant = "titling-caps";
+ assert_equals(target.style.font, "", "font should be empty");
+ target.style.fontVariant = "normal";
+ assert_equals(target.style.font, "medium serif", "font should be reset");
+ target.style.fontVariant = "full-width";
+ assert_equals(target.style.font, "", "font should be empty");
+}, "font shorthand returns only CSS2 font-variant values");
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-size-adjust-computed.html b/testing/web-platform/tests/css/css-fonts/parsing/font-size-adjust-computed.html
new file mode 100644
index 0000000000..4910ddd284
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-size-adjust-computed.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 5: getComputedStyle().fontSizeAdjust</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-5/#font-size-adjust-prop">
+<meta name="assert" content="font-size-adjust computed value is as specified.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+<style>
+/* Use a font with known metrics so we can verify that from-font
+ computes to the expected value from the font. */
+@font-face {
+ font-family: ahem-ex-500;
+ src: url(ahem-ex-500.otf);
+}
+#target {
+ font-family: ahem-ex-500 !important;
+ font-size: 1000px;
+}
+</style>
+</head>
+<body>
+<div id="target"></div>
+<script>
+promise_test(async (t) => {
+ await document.fonts.load("1000px ahem-ex-500");
+
+ test_computed_value('font-size-adjust', 'none');
+
+ test_computed_value('font-size-adjust', '0.5');
+ test_computed_value('font-size-adjust', 'ex-height 0.5', '0.5'); // default basis 'ex-height' omitted from serialization
+ test_computed_value('font-size-adjust', 'cap-height 0.8');
+ test_computed_value('font-size-adjust', 'ch-width 0.4');
+ test_computed_value('font-size-adjust', 'ic-width 0.9');
+ test_computed_value('font-size-adjust', 'ic-height 1.1');
+
+ // The ahem-ex-500 font has both ex-height and cap-height set at 0.5em, and ch-width is 1em.
+ // Ideographic metrics are not available, so fall back to 1em.
+ test_computed_value('font-size-adjust', 'from-font', '0.5');
+ test_computed_value('font-size-adjust', 'ex-height from-font', '0.5'); // default basis 'ex-height' omitted from serialization
+ test_computed_value('font-size-adjust', 'cap-height from-font', 'cap-height 0.5');
+ test_computed_value('font-size-adjust', 'ch-width from-font', 'ch-width 1');
+ test_computed_value('font-size-adjust', 'ic-width from-font', 'ic-width 1');
+ test_computed_value('font-size-adjust', 'ic-height from-font', 'ic-height 1');
+})
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-size-adjust-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-size-adjust-invalid.html
new file mode 100644
index 0000000000..a9eaef6f84
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-size-adjust-invalid.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 5: parsing font-size-adjust with invalid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-5/#font-size-adjust-prop">
+<meta name="assert" content="font-size-adjust supports only the grammar 'none | [metric]? [from-font | <number>]'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value('font-size-adjust', 'auto');
+test_invalid_value('font-size-adjust', '-10');
+test_invalid_value('font-size-adjust', '0.5 ex-height');
+test_invalid_value('font-size-adjust', 'em 1.0');
+test_invalid_value('font-size-adjust', 'ch 0.5'); // it's 'ch-width', not 'ch'
+test_invalid_value('font-size-adjust', 'ic 1.0'); // it's 'ic-width' or 'ic-height', not 'ic'
+
+test_invalid_value('font-size-adjust', 'ex-height');
+test_invalid_value('font-size-adjust', 'cap-height');
+test_invalid_value('font-size-adjust', 'ic-height');
+test_invalid_value('font-size-adjust', 'ic-width');
+test_invalid_value('font-size-adjust', 'ch-width');
+
+test_invalid_value('font-size-adjust', 'ex-height none');
+test_invalid_value('font-size-adjust', 'cap-height none');
+test_invalid_value('font-size-adjust', 'ic-height none');
+test_invalid_value('font-size-adjust', 'ic-width none');
+test_invalid_value('font-size-adjust', 'ch-width none');
+
+test_invalid_value('font-size-adjust', 'ex-height ex-height');
+test_invalid_value('font-size-adjust', 'cap-height cap-height');
+test_invalid_value('font-size-adjust', 'ic-height ic-height');
+test_invalid_value('font-size-adjust', 'ic-width ic-width');
+test_invalid_value('font-size-adjust', 'ch-width ch-width');
+
+test_invalid_value('font-size-adjust', 'none none');
+test_invalid_value('font-size-adjust', 'none 0.5');
+test_invalid_value('font-size-adjust', 'none from-font');
+
+test_invalid_value('font-size-adjust', 'from-font none');
+test_invalid_value('font-size-adjust', 'from-font 0.5');
+test_invalid_value('font-size-adjust', 'from-font ex-height');
+test_invalid_value('font-size-adjust', 'from-font cap-height');
+test_invalid_value('font-size-adjust', 'from-font ic-height');
+test_invalid_value('font-size-adjust', 'from-font ic-width');
+test_invalid_value('font-size-adjust', 'from-font ch-width');
+test_invalid_value('font-size-adjust', 'from-font from-font');
+
+test_invalid_value('font-size-adjust', 'ex-height from-font from-font');
+test_invalid_value('font-size-adjust', 'cap-height from-font from-font');
+test_invalid_value('font-size-adjust', 'ic-height from-font from-font');
+test_invalid_value('font-size-adjust', 'ic-width from-font from-font');
+test_invalid_value('font-size-adjust', 'ch-width from-font from-font');
+
+test_invalid_value('font-size-adjust', 'ex-height from-font 0.5');
+test_invalid_value('font-size-adjust', 'cap-height from-font 0.5');
+test_invalid_value('font-size-adjust', 'ic-height from-font 0.5');
+test_invalid_value('font-size-adjust', 'ic-width from-font 0.5');
+test_invalid_value('font-size-adjust', 'ch-width from-font 0.5');
+
+test_invalid_value('font-size-adjust', 'ex-height 0.5 from-font');
+test_invalid_value('font-size-adjust', 'cap-height 0.5 from-font');
+test_invalid_value('font-size-adjust', 'ic-height 0.5 from-font');
+test_invalid_value('font-size-adjust', 'ic-width 0.5 from-font');
+test_invalid_value('font-size-adjust', 'ch-width 0.5 from-font');
+
+test_invalid_value('font-size-adjust', 'ex-height from-font none');
+test_invalid_value('font-size-adjust', 'cap-height from-font none');
+test_invalid_value('font-size-adjust', 'ic-height from-font none');
+test_invalid_value('font-size-adjust', 'ic-width from-font none');
+test_invalid_value('font-size-adjust', 'ch-width from-font none');
+
+test_invalid_value('font-size-adjust', 'ex-height none from-font');
+test_invalid_value('font-size-adjust', 'cap-height none from-font');
+test_invalid_value('font-size-adjust', 'ic-height none from-font');
+test_invalid_value('font-size-adjust', 'ic-width none from-font');
+test_invalid_value('font-size-adjust', 'ch-width none from-font');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-size-adjust-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-size-adjust-valid.html
new file mode 100644
index 0000000000..cb3c367c6f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-size-adjust-valid.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 5: parsing font-size-adjust with valid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-5/#font-size-adjust-prop">
+<meta name="assert" content="font-size-adjust supports the full grammar 'none | [metric]? [from-font | <number>]'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value('font-size-adjust', 'none');
+
+test_valid_value('font-size-adjust', '0.5');
+test_valid_value('font-size-adjust', 'ex-height 0.5', '0.5'); // default basis 'ex' omitted from serialization
+test_valid_value('font-size-adjust', 'cap-height 0.8');
+test_valid_value('font-size-adjust', 'ch-width 0.4');
+test_valid_value('font-size-adjust', 'ic-width 0.9');
+test_valid_value('font-size-adjust', 'ic-height 0.9');
+
+test_valid_value('font-size-adjust', 'from-font');
+test_valid_value('font-size-adjust', 'ex-height from-font', 'from-font'); // default basis 'ex' omitted from serialization
+test_valid_value('font-size-adjust', 'cap-height from-font');
+test_valid_value('font-size-adjust', 'ch-width from-font');
+test_valid_value('font-size-adjust', 'ic-width from-font');
+test_valid_value('font-size-adjust', 'ic-height from-font');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-size-computed.html b/testing/web-platform/tests/css/css-fonts/parsing/font-size-computed.html
new file mode 100644
index 0000000000..3a98c75c25
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-size-computed.html
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: getComputedStyle().fontSize</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-size-prop">
+<meta name="assert" content="font-size computed value is an absolute length.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+<style>
+ #container {
+ font-size: 40px;
+ }
+</style>
+</head>
+<body>
+<div id="container">
+ <div id="target"></div>
+</div>
+<font id="reference"></font>
+<script>
+function test_relative_size(first, second) {
+ test(() => {
+ const target = document.getElementById('target');
+ target.style.fontSize = first;
+ const firstResult = Number(getComputedStyle(target).fontSize.replace('px', ''));
+ target.style.fontSize = second;
+ const secondResult = Number(getComputedStyle(target).fontSize.replace('px', ''));
+ assert_less_than_equal(firstResult, secondResult);
+ }, first + ' <= ' + second);
+}
+
+test_relative_size('xx-small', 'x-small');
+test_relative_size('x-small', 'small');
+test_relative_size('small', 'medium');
+test_relative_size('medium', 'large');
+test_relative_size('large', 'x-large');
+test_relative_size('x-large', 'xx-large');
+// Added in Fonts level 4: https://github.com/w3c/csswg-drafts/issues/3907
+test_relative_size('xx-large', 'xxx-large');
+
+// <relative-size>
+test_relative_size('inherit', 'larger');
+test_relative_size('smaller', 'inherit');
+
+// <length-percentage>
+test_computed_value('font-size', '10px');
+test_computed_value('font-size', '20%', '8px');
+test_computed_value('font-size', 'calc(30% - 40px)', '0px');
+test_computed_value('font-size', 'calc(30% + 40px)', '52px');
+test_computed_value('font-size', 'calc(10px - 0.5em)', '0px');
+test_computed_value('font-size', 'calc(10px + 0.5em)', '30px');
+
+function test_font_size(attribute, keyword) {
+ test(() => {
+ const reference = document.getElementById('reference');
+ reference.setAttribute('size', attribute);
+ const target = document.getElementById('target');
+ target.style.fontSize = keyword;
+ assert_equals(getComputedStyle(target).fontSize, getComputedStyle(reference).fontSize);
+ }, '<font size="' + attribute + '"> is font-size: ' + keyword);
+}
+
+test_font_size('2', 'small');
+test_font_size('3', 'medium');
+test_font_size('4', 'large');
+test_font_size('5', 'x-large');
+test_font_size('6', 'xx-large');
+test_font_size('7', 'xxx-large');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-size-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-size-invalid.html
new file mode 100644
index 0000000000..b3bccc289f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-size-invalid.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: parsing font-size with invalid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-size-prop">
+<meta name="assert" content="font-size supports only the grammar '<absolute-size> | <relative-size> | <length-percentage>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value('font-size', 'auto');
+test_invalid_value('font-size', 'medium small');
+
+test_invalid_value('font-size', '-10px');
+test_invalid_value('font-size', '-20%');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-size-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-size-valid.html
new file mode 100644
index 0000000000..72cf605302
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-size-valid.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing font-size with valid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-size-prop">
+<meta name="assert" content="font-size supports the full grammar '<absolute-size> | <relative-size> | <length-percentage>'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+// <absolute-size>
+test_valid_value('font-size', 'xx-small');
+test_valid_value('font-size', 'x-small');
+test_valid_value('font-size', 'small');
+test_valid_value('font-size', 'medium');
+test_valid_value('font-size', 'large');
+test_valid_value('font-size', 'x-large');
+test_valid_value('font-size', 'xx-large');
+// Added in Fonts level 4: https://github.com/w3c/csswg-drafts/issues/3907
+test_valid_value('font-size', 'xxx-large');
+
+// <relative-size>
+test_valid_value('font-size', 'larger');
+test_valid_value('font-size', 'smaller');
+
+// <length-percentage>
+test_valid_value('font-size', '10px');
+test_valid_value('font-size', '20%');
+test_valid_value('font-size', 'calc(30% - 40px)');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-stretch-computed.html b/testing/web-platform/tests/css/css-fonts/parsing/font-stretch-computed.html
new file mode 100644
index 0000000000..9d1136ef69
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-stretch-computed.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: getComputedStyle().fontStretch</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-stretch-prop">
+<meta name="assert" content="font-stretch computed value is a percentage.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value('font-stretch', 'ultra-condensed', '50%');
+test_computed_value('font-stretch', 'extra-condensed', '62.5%');
+test_computed_value('font-stretch', 'condensed', '75%');
+test_computed_value('font-stretch', 'semi-condensed', '87.5%');
+test_computed_value('font-stretch', 'normal', '100%');
+test_computed_value('font-stretch', 'semi-expanded', '112.5%');
+test_computed_value('font-stretch', 'expanded', '125%');
+test_computed_value('font-stretch', 'extra-expanded', '150%');
+test_computed_value('font-stretch', 'ultra-expanded', '200%');
+
+test_computed_value('font-stretch', '234.5%');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-stretch-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-stretch-invalid.html
new file mode 100644
index 0000000000..9ff8fa5dcf
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-stretch-invalid.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing font-stretch with invalid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-stretch-prop">
+<meta name="assert" content="font-stretch supports only the grammar 'normal | <percentage> | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded'.">
+<meta name="assert" content="Values less than 0% are invalid.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value('font-stretch', 'auto');
+test_invalid_value('font-stretch', 'normal, ultra-condensed');
+test_invalid_value('font-stretch', 'condensed expanded');
+test_invalid_value('font-stretch', '-50%');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-stretch-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-stretch-valid.html
new file mode 100644
index 0000000000..38452c2699
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-stretch-valid.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing font-stretch with valid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-stretch-prop">
+<meta name="assert" content="font-stretch supports the full grammar 'normal | <percentage> | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value('font-stretch', 'normal');
+test_valid_value('font-stretch', 'ultra-condensed');
+test_valid_value('font-stretch', 'extra-condensed');
+test_valid_value('font-stretch', 'condensed');
+test_valid_value('font-stretch', 'semi-condensed');
+test_valid_value('font-stretch', 'semi-expanded');
+test_valid_value('font-stretch', 'expanded');
+test_valid_value('font-stretch', 'extra-expanded');
+test_valid_value('font-stretch', 'ultra-expanded');
+
+test_valid_value('font-stretch', '234.5%');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-style-computed.html b/testing/web-platform/tests/css/css-fonts/parsing/font-style-computed.html
new file mode 100644
index 0000000000..46074c4219
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-style-computed.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: getComputedStyle().fontStyle</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-style-prop">
+<meta name="assert" content="font-style computed value is as specified.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+ #target {
+ font-family: Ahem;
+ }
+</style>
+</head>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value('font-style', 'normal');
+test_computed_value('font-style', 'italic');
+test_computed_value('font-style', 'oblique');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-style-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-style-invalid.html
new file mode 100644
index 0000000000..4542c29cf2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-style-invalid.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: parsing font-style with invalid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-style-prop">
+<meta name="assert" content="font-style supports only the grammar 'normal | italic | oblique'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value('font-style', 'auto');
+test_invalid_value('font-style', 'italic oblique');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-style-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-style-valid.html
new file mode 100644
index 0000000000..b61864478b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-style-valid.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: parsing font-style with valid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-style-prop">
+<meta name="assert" content="font-style supports the full grammar 'normal | italic | oblique'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value('font-style', 'normal');
+test_valid_value('font-style', 'italic');
+test_valid_value('font-style', 'oblique');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-computed.html b/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-computed.html
new file mode 100644
index 0000000000..b7f121c067
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-computed.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module: getComputedStyle().fontSynthesis</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-synthesis">
+<meta name="assert" content="font-synthesis computed value is as specified.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value('font-synthesis', 'none');
+test_computed_value('font-synthesis', 'weight');
+test_computed_value('font-synthesis', 'style');
+test_computed_value('font-synthesis', 'small-caps');
+test_computed_value('font-synthesis', 'position');
+test_computed_value('font-synthesis', 'small-caps position');
+test_computed_value('font-synthesis', 'style small-caps');
+test_computed_value('font-synthesis', 'style position');
+test_computed_value('font-synthesis', 'style small-caps position');
+test_computed_value('font-synthesis', 'weight small-caps');
+test_computed_value('font-synthesis', 'weight style');
+test_computed_value('font-synthesis', 'weight position');
+test_computed_value('font-synthesis', 'weight style small-caps');
+test_computed_value('font-synthesis', 'weight style small-caps position');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-invalid.html
new file mode 100644
index 0000000000..e68c07bcba
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-invalid.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module: parsing font-synthesis with invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-synthesis">
+<meta name="assert" content="font-synthesis supports only the grammar 'none | [ weight || style || small-caps || position ]'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value('font-synthesis', 'auto');
+test_invalid_value('font-synthesis', 'none weight');
+test_invalid_value('font-synthesis', 'none style');
+test_invalid_value('font-synthesis', 'none position');
+test_invalid_value('font-synthesis', 'style none');
+test_invalid_value('font-synthesis', 'none small-caps');
+test_invalid_value('font-synthesis', 'small-caps none');
+test_invalid_value('font-synthesis', 'position none');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-position-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-position-invalid.html
new file mode 100644
index 0000000000..57d6870b31
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-position-invalid.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing font-synthesis-position with invalid values</title>
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/7441">
+<meta name="assert" content="font-synthesis-position supports only the grammar 'auto | none'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value('font-synthesis-position', 'normal');
+test_invalid_value('font-synthesis-position', 'auto none');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-position-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-position-valid.html
new file mode 100644
index 0000000000..e95b8ecdec
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-position-valid.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing font-synthesis-position with valid values</title>
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/7441">
+<meta name="assert" content="font-synthesis-position supports the full grammar 'auto | none'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value('font-synthesis-position', 'auto');
+test_valid_value('font-synthesis-position', 'none');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-small-caps-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-small-caps-invalid.html
new file mode 100644
index 0000000000..aa0e3e4029
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-small-caps-invalid.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing font-synthesis-small-caps with invalid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-synthesis-small-caps">
+<meta name="assert" content="font-synthesis-small-caps supports only the grammar 'auto | none'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value('font-synthesis-small-caps', 'normal');
+test_invalid_value('font-synthesis-small-caps', 'auto none');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-small-caps-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-small-caps-valid.html
new file mode 100644
index 0000000000..064fc88161
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-small-caps-valid.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing font-synthesis-small-caps with valid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-synthesis-small-caps">
+<meta name="assert" content="font-synthesis-small-caps supports the full grammar 'auto | none'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value('font-synthesis-small-caps', 'auto');
+test_valid_value('font-synthesis-small-caps', 'none');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-style-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-style-invalid.html
new file mode 100644
index 0000000000..e0fc0f4a2a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-style-invalid.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing font-synthesis-style with invalid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-synthesis-style">
+<meta name="assert" content="font-synthesis-style supports only the grammar 'auto | none'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value('font-synthesis-style', 'normal');
+test_invalid_value('font-synthesis-style', 'auto none');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-style-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-style-valid.html
new file mode 100644
index 0000000000..5b1c01561a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-style-valid.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing font-synthesis-style with valid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-synthesis-style">
+<meta name="assert" content="font-synthesis-style supports the full grammar 'auto | none'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value('font-synthesis-style', 'auto');
+test_valid_value('font-synthesis-style', 'none');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-valid.html
new file mode 100644
index 0000000000..84663e8a3e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-valid.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module: parsing font-synthesis with valid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-synthesis">
+<meta name="assert" content="font-synthesis supports the full grammar 'none | [ weight || style || small-caps || position]'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value('font-synthesis', 'none');
+test_valid_value('font-synthesis', 'weight');
+test_valid_value('font-synthesis', 'style');
+test_valid_value('font-synthesis', 'small-caps');
+test_valid_value('font-synthesis', 'position');
+test_valid_value('font-synthesis', 'style weight', 'weight style');
+test_valid_value('font-synthesis', 'small-caps weight', 'weight small-caps');
+test_valid_value('font-synthesis', 'small-caps style', 'style small-caps');
+test_valid_value('font-synthesis', 'style weight small-caps', 'weight style small-caps');
+test_valid_value('font-synthesis', 'style small-caps weight ', 'weight style small-caps');
+test_valid_value('font-synthesis', 'small-caps style weight ', 'weight style small-caps');
+test_valid_value('font-synthesis', 'position style', 'style position');
+test_valid_value('font-synthesis', 'position weight style', 'weight style position');
+test_valid_value('font-synthesis', 'position weight small-caps style', 'weight style small-caps position');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-weight-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-weight-invalid.html
new file mode 100644
index 0000000000..292a21ef97
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-weight-invalid.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing font-synthesis-weight with invalid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-synthesis-weight">
+<meta name="assert" content="font-synthesis-weight supports only the grammar 'auto | none'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value('font-synthesis-weight', 'normal');
+test_invalid_value('font-synthesis-weight', 'auto none');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-weight-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-weight-valid.html
new file mode 100644
index 0000000000..8a70fa4fd3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-synthesis-weight-valid.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing font-synthesis-weight with valid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-synthesis-weight">
+<meta name="assert" content="font-synthesis-weight supports the full grammar 'auto | none'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value('font-synthesis-weight', 'auto');
+test_valid_value('font-synthesis-weight', 'none');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-valid.html
new file mode 100644
index 0000000000..896be89741
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-valid.html
@@ -0,0 +1,205 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing font with valid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-prop">
+<meta name="assert" content="font supports the full grammar '[ [ <'font-style'> || <font-variant-css2> || <'font-weight'> || <font-stretch-css3> ]? <'font-size'> [ / <'line-height'> ]? <'font-family'> ] | caption | icon | menu | message-box | small-caption | status-bar'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+'use strict';
+
+// Firefox and Edge 18 serialize these as supplied.
+// Blink and Safari have implementation-dependent or platform-dependent serializations.
+function test_system_font(keyword) {
+ test(() => {
+ const target = document.getElementById('target');
+ const previousValue = 'italic xx-large/0px fantasy';
+ target.style.font = previousValue;
+ target.style.font = keyword;
+ const readValue = target.style.getPropertyValue('font');
+ assert_not_equals(readValue, '', 'font should be set');
+ assert_not_equals(readValue, previousValue, 'font should be updated');
+ target.style.font = previousValue;
+ target.style.font = readValue;
+ assert_equals(target.style.getPropertyValue('font'), readValue, "serialization should round-trip");
+ }, keyword + ' should be a supported system font.');
+}
+
+test_system_font('caption');
+test_system_font('icon');
+test_system_font('menu');
+test_system_font('message-box');
+test_system_font('small-caption');
+test_system_font('status-bar');
+
+// values other than normal
+const generate_style = (() => {
+ const alternatives = [
+ 'italic',
+ 'oblique'
+ ];
+ let counter = 0;
+ return () => alternatives[counter++ % alternatives.length];
+})();
+
+// value other than normal
+const generate_variant = () => 'small-caps';
+
+// values other than normal
+const generate_weight = (() => {
+ const alternatives = [
+ 'bold',
+ 'bolder',
+ 'lighter',
+ '100',
+ '900'
+ ];
+ let counter = 0;
+ return () => alternatives[counter++ % alternatives.length];
+})();
+
+// values other than normal
+const generate_stretch = (() => {
+ const alternatives = [
+ 'ultra-condensed',
+ 'extra-condensed',
+ 'condensed',
+ 'semi-condensed',
+ 'semi-expanded',
+ 'expanded',
+ 'extra-expanded',
+ 'ultra-expanded'
+ ];
+ let counter = 0;
+ return () => alternatives[counter++ % alternatives.length];
+})();
+
+const generate_size = (() => {
+ const alternatives = [
+ // <absolute-size>
+ 'xx-small',
+ 'medium',
+ 'xx-large',
+
+ // <relative-size>
+ 'larger',
+ 'smaller',
+
+ // <length-percentage>
+ '10px',
+ '20%',
+ 'calc(30% - 40px)',
+ ];
+ let counter = 0;
+ return () => alternatives[counter++ % alternatives.length];
+})();
+
+const generate_line_height = (() => {
+ const alternatives = [
+ null,
+ 'normal',
+ '1.2',
+ 'calc(120% + 1.2em)'
+ ];
+ let counter = 0;
+ return () => alternatives[counter++ % alternatives.length];
+})();
+
+const generate_family = (() => {
+ const alternatives = [
+ 'serif',
+ 'sans-serif',
+ 'cursive',
+ 'fantasy',
+ 'monospace',
+ 'Menu',
+ '"FB Armada"'
+ ];
+ let counter = 0;
+ return () => alternatives[counter++ % alternatives.length];
+})();
+
+function test_specific(prefix) {
+ let parts = [];
+ let canonical = [];
+ let style = null;
+ let variant = null;
+ let weight = null;
+ let stretch = null;
+ for (let entry of prefix) {
+ if (entry === 'style') {
+ style = generate_style();
+ parts.push(style);
+ } else if (entry === 'variant') {
+ variant = generate_variant();
+ parts.push(variant);
+ } else if (entry === 'weight') {
+ weight = generate_weight();
+ parts.push(weight);
+ } else if (entry === 'stretch') {
+ stretch = generate_stretch();
+ parts.push(stretch);
+ } else {
+ // normal
+ parts.push('normal');
+ }
+ }
+
+ if (style)
+ canonical.push(style);
+ if (variant)
+ canonical.push(variant);
+ if (weight)
+ canonical.push(weight);
+ if (stretch)
+ canonical.push(stretch);
+
+ const size = generate_size();
+ const lineHeight = generate_line_height();
+ if (lineHeight) {
+ parts.push(size + '/' + lineHeight);
+ if (lineHeight === 'normal')
+ canonical.push(size);
+ else
+ canonical.push(size + ' / ' + lineHeight);
+ } else {
+ parts.push(size);
+ canonical.push(size);
+ }
+
+ const family = generate_family();
+ parts.push(family);
+ canonical.push(family);
+
+ test_valid_value('font', parts.join(' '), canonical.join(' '));
+}
+
+function test_various(prefix) {
+ test_specific(prefix);
+ if (prefix.length === 4)
+ return;
+
+ const alternatives = [
+ 'normal',
+ 'style',
+ 'variant',
+ 'weight',
+ 'stretch'
+ ];
+ for (let alternative of alternatives) {
+ if (alternative === 'normal' || !prefix.includes(alternative))
+ test_various(prefix.concat(alternative));
+ // else we would have two styles or two variants, etc.
+ }
+}
+
+test_various([]);
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variant-alternates-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-alternates-invalid.html
new file mode 100644
index 0000000000..8cd17d0849
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-alternates-invalid.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8" />
+ <title>
+ CSS Fonts Module Level 4: parsing font-variant-alternates with invalid values
+ </title>
+ <link
+ rel="help"
+ href="https://drafts.csswg.org/css-fonts-4/#propdef-font-variant-alternates"
+ />
+ <meta
+ name="assert"
+ content="font-variant-alternates supports only the grammar normal | [ stylistic(<feature-value-name>) || historical-forms || styleset(<feature-value-name>#) || character-variant(<feature-value-name>#) || swash(<feature-value-name>) || ornaments(<feature-value-name>) || annotation(<feature-value-name>) ]"
+ />
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/css/support/parsing-testcommon.js"></script>
+ </head>
+ <body>
+ <script>
+ test_invalid_value(
+ "font-variant-alternates",
+ "swash(several,different,aliases)"
+ );
+ test_invalid_value("font-variant-alternates", "stylistic(more,than,one)");
+ test_invalid_value("font-variant-alternates", "ornaments(more,than,one)");
+ test_invalid_value("font-variant-alternates", "swash(more,than,one)");
+ test_invalid_value(
+ "font-variant-alternates",
+ "annotation(more,than,one)"
+ );
+ test_invalid_value(
+ "font-variant-alternates",
+ "historical-forms(argument)"
+ );
+ test_invalid_value("font-variant-alternates", "annotation()");
+ test_invalid_value("font-variant-alternates", "annotation");
+ test_invalid_value("font-variant-alternates", "swash");
+ test_invalid_value("font-variant-alternates", "ornaments stylistic");
+ test_invalid_value("font-variant-alternates", "swash(one) swash(two)");
+ test_invalid_value(
+ "font-variant-alternates",
+ "unkown(one) myfunction(two)"
+ );
+ test_invalid_value(
+ "font-variant-alternates",
+ "styleset(thisone) styleset(something,else)"
+ );
+ test_invalid_value(
+ "font-variant-alternates",
+ "swash(foo) swash(bar)"
+ );
+ test_invalid_value("font-variant-alternates", "ornaments(one historical-forms");
+ </script>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variant-alternates-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-alternates-valid.html
new file mode 100644
index 0000000000..43cc6f5244
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-alternates-valid.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8" />
+ <title>
+ CSS Fonts Module Level 4: parsing font-variant-alternates with valid
+ values
+ </title>
+ <link
+ rel="help"
+ href="https://drafts.csswg.org/css-fonts-4/#propdef-font-variant-alternates"
+ />
+ <meta
+ name="assert"
+ content="font-variant-alternates supports only the grammar normal | [ stylistic(<feature-value-name>) || historical-forms || styleset(<feature-value-name>#) || character-variant(<feature-value-name>#) || swash(<feature-value-name>) || ornaments(<feature-value-name>) || annotation(<feature-value-name>) ]"
+ />
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/css/support/parsing-testcommon.js"></script>
+ </head>
+ <body>
+ <script>
+ test_valid_value(
+ "font-variant-alternates",
+ "character-variant(more, than, one)"
+ );
+ test_valid_value("font-variant-alternates", "styleset(more, than, one)");
+ test_valid_value(
+ "font-variant-alternates",
+ "styleset(more, than, one) character-variant(more, than, one)"
+ );
+ </script>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variant-caps-computed.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-caps-computed.html
new file mode 100644
index 0000000000..01b890df20
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-caps-computed.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: getComputedStyle().fontVariantCaps</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-caps-prop">
+<meta name="assert" content="font-variant-caps computed value is as specified.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value('font-variant-caps', 'normal');
+test_computed_value('font-variant-caps', 'small-caps');
+test_computed_value('font-variant-caps', 'all-small-caps');
+test_computed_value('font-variant-caps', 'petite-caps');
+test_computed_value('font-variant-caps', 'all-petite-caps');
+test_computed_value('font-variant-caps', 'unicase');
+test_computed_value('font-variant-caps', 'titling-caps');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variant-caps-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-caps-invalid.html
new file mode 100644
index 0000000000..4c538ad5eb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-caps-invalid.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: parsing font-variant-caps with invalid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-caps-prop">
+<meta name="assert" content="font-variant-caps supports only the grammar 'normal | small-caps | all-small-caps | petite-caps | all-petite-caps | unicase | titling-caps'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value('font-variant-caps', 'auto');
+test_invalid_value('font-variant-caps', 'normal unicase');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variant-caps-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-caps-valid.html
new file mode 100644
index 0000000000..f34595a9f2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-caps-valid.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: parsing font-variant-caps with valid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-caps-prop">
+<meta name="assert" content="font-variant-caps supports the full grammar 'normal | small-caps | all-small-caps | petite-caps | all-petite-caps | unicase | titling-caps'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value('font-variant-caps', 'normal');
+test_valid_value('font-variant-caps', 'small-caps');
+test_valid_value('font-variant-caps', 'all-small-caps');
+test_valid_value('font-variant-caps', 'petite-caps');
+test_valid_value('font-variant-caps', 'all-petite-caps');
+test_valid_value('font-variant-caps', 'unicase');
+test_valid_value('font-variant-caps', 'titling-caps');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variant-east-asian-computed.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-east-asian-computed.html
new file mode 100644
index 0000000000..5f820cd386
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-east-asian-computed.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: getComputedStyle().fontVariantEastAsian</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-east-asian-prop">
+<meta name="assert" content="font-variant-east-asian computed value is as specified.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value('font-variant-east-asian', 'normal');
+
+// <east-asian-variant-values> = [ jis78 | jis83 | jis90 | jis04 | simplified | traditional ]
+test_computed_value('font-variant-east-asian', 'jis78');
+test_computed_value('font-variant-east-asian', 'jis83');
+test_computed_value('font-variant-east-asian', 'jis90');
+test_computed_value('font-variant-east-asian', 'jis04');
+test_computed_value('font-variant-east-asian', 'simplified');
+test_computed_value('font-variant-east-asian', 'traditional');
+
+// <east-asian-width-values> = [ full-width | proportional-width ]
+test_computed_value('font-variant-east-asian', 'full-width');
+test_computed_value('font-variant-east-asian', 'proportional-width');
+
+test_computed_value('font-variant-east-asian', 'ruby');
+
+test_computed_value('font-variant-east-asian', 'jis78 proportional-width');
+test_computed_value('font-variant-east-asian', 'simplified full-width ruby');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variant-east-asian-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-east-asian-invalid.html
new file mode 100644
index 0000000000..c61a4b9b13
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-east-asian-invalid.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: parsing font-variant-east-asian with invalid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-east-asian-prop">
+<meta name="assert" content="font-variant-east-asian supports only the grammar 'normal | [ <east-asian-variant-values> || <east-asian-width-values> || ruby ]'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value('font-variant-east-asian', 'normal ruby');
+
+test_invalid_value('font-variant-east-asian', 'jis78 jis83');
+
+test_invalid_value('font-variant-east-asian', 'full-width proportional-width');
+
+test_invalid_value('font-variant-east-asian', 'normal garbage');
+test_invalid_value('font-variant-east-asian', 'normal none');
+test_invalid_value('font-variant-east-asian', 'normal 30px');
+
+test_invalid_value('font-variant-east-asian', 'full-width garbage');
+test_invalid_value('font-variant-east-asian', 'full-width none');
+test_invalid_value('font-variant-east-asian', 'full-width 30px');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variant-east-asian-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-east-asian-valid.html
new file mode 100644
index 0000000000..0f16ceccfe
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-east-asian-valid.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: parsing font-variant-east-asian with valid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-east-asian-prop">
+<meta name="assert" content="font-variant-east-asian supports the full grammar 'normal | [ <east-asian-variant-values> || <east-asian-width-values> || ruby ]'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value('font-variant-east-asian', 'normal');
+
+// <east-asian-variant-values> = [ jis78 | jis83 | jis90 | jis04 | simplified | traditional ]
+test_valid_value('font-variant-east-asian', 'jis78');
+test_valid_value('font-variant-east-asian', 'jis83');
+test_valid_value('font-variant-east-asian', 'jis90');
+test_valid_value('font-variant-east-asian', 'jis04');
+test_valid_value('font-variant-east-asian', 'simplified');
+test_valid_value('font-variant-east-asian', 'traditional');
+
+// <east-asian-width-values> = [ full-width | proportional-width ]
+test_valid_value('font-variant-east-asian', 'full-width');
+test_valid_value('font-variant-east-asian', 'proportional-width');
+
+test_valid_value('font-variant-east-asian', 'ruby');
+
+test_valid_value('font-variant-east-asian', 'jis78 proportional-width');
+test_valid_value('font-variant-east-asian', 'ruby full-width simplified', 'simplified full-width ruby');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variant-emoji-computed.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-emoji-computed.html
new file mode 100644
index 0000000000..5d24a1dfee
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-emoji-computed.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: getComputedStyle().fontVariantEmoji</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-variant-emoji-prop">
+<meta name="assert" content="font-variant-emoji computed value is as specified.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value('font-variant-emoji', 'normal');
+test_computed_value('font-variant-emoji', 'text');
+test_computed_value('font-variant-emoji', 'emoji');
+test_computed_value('font-variant-emoji', 'unicode');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variant-emoji-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-emoji-invalid.html
new file mode 100644
index 0000000000..afbf2c4878
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-emoji-invalid.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing font-variant-emoji with invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-variant-emoji-prop">
+<meta name="assert" content="font-variant-emoji supports only the grammar 'normal | text | emoji | unicode'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value('font-variant-emoji', 'auto');
+test_invalid_value('font-variant-emoji', 'none');
+test_invalid_value('font-variant-emoji', 'color');
+test_invalid_value('font-variant-emoji', 'normal text');
+test_invalid_value('font-variant-emoji', 'text emoji');
+test_invalid_value('font-variant-emoji', 'normal, unicode');
+test_invalid_value('font-variant-emoji', 'unicode, emoji');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variant-emoji-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-emoji-valid.html
new file mode 100644
index 0000000000..f3bf80bb52
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-emoji-valid.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing font-variant-emoji with valid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-variant-emoji-prop">
+<meta name="assert" content="font-variant-emoji supports the full grammar 'normal | text | emoji | unicode'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value('font-variant-emoji', 'normal');
+test_valid_value('font-variant-emoji', 'text');
+test_valid_value('font-variant-emoji', 'emoji');
+test_valid_value('font-variant-emoji', 'unicode');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variant-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-invalid.html
new file mode 100644
index 0000000000..93c7d6bb56
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-invalid.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing font-variant with invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#propdef-font-variant">
+<meta name="assert" content="font-variant supports only the grammar 'normal | none | [ <common-lig-values> || <discretionary-lig-values> || <historical-lig-values> || <contextual-alt-values> || [ small-caps | all-small-caps | petite-caps | all-petite-caps | unicase | titling-caps ] || [ stylistic(<feature-value-name>) || historical-forms || styleset(<feature-value-name>#) || character-variant(<feature-value-name>#) || swash(<feature-value-name>) || ornaments(<feature-value-name>) || annotation(<feature-value-name>) ] || <numeric-figure-values> || <numeric-spacing-values> || <numeric-fraction-values> || ordinal || slashed-zero || <east-asian-variant-values> || <east-asian-width-values> || ruby || [ sub | super ] ]'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value('font-variant', 'normal none');
+test_invalid_value('font-variant', 'none normal');
+test_invalid_value('font-variant', 'small-caps normal');
+test_invalid_value('font-variant', 'normal small-caps');
+test_invalid_value('font-variant', 'small-caps none');
+test_invalid_value('font-variant', 'none small-caps');
+
+// <common-lig-values>
+test_invalid_value('font-variant', 'common-ligatures no-common-ligatures');
+
+// <discretionary-lig-values>
+test_invalid_value('font-variant', 'discretionary-ligatures no-discretionary-ligatures');
+
+// <historical-lig-values>
+test_invalid_value('font-variant', 'historical-ligatures no-historical-ligatures');
+
+// <contextual-alt-values>
+test_invalid_value('font-variant', 'contextual no-contextual');
+
+// [ small-caps | all-small-caps | petite-caps | all-petite-caps | unicase | titling-caps ]
+test_invalid_value('font-variant', 'small-caps all-small-caps');
+
+// [ stylistic(<feature-value-name>) || historical-forms || styleset(<feature-value-name>#) || character-variant(<feature-value-name>#) || swash(<feature-value-name>) || ornaments(<feature-value-name>) || annotation(<feature-value-name>) ]
+test_invalid_value('font-variant', 'stylistic(flowing) stylistic(flowing)');
+
+// <numeric-figure-values>
+test_invalid_value('font-variant', 'lining-nums oldstyle-nums');
+
+// <numeric-spacing-values>
+test_invalid_value('font-variant', 'proportional-nums tabular-nums');
+
+// <numeric-fraction-values>
+test_invalid_value('font-variant', 'diagonal-fractions stacked-fractions');
+
+// ordinal
+test_invalid_value('font-variant', 'ordinal slashed-zero ordinal');
+
+// slashed-zero
+test_invalid_value('font-variant', 'slashed-zero jis78 slashed-zero');
+
+// <east-asian-variant-values>
+test_invalid_value('font-variant', 'jis78 jis83');
+
+// <east-asian-width-values>
+test_invalid_value('font-variant', 'full-width proportional-width');
+
+// ruby
+test_invalid_value('font-variant', 'ruby sub ruby');
+
+// [ sub | super ]
+test_invalid_value('font-variant', 'sub super');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variant-ligatures-computed.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-ligatures-computed.html
new file mode 100644
index 0000000000..a9dfac54e9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-ligatures-computed.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: getComputedStyle().fontVariantLigatures</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-ligatures-prop">
+<meta name="assert" content="font-variant-ligatures computed value is as specified.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value('font-variant-ligatures', 'normal');
+test_computed_value('font-variant-ligatures', 'none');
+
+// <common-lig-values> = [ common-ligatures | no-common-ligatures ]
+test_computed_value('font-variant-ligatures', 'common-ligatures');
+test_computed_value('font-variant-ligatures', 'no-common-ligatures');
+
+// <discretionary-lig-values> = [ discretionary-ligatures | no-discretionary-ligatures ]
+test_computed_value('font-variant-ligatures', 'discretionary-ligatures');
+test_computed_value('font-variant-ligatures', 'no-discretionary-ligatures');
+
+// <historical-lig-values> = [ historical-ligatures | no-historical-ligatures ]
+test_computed_value('font-variant-ligatures', 'historical-ligatures');
+test_computed_value('font-variant-ligatures', 'no-historical-ligatures');
+
+// <contextual-alt-values> = [ contextual | no-contextual ]
+test_computed_value('font-variant-ligatures', 'contextual');
+test_computed_value('font-variant-ligatures', 'no-contextual');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variant-ligatures-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-ligatures-invalid.html
new file mode 100644
index 0000000000..69af66b9b0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-ligatures-invalid.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: parsing font-variant-ligatures with invalid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-ligatures-prop">
+<meta name="assert" content="font-variant-ligatures supports only the grammar 'normal | none | [ <common-lig-values> || <discretionary-lig-values> || <historical-lig-values> || <contextual-alt-values> ]'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value('font-variant-ligatures', 'none normal');
+
+test_invalid_value('font-variant-ligatures', 'normal common-ligatures');
+
+test_invalid_value('font-variant-ligatures', 'common-ligatures no-common-ligatures');
+
+test_invalid_value('font-variant-ligatures', 'discretionary-ligatures no-discretionary-ligatures');
+
+test_invalid_value('font-variant-ligatures', 'historical-ligatures no-historical-ligatures');
+
+test_invalid_value('font-variant-ligatures', 'contextual no-contextual');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variant-ligatures-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-ligatures-valid.html
new file mode 100644
index 0000000000..2fdd99e226
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-ligatures-valid.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: parsing font-variant-ligatures with valid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-ligatures-prop">
+<meta name="assert" content="font-variant-ligatures supports the full grammar 'normal | none | [ <common-lig-values> || <discretionary-lig-values> || <historical-lig-values> || <contextual-alt-values> ]'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value('font-variant-ligatures', 'normal');
+test_valid_value('font-variant-ligatures', 'none');
+
+// <common-lig-values> = [ common-ligatures | no-common-ligatures ]
+test_valid_value('font-variant-ligatures', 'common-ligatures');
+test_valid_value('font-variant-ligatures', 'no-common-ligatures');
+
+// <discretionary-lig-values> = [ discretionary-ligatures | no-discretionary-ligatures ]
+test_valid_value('font-variant-ligatures', 'discretionary-ligatures');
+test_valid_value('font-variant-ligatures', 'no-discretionary-ligatures');
+
+// <historical-lig-values> = [ historical-ligatures | no-historical-ligatures ]
+test_valid_value('font-variant-ligatures', 'historical-ligatures');
+test_valid_value('font-variant-ligatures', 'no-historical-ligatures');
+
+// <contextual-alt-values> = [ contextual | no-contextual ]
+test_valid_value('font-variant-ligatures', 'contextual');
+test_valid_value('font-variant-ligatures', 'no-contextual');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variant-numeric-computed.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-numeric-computed.html
new file mode 100644
index 0000000000..ae3fbecefe
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-numeric-computed.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: getComputedStyle().fontVariantNumeric</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-numeric-prop">
+<meta name="assert" content="font-variant-numeric computed value is as specified.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value('font-variant-numeric', 'normal');
+
+// <numeric-figure-values> = [ lining-nums | oldstyle-nums ]
+test_computed_value('font-variant-numeric', 'lining-nums');
+test_computed_value('font-variant-numeric', 'oldstyle-nums');
+
+// <numeric-spacing-values> = [ proportional-nums | tabular-nums ]
+test_computed_value('font-variant-numeric', 'proportional-nums');
+test_computed_value('font-variant-numeric', 'tabular-nums');
+
+// <numeric-fraction-values> = [ diagonal-fractions | stacked-fractions ]
+test_computed_value('font-variant-numeric', 'diagonal-fractions');
+test_computed_value('font-variant-numeric', 'stacked-fractions');
+
+test_computed_value('font-variant-numeric', 'ordinal');
+
+test_computed_value('font-variant-numeric', 'slashed-zero');
+
+test_computed_value('font-variant-numeric', 'oldstyle-nums tabular-nums diagonal-fractions');
+
+test_computed_value('font-variant-numeric', 'lining-nums proportional-nums stacked-fractions ordinal slashed-zero');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variant-numeric-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-numeric-invalid.html
new file mode 100644
index 0000000000..97f9e14840
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-numeric-invalid.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: parsing font-variant-numeric with invalid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-numeric-prop">
+<meta name="assert" content="font-variant-numeric supports only the grammar 'normal | [ <numeric-figure-values> || <numeric-spacing-values> || <numeric-fraction-values> || ordinal || slashed-zero ]'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value('font-variant-numeric', 'auto');
+
+test_invalid_value('font-variant-numeric', 'normal lining-nums');
+test_invalid_value('font-variant-numeric', 'lining-nums oldstyle-nums');
+
+test_invalid_value('font-variant-numeric', 'proportional-nums normal');
+test_invalid_value('font-variant-numeric', 'tabular-nums proportional-nums');
+
+test_invalid_value('font-variant-numeric', 'normal diagonal-fractions');
+test_invalid_value('font-variant-numeric', 'diagonal-fractions stacked-fractions');
+
+test_invalid_value('font-variant-numeric', 'ordinal normal');
+
+test_invalid_value('font-variant-numeric', 'normal slashed-zero');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variant-numeric-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-numeric-valid.html
new file mode 100644
index 0000000000..c7a9fd252c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-numeric-valid.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: parsing font-variant-numeric with valid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-numeric-prop">
+<meta name="assert" content="font-variant-numeric supports the full grammar 'normal | [ <numeric-figure-values> || <numeric-spacing-values> || <numeric-fraction-values> || ordinal || slashed-zero ]'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value('font-variant-numeric', 'normal');
+
+// <numeric-figure-values> = [ lining-nums | oldstyle-nums ]
+test_valid_value('font-variant-numeric', 'lining-nums');
+test_valid_value('font-variant-numeric', 'oldstyle-nums');
+
+// <numeric-spacing-values> = [ proportional-nums | tabular-nums ]
+test_valid_value('font-variant-numeric', 'proportional-nums');
+test_valid_value('font-variant-numeric', 'tabular-nums');
+
+// <numeric-fraction-values> = [ diagonal-fractions | stacked-fractions ]
+test_valid_value('font-variant-numeric', 'diagonal-fractions');
+test_valid_value('font-variant-numeric', 'stacked-fractions');
+
+test_valid_value('font-variant-numeric', 'ordinal');
+
+test_valid_value('font-variant-numeric', 'slashed-zero');
+
+test_valid_value('font-variant-numeric', 'oldstyle-nums tabular-nums diagonal-fractions');
+
+// Blink gives "slashed-zero ordinal stacked-fractions proportional-nums lining-nums".
+// Also accept specified order as correct serialization.
+test_valid_value('font-variant-numeric', 'slashed-zero ordinal stacked-fractions proportional-nums lining-nums', ['slashed-zero ordinal stacked-fractions proportional-nums lining-nums', 'lining-nums proportional-nums stacked-fractions ordinal slashed-zero']);
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variant-position-computed.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-position-computed.html
new file mode 100644
index 0000000000..24bac43e79
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-position-computed.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: getComputedStyle().fontVariantPosition</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-position-prop">
+<meta name="assert" content="font-variant-position computed value is as specified.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value('font-variant-position', 'normal');
+test_computed_value('font-variant-position', 'sub');
+test_computed_value('font-variant-position', 'super');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variant-position-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-position-invalid.html
new file mode 100644
index 0000000000..11110ce53b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-position-invalid.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: parsing font-variant-position with invalid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-position-prop">
+<meta name="assert" content="font-variant-position supports only the grammar 'normal | sub | super'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value('font-variant-position', 'auto');
+test_invalid_value('font-variant-position', 'super sub');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variant-position-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-position-valid.html
new file mode 100644
index 0000000000..3887ab0cc4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-position-valid.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: parsing font-variant-position with valid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-variant-position-prop">
+<meta name="assert" content="font-variant-position supports the full grammar 'normal | sub | super'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value('font-variant-position', 'normal');
+test_valid_value('font-variant-position', 'sub');
+test_valid_value('font-variant-position', 'super');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variant-serialization.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-serialization.html
new file mode 100644
index 0000000000..04e4d92681
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-serialization.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: serialization of font-variant</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#propdef-font-variant">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1797146">
+<meta name="assert" content="re-setting font-variant to its serialization should be idempotent">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<div id=target style=""></div>
+<script>
+test(function(){
+ let div = document.getElementById("target");
+ let sty = div.style;
+
+ sty.font = "12px serif";
+ v = sty.fontVariant;
+ assert_in_array(v, ["", "normal"]); // Accept either explicit 'normal' or empty.
+ sty.fontVariant = v;
+ assert_equals(sty.fontVariant, v);
+
+ sty.font = "menu";
+ v = sty.fontVariant;
+ assert_in_array(v, ["", "normal"]);
+
+ sty.font = "12px serif"
+ sty.fontVariantNumeric = "tabular-nums";
+ v = sty.fontVariant;
+ assert_equals(v, "tabular-nums");
+ sty.fontVariant = v;
+ assert_equals(sty.fontVariant, v);
+
+ sty.font = "menu"
+ sty.fontVariantNumeric = "tabular-nums";
+ v = sty.fontVariant;
+ assert_equals(v, "tabular-nums");
+ sty.fontVariant = v;
+ assert_equals(sty.fontVariant, v);
+
+ sty.font = "12px serif"
+ sty.fontVariantNumeric = "tabular-nums";
+ sty.fontVariantCaps = "small-caps";
+ v = sty.fontVariant;
+ sty.fontVariant = v;
+ assert_equals(sty.fontVariant, v);
+
+ sty.font = "menu"
+ sty.fontVariantNumeric = "tabular-nums";
+ sty.fontVariantCaps = "small-caps";
+ v = sty.fontVariant;
+ sty.fontVariant = v;
+ assert_equals(sty.fontVariant, v);
+}, "checking serialized value of font-variant");
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variant-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-valid.html
new file mode 100644
index 0000000000..19d858189a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variant-valid.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing font-variant with valid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#propdef-font-variant">
+<meta name="assert" content="font-variant supports the full grammar 'normal | none | [ <common-lig-values> || <discretionary-lig-values> || <historical-lig-values> || <contextual-alt-values> || [ small-caps | all-small-caps | petite-caps | all-petite-caps | unicase | titling-caps ] || [ stylistic(<feature-value-name>) || historical-forms || styleset(<feature-value-name>#) || character-variant(<feature-value-name>#) || swash(<feature-value-name>) || ornaments(<feature-value-name>) || annotation(<feature-value-name>) ] || <numeric-figure-values> || <numeric-spacing-values> || <numeric-fraction-values> || ordinal || slashed-zero || <east-asian-variant-values> || <east-asian-width-values> || ruby || [ sub | super ] ]'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value('font-variant', 'normal');
+test_valid_value('font-variant', 'none');
+
+// <common-lig-values>
+test_valid_value('font-variant', 'common-ligatures');
+test_valid_value('font-variant', 'no-common-ligatures');
+
+// <discretionary-lig-values>
+test_valid_value('font-variant', 'discretionary-ligatures');
+test_valid_value('font-variant', 'no-discretionary-ligatures');
+
+// <historical-lig-values>
+test_valid_value('font-variant', 'historical-ligatures');
+test_valid_value('font-variant', 'no-historical-ligatures');
+
+// <contextual-alt-values>
+test_valid_value('font-variant', 'contextual');
+test_valid_value('font-variant', 'no-contextual');
+
+// [ small-caps | all-small-caps | petite-caps | all-petite-caps | unicase | titling-caps ]
+test_valid_value('font-variant', 'small-caps');
+test_valid_value('font-variant', 'all-small-caps');
+test_valid_value('font-variant', 'petite-caps');
+test_valid_value('font-variant', 'all-petite-caps');
+test_valid_value('font-variant', 'unicase');
+test_valid_value('font-variant', 'titling-caps');
+
+// [ stylistic(<feature-value-name>) || historical-forms || styleset(<feature-value-name>#) || character-variant(<feature-value-name>#) || swash(<feature-value-name>) || ornaments(<feature-value-name>) || annotation(<feature-value-name>) ]
+test_valid_value('font-variant', 'stylistic(flowing)');
+test_valid_value('font-variant', 'historical-forms');
+test_valid_value('font-variant', 'styleset(flowing)');
+test_valid_value('font-variant', 'character-variant(flowing)');
+test_valid_value('font-variant', 'swash(flowing)');
+test_valid_value('font-variant', 'ornaments(flowing)');
+test_valid_value('font-variant', 'annotation(flowing)');
+
+test_valid_value('font-variant', 'stylistic(flowing) historical-forms styleset(flowing) character-variant(flowing) swash(flowing) ornaments(flowing) annotation(flowing)');
+
+test_valid_value('font-variant', 'annotation(flowing) ornaments(flowing) swash(flowing) character-variant(flowing) styleset(flowing) historical-forms stylistic(flowing)', 'stylistic(flowing) historical-forms styleset(flowing) character-variant(flowing) swash(flowing) ornaments(flowing) annotation(flowing)');
+
+// <numeric-figure-values>
+test_valid_value('font-variant', 'lining-nums');
+test_valid_value('font-variant', 'oldstyle-nums');
+
+// <numeric-spacing-values>
+test_valid_value('font-variant', 'proportional-nums');
+test_valid_value('font-variant', 'tabular-nums');
+
+// <numeric-fraction-values>
+test_valid_value('font-variant', 'diagonal-fractions');
+test_valid_value('font-variant', 'stacked-fractions');
+
+// ordinal
+test_valid_value('font-variant', 'ordinal');
+
+// slashed-zero
+test_valid_value('font-variant', 'slashed-zero');
+
+// <east-asian-variant-values>
+test_valid_value('font-variant', 'jis78');
+test_valid_value('font-variant', 'jis83');
+test_valid_value('font-variant', 'jis90');
+test_valid_value('font-variant', 'jis04');
+test_valid_value('font-variant', 'simplified');
+test_valid_value('font-variant', 'traditional');
+
+// <east-asian-width-values>
+test_valid_value('font-variant', 'full-width');
+test_valid_value('font-variant', 'proportional-width');
+
+// ruby
+test_valid_value('font-variant', 'ruby');
+
+// [ sub | super ]
+test_valid_value('font-variant', 'sub');
+test_valid_value('font-variant', 'super');
+
+
+test_valid_value('font-variant',
+ 'common-ligatures discretionary-ligatures historical-ligatures contextual' +
+ ' small-caps stylistic(flowing) lining-nums proportional-nums diagonal-fractions' +
+ ' ordinal slashed-zero jis78 full-width ruby sub');
+
+test_valid_value('font-variant',
+ 'super proportional-width jis83 stacked-fractions tabular-nums oldstyle-nums historical-forms all-small-caps no-contextual no-historical-ligatures no-discretionary-ligatures no-common-ligatures',
+ [
+ 'no-common-ligatures no-discretionary-ligatures no-historical-ligatures no-contextual all-small-caps historical-forms oldstyle-nums tabular-nums stacked-fractions jis83 proportional-width super',
+ 'no-contextual no-historical-ligatures no-discretionary-ligatures no-common-ligatures all-small-caps historical-forms stacked-fractions tabular-nums oldstyle-nums jis83 proportional-width super'
+ ]
+);
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variation-settings-computed.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variation-settings-computed.html
new file mode 100644
index 0000000000..8e72161193
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variation-settings-computed.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: getComputedStyle().fontVariationSettings</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#propdef-font-variation-settings">
+<meta name="assert" content="font-variation-settings computed value is as specified.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value('font-variation-settings', 'normal');
+
+test_computed_value('font-variation-settings', '"wght" 700');
+test_computed_value('font-variation-settings', '"AB@D" 0.5');
+
+test_computed_value('font-variation-settings', '"wght" 700, "wght" 500', '"wght" 500',
+ "duplicate values should be removed, keeping the rightmost occurrence.");
+
+test_computed_value('font-variation-settings', '"wght" 700, "XHGT" 0.7',
+ ['"wght" 700, "XHGT" 0.7', '"XHGT" 0.7, "wght" 700']);
+
+test_computed_value('font-variation-settings', '"wght" 100, "wdth" 200', '"wdth" 200, "wght" 100',
+ "values should be sorted alphabetically by tag.");
+
+test_computed_value('font-variation-settings', '"wght" 100, "wdth" 200, "wght" 300, "wdth" 400', '"wdth" 400, "wght" 300',
+ "duplicate values should be removed, keeping the rightmost occurrence, and sorted alphabetically by tag.");
+
+test_computed_value('font-variation-settings', '"XHGT" calc(0.4 + 0.3)', '"XHGT" 0.7');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variation-settings-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variation-settings-invalid.html
new file mode 100644
index 0000000000..bd9370b350
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variation-settings-invalid.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing font-variation-settings with invalid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#propdef-font-variation-settings">
+<meta name="assert" content="font-variation-settings supports only the grammar 'normal | [ <string> <number>] #'.">
+<meta name="assert" content="font-variation-settings strings must have 4 characters.">
+ <script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value('font-variation-settings', '700');
+test_invalid_value('font-variation-settings', '"XHGT"');
+test_invalid_value('font-variation-settings', 'wght 700');
+test_invalid_value('font-variation-settings', 'normal, "wght" 700');
+
+test_invalid_value('font-variation-settings', '"wgt" 700');
+test_invalid_value('font-variation-settings', '"XHGTX" 0.7');
+test_invalid_value('font-variation-settings', '"abc\1F" 0.5');
+test_invalid_value('font-variation-settings', '"abc\7F" 0.5');
+test_invalid_value('font-variation-settings', '"abc\A9" 0.5');
+
+test_invalid_value('font-variation-settings', "'wght' 200 'abcd' 400");
+test_invalid_value('font-variation-settings', "'a' 1234");
+test_invalid_value('font-variation-settings', "'abcde' 1234");
+test_invalid_value('font-variation-settings', "'wght' 200, ");
+test_invalid_value('font-variation-settings', "'abcd\" 123");
+
+test_invalid_value('font-variation-settings', "'wght' 100px");
+test_invalid_value('font-variation-settings', "'wght' calc(100px + 200px)");
+test_invalid_value('font-variation-settings', "'wght' 42%");
+test_invalid_value('font-variation-settings', "'wght' calc(100%)");
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-variation-settings-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-variation-settings-valid.html
new file mode 100644
index 0000000000..fc0c3ef703
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-variation-settings-valid.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 4: parsing font-variation-settings with valid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#propdef-font-variation-settings">
+<meta name="assert" content="font-variation-settings supports the full grammar 'normal | [ <string> <number>] #'.">
+<meta name="assert" content="font-variation-settings strings are case sensitive.">
+ <script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value('font-variation-settings', 'normal');
+
+test_valid_value('font-variation-settings', '"wght" 700');
+test_valid_value('font-variation-settings', "'wght' 700", '"wght" 700');
+test_valid_value('font-variation-settings', '"wght" 700, "XHGT" 0.7');
+
+test_valid_value('font-variation-settings', '"a cd" 0.5');
+test_valid_value('font-variation-settings', '"ab@d" 0.5');
+test_valid_value('font-variation-settings', "'wght' 1e3, 'slnt' -450.0e-1", '"wght" 1000, "slnt" -45');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-weight-computed.html b/testing/web-platform/tests/css/css-fonts/parsing/font-weight-computed.html
new file mode 100644
index 0000000000..08208e5dd4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-weight-computed.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: getComputedStyle().fontWeight</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-weight-prop">
+<meta name="assert" content="font-weight computed value is a number.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+</head>
+<body>
+<div id="container">
+ <div id="target"></div>
+</div>
+<script>
+'use strict';
+test_computed_value('font-weight', 'normal', '400');
+test_computed_value('font-weight', 'bold', '700');
+test_computed_value('font-weight', '100');
+test_computed_value('font-weight', '200');
+test_computed_value('font-weight', '300');
+test_computed_value('font-weight', '400');
+test_computed_value('font-weight', '500');
+test_computed_value('font-weight', '600');
+test_computed_value('font-weight', '700');
+test_computed_value('font-weight', '800');
+test_computed_value('font-weight', '900');
+
+function test_relative(specified, inherited, computed) {
+ test(() => {
+ const container = document.getElementById('container');
+ const target = document.getElementById('target');
+ container.style.fontWeight = inherited;
+ target.style.fontWeight = specified;
+ assert_equals(getComputedStyle(target).fontWeight, computed);
+ }, inherited + ' made ' + specified + ' computes to ' + computed);
+}
+
+test_relative('bolder', '100', '400');
+test_relative('bolder', '200', '400');
+test_relative('bolder', '300', '400');
+test_relative('bolder', '400', '700');
+test_relative('bolder', '500', '700');
+test_relative('bolder', '600', '900');
+test_relative('bolder', '700', '900');
+test_relative('bolder', '800', '900');
+test_relative('bolder', '900', '900');
+
+test_relative('lighter', '100', '100');
+test_relative('lighter', '200', '100');
+test_relative('lighter', '300', '100');
+test_relative('lighter', '400', '100');
+test_relative('lighter', '500', '100');
+test_relative('lighter', '600', '400');
+test_relative('lighter', '700', '400');
+test_relative('lighter', '800', '700');
+test_relative('lighter', '900', '700');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-weight-invalid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-weight-invalid.html
new file mode 100644
index 0000000000..af81569306
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-weight-invalid.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: parsing font-weight with invalid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-weight-prop">
+<meta name="assert" content="font-weight supports only the grammar 'normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_invalid_value('font-weight', 'auto');
+test_invalid_value('font-weight', 'bold 900');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/parsing/font-weight-valid.html b/testing/web-platform/tests/css/css-fonts/parsing/font-weight-valid.html
new file mode 100644
index 0000000000..090729287b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/parsing/font-weight-valid.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Fonts Module Level 3: parsing font-weight with valid values</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-weight-prop">
+<meta name="assert" content="font-weight supports the full grammar 'normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900'.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value('font-weight', 'normal');
+test_valid_value('font-weight', 'bold');
+test_valid_value('font-weight', 'bolder');
+test_valid_value('font-weight', 'lighter');
+test_valid_value('font-weight', '100');
+test_valid_value('font-weight', '200');
+test_valid_value('font-weight', '300');
+test_valid_value('font-weight', '400');
+test_valid_value('font-weight', '500');
+test_valid_value('font-weight', '600');
+test_valid_value('font-weight', '700');
+test_valid_value('font-weight', '800');
+test_valid_value('font-weight', '900');
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/quoted-generic-ignored-ref.html b/testing/web-platform/tests/css/css-fonts/quoted-generic-ignored-ref.html
new file mode 100644
index 0000000000..70e2d50cd8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/quoted-generic-ignored-ref.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<meta charset=utf-8>
+<title>CSS Reference: quoted font-family names must not be treated as generics</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jfkthame@gmail.com"/>
+<style>
+body { font-size: 36px; }
+.test1 { font-family: serif; }
+.test2 { font-family: sans-serif; }
+.test3 { font-family: monospace; }
+</style>
+<body>
+<p>The following lines should be rendered with the generic font-families as named:</p>
+<div class="test1">serif</div>
+<div class="test2">sans-serif</div>
+<div class="test3">monospace</div>
+<div class="test1">serif</div>
+<div class="test2">sans-serif</div>
+<div class="test3">monospace</div>
diff --git a/testing/web-platform/tests/css/css-fonts/quoted-generic-ignored.html b/testing/web-platform/tests/css/css-fonts/quoted-generic-ignored.html
new file mode 100644
index 0000000000..4207ad5cf4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/quoted-generic-ignored.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+<meta charset=utf-8>
+<title>CSS Test: quoted font-family names must not be treated as generics</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jfkthame@gmail.com"/>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#font-family-prop"/>
+<link rel="match" href="quoted-generic-ignored-ref.html"/>
+<meta name="assert" content="Font family names that happen to be the same as keyword value must be quoted to prevent confusion with the keywords with the same names"/>
+<style>
+body { font-size: 36px; }
+/* Note that this test assumes that the system does not have an actual
+ font named "Fantasy" or "Cursive" installed! */
+.fantasy-test1 { font-family: "fantasy", serif; }
+.fantasy-test2 { font-family: "fantasy", sans-serif; }
+.fantasy-test3 { font-family: "fantasy", monospace; }
+.cursive-test1 { font-family: "cursive", serif; }
+.cursive-test2 { font-family: "cursive", sans-serif; }
+.cursive-test3 { font-family: "cursive", monospace; }
+</style>
+</head>
+<body>
+<p>The following lines should be rendered with the generic font-families as named:</p>
+<div class="fantasy-test1">serif</div>
+<div class="fantasy-test2">sans-serif</div>
+<div class="fantasy-test3">monospace</div>
+<div class="cursive-test1">serif</div>
+<div class="cursive-test2">sans-serif</div>
+<div class="cursive-test3">monospace</div>
diff --git a/testing/web-platform/tests/css/css-fonts/rcap-in-monospace-ref.html b/testing/web-platform/tests/css/css-fonts/rcap-in-monospace-ref.html
new file mode 100644
index 0000000000..1dcb4ac010
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/rcap-in-monospace-ref.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+
+<link rel="stylesheet" href="/fonts/ahem.css">
+
+<style>
+ :root {
+ font-family: Ahem;
+ font-size: 16px;
+ }
+</style>
+
+<p style="font-family: sans-serif">The following two lines should look exactly the same.</p>
+
+<div style="font-size: 1cap;">
+ <div style="font-family: sans-serif;">
+ Text.
+ </div>
+
+ <div style="font-family: sans-serif;">
+ Text.
+ </div>
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/rcap-in-monospace.html b/testing/web-platform/tests/css/css-fonts/rcap-in-monospace.html
new file mode 100644
index 0000000000..def59b074f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/rcap-in-monospace.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-size-prop">
+<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m">
+<link rel="match" href="rcap-in-monospace-ref.html">
+
+<link rel="stylesheet" href="/fonts/ahem.css">
+
+<style>
+ :root {
+ font-family: Ahem;
+ font-size: 16px;
+ }
+</style>
+
+<p style="font-family: sans-serif">The following two lines should look exactly the same.</p>
+
+<div style="font-family: monospace; font-size: 1.5em">
+ <div style="font-family: sans-serif; font-size: 1rcap">
+ Text.
+ </div>
+</div>
+
+<div style="font-family: sans-serif; font-size: 1rcap">
+ Text.
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/rch-in-monospace-ref.html b/testing/web-platform/tests/css/css-fonts/rch-in-monospace-ref.html
new file mode 100644
index 0000000000..1bea172a0e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/rch-in-monospace-ref.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<p>The following two lines should look exactly the same.</p>
+
+<div style="font-family: sans-serif; font-size: 1rch">
+ Text.
+</div>
+
+<div style="font-family: sans-serif; font-size: 1rch">
+ Text.
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/rch-in-monospace.html b/testing/web-platform/tests/css/css-fonts/rch-in-monospace.html
new file mode 100644
index 0000000000..86ad1d8732
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/rch-in-monospace.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-size-prop">
+<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m">
+<link rel="match" href="rch-in-monospace-ref.html">
+
+<p>The following two lines should look exactly the same.</p>
+
+<div style="font-family: monospace; font-size: 1.5em">
+ <div style="font-family: sans-serif; font-size: 1rch">
+ Text.
+ </div>
+</div>
+
+<div style="font-family: sans-serif; font-size: 1rch">
+ Text.
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/rem-in-monospace-ref.html b/testing/web-platform/tests/css/css-fonts/rem-in-monospace-ref.html
new file mode 100644
index 0000000000..5acb052201
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/rem-in-monospace-ref.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<p>The following two lines should look exactly the same.</p>
+
+<div style="font-family: sans-serif; font-size: 1rem">
+ Text.
+</div>
+
+<div style="font-family: sans-serif; font-size: 1rem">
+ Text.
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/rem-in-monospace.html b/testing/web-platform/tests/css/css-fonts/rem-in-monospace.html
new file mode 100644
index 0000000000..0358d811b4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/rem-in-monospace.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<link rel=help href="https://drafts.csswg.org/css-fonts-4/#font-size-prop">
+<link rel=help href="https://bugs.chromium.org/p/chromium/issues/detail?id=623842">
+<link rel=author href="mailto:xiaochengh@chromium.org">
+<link rel=match href="./rem-in-monospace-ref.html">
+
+<p>The following two lines should look exactly the same.</p>
+
+<div style="font-family: monospace; font-size: 1.5em">
+ <div style="font-family: sans-serif; font-size: 1rem">
+ Text.
+ </div>
+</div>
+
+<div style="font-family: sans-serif; font-size: 1rem">
+ Text.
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/resources/COLR-palettes-test-font-no-light-dark.ttf b/testing/web-platform/tests/css/css-fonts/resources/COLR-palettes-test-font-no-light-dark.ttf
new file mode 100644
index 0000000000..214fd9d436
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/resources/COLR-palettes-test-font-no-light-dark.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/resources/COLR-palettes-test-font.ttf b/testing/web-platform/tests/css/css-fonts/resources/COLR-palettes-test-font.ttf
new file mode 100644
index 0000000000..0f28caf21e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/resources/COLR-palettes-test-font.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/resources/NotoSansJP-kana_test-subset.otf b/testing/web-platform/tests/css/css-fonts/resources/NotoSansJP-kana_test-subset.otf
new file mode 100644
index 0000000000..9be3823c3e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/resources/NotoSansJP-kana_test-subset.otf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/resources/ahem-ex-250.otf b/testing/web-platform/tests/css/css-fonts/resources/ahem-ex-250.otf
new file mode 100644
index 0000000000..186240b91c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/resources/ahem-ex-250.otf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/resources/ahem-ex-500.otf b/testing/web-platform/tests/css/css-fonts/resources/ahem-ex-500.otf
new file mode 100644
index 0000000000..9966da1929
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/resources/ahem-ex-500.otf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/resources/colorization_SVG_COLR.ttf b/testing/web-platform/tests/css/css-fonts/resources/colorization_SVG_COLR.ttf
new file mode 100644
index 0000000000..7ff387b584
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/resources/colorization_SVG_COLR.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/resources/markA.ttf b/testing/web-platform/tests/css/css-fonts/resources/markA.ttf
new file mode 100644
index 0000000000..353e7ac332
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/resources/markA.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/resources/markB.ttf b/testing/web-platform/tests/css/css-fonts/resources/markB.ttf
new file mode 100644
index 0000000000..c683ddf945
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/resources/markB.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/resources/separator-test-font.ttf b/testing/web-platform/tests/css/css-fonts/resources/separator-test-font.ttf
new file mode 100644
index 0000000000..26cc99783d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/resources/separator-test-font.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/rex-in-monospace-ref.html b/testing/web-platform/tests/css/css-fonts/rex-in-monospace-ref.html
new file mode 100644
index 0000000000..27972869e6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/rex-in-monospace-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+
+<style>
+ @font-face {
+ font-family: ExTest;
+ src: url(../css-values/resources/ExTest.woff);
+ }
+ :root {
+ font-family: ExTest;
+ font-size: 20px;
+ }
+</style>
+
+<p style="font-family: sans-serif">The following two lines should look exactly the same.</p>
+
+<div style="font-size: 1ex;">
+ <div style="font-family: sans-serif;">
+ Text.
+ </div>
+
+ <div style="font-family: sans-serif;">
+ Text.
+ </div>
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/rex-in-monospace.html b/testing/web-platform/tests/css/css-fonts/rex-in-monospace.html
new file mode 100644
index 0000000000..89fc9ff9cc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/rex-in-monospace.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-size-prop">
+<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m">
+<link rel="match" href="rex-in-monospace-ref.html">
+
+<style>
+ @font-face {
+ font-family: ExTest;
+ src: url(../css-values/resources/ExTest.woff);
+ }
+ :root {
+ font-family: ExTest;
+ font-size: 20px;
+ }
+</style>
+
+<p style="font-family: sans-serif">The following two lines should look exactly the same.</p>
+
+<div style="font-family: monospace; font-size: 1.5em">
+ <div style="font-family: sans-serif; font-size: 1rex">
+ Text.
+ </div>
+</div>
+
+<div style="font-family: sans-serif; font-size: 1rex">
+ Text.
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/ric-in-monospace-ref.html b/testing/web-platform/tests/css/css-fonts/ric-in-monospace-ref.html
new file mode 100644
index 0000000000..4871e3baea
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/ric-in-monospace-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+
+<style>
+ @font-face {
+ font-family: IcTestFullWidth;
+ src: url(../css-values/resources/IcTestFullWidth.woff2);
+ }
+ :root {
+ font-family: IcTestFullWidth;
+ }
+</style>
+
+<p style="font-family: sans-serif">The following two lines should look exactly the same.</p>
+
+<div style="font-size: 1ic">
+ <div style="font-family: sans-serif;">
+ Text.
+ </div>
+
+ <div style="font-family: sans-serif;">
+ Text.
+ </div>
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/ric-in-monospace.html b/testing/web-platform/tests/css/css-fonts/ric-in-monospace.html
new file mode 100644
index 0000000000..1ad6dac924
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/ric-in-monospace.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-size-prop">
+<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m">
+<link rel="match" href="ric-in-monospace-ref.html">
+
+<style>
+ @font-face {
+ font-family: IcTestFullWidth;
+ src: url(../css-values/resources/IcTestFullWidth.woff2);
+ }
+ :root {
+ font-family: IcTestFullWidth;
+ }
+</style>
+
+<p style="font-family: sans-serif">The following two lines should look exactly the same.</p>
+
+<div style="font-family: monospace; font-size: 1.5em">
+ <div style="font-family: sans-serif; font-size: 1ric">
+ Text.
+ </div>
+</div>
+
+<div style="font-family: sans-serif; font-size: 1ric">
+ Text.
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/rlh-in-monospace-ref.html b/testing/web-platform/tests/css/css-fonts/rlh-in-monospace-ref.html
new file mode 100644
index 0000000000..e60a59d719
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/rlh-in-monospace-ref.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<p>The following two lines should look exactly the same.</p>
+
+<div style="font-family: sans-serif; font-size: 1rlh">
+ Text.
+</div>
+
+<div style="font-family: sans-serif; font-size: 1rlh">
+ Text.
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/rlh-in-monospace.html b/testing/web-platform/tests/css/css-fonts/rlh-in-monospace.html
new file mode 100644
index 0000000000..26a57a78a5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/rlh-in-monospace.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-size-prop">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=623842">
+<link rel="help" href="https://bugs.webkit.org/show_bug.cgi?id=246566">
+<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m">
+<link rel="match" href="rlh-in-monospace-ref.html">
+
+<p>The following two lines should look exactly the same.</p>
+
+<div style="font-family: monospace; font-size: 1.5em">
+ <div style="font-family: sans-serif; font-size: 1rlh">
+ Text.
+ </div>
+</div>
+
+<div style="font-family: sans-serif; font-size: 1rlh">
+ Text.
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/separators-ref.html b/testing/web-platform/tests/css/css-fonts/separators-ref.html
new file mode 100644
index 0000000000..d1d56f576f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/separators-ref.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Line and paragraph separator rendering</title>
+<style>
+ @font-face {
+ font-family: test;
+ src: url(resources/separator-test-font.ttf) format("truetype");
+ }
+ p {
+ font-size: 30px;
+ }
+</style>
+<body>
+ <p>&#x0056&#x0020&#x004f</p>
+ <p>&#x0056&#x2028&#x004f</p>
+ <p>&#x0056&#x2029&#x004f</p>
+
+ <p style="font-family: test;">&#x0056&#x0020&#x004f</p>
+ <p style="font-family: test;">&#x0056&#x0020&#x004f</p>
+ <p style="font-family: test;">&#x0056&#x0020&#x004f</p>
+</body> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/separators.html b/testing/web-platform/tests/css/css-fonts/separators.html
new file mode 100644
index 0000000000..b2ec6a2a53
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/separators.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="match" href="separators-ref.html">
+<link rel="help" href="https://www.unicode.org/faq/unsup_char.html#2"/>
+<link rel="assert" title="Line and paragraph separator should be displayed as space">
+<title>Line and paragraph separator rendering</title>
+<style>
+ @font-face {
+ font-family: test;
+ src: url(resources/separator-test-font.ttf) format("truetype");
+ }
+ p {
+ font-size: 30px;
+ }
+</style>
+<body>
+ <p>&#x0056&#x0020&#x004f</p>
+ <p>&#x0056&#x2028&#x004f</p>
+ <p>&#x0056&#x2029&#x004f</p>
+
+ <p style="font-family: test;">&#x0056&#x0020&#x004f</p>
+ <p style="font-family: test;">&#x0056&#x2028&#x004f</p>
+ <p style="font-family: test;">&#x0056&#x2029&#x004f</p>
+</body> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/size-adjust-01-ref.html b/testing/web-platform/tests/css/css-fonts/size-adjust-01-ref.html
new file mode 100644
index 0000000000..765201d355
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/size-adjust-01-ref.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="author" href="mailto:jkew@mozilla.com">
+<title>Tests the size-adjust descriptor of @font-face</title>
+<style>
+@font-face {
+ font-family: reference-font;
+ src: local(Ahem), url(/fonts/Ahem.ttf);
+ /* Uppercase ASCII only + U+20 to make this "first available font" */
+ unicode-range: U+20,U+41-5A;
+}
+
+div {
+ font-size: 40px;
+ line-height: 100px;
+}
+
+.reference {
+ font-family: reference-font, sans-serif;
+}
+
+.large {
+ font-size: 60px;
+}
+</style>
+
+<p>size-adjust:100% should be the same as no override.</p>
+
+<div>
+ <span class="reference">TheQuickBrownFox</span>
+</div>
+
+<p>size-adjust:150% should affect Ahem characters only.</p>
+
+<div>
+ <span class="reference"><span class="large">T</span>he<span class="large">Q</span>uick<span class="large">B</span>rown<span class="large">F</span>ox</span>
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/size-adjust-01.html b/testing/web-platform/tests/css/css-fonts/size-adjust-01.html
new file mode 100644
index 0000000000..024a22097e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/size-adjust-01.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="author" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-5/"> <!-- XXX to be added -->
+<link rel="match" href="size-adjust-01-ref.html">
+<link rel="assert" title="Tests that size-adjust scales the glyphs of the face">
+<title>Tests the size-adjust descriptor of @font-face</title>
+<style>
+@font-face {
+ font-family: reference-font;
+ src: local(Ahem), url(/fonts/Ahem.ttf);
+ size-adjust: 100%;
+ /* Uppercase ASCII only + U+20 to make this "first available font" */
+ unicode-range: U+20,U+41-5A;
+}
+
+@font-face {
+ font-family: large-font;
+ src: local(Ahem), url(/fonts/Ahem.ttf);
+ size-adjust: 150%;
+ /* Uppercase ASCII only + U+20 to make this "first available font" */
+ unicode-range: U+20,U+41-5A;
+}
+
+div {
+ font-size: 40px;
+ line-height: 100px;
+}
+
+.reference {
+ font-family: reference-font, sans-serif;
+}
+
+.large {
+ font-family: large-font, sans-serif;
+}
+</style>
+
+<p>size-adjust:100% should be the same as no override.</p>
+
+<div>
+ <span class="reference">TheQuickBrownFox</span>
+</div>
+
+<p>size-adjust:150% should affect Ahem characters only.</p>
+
+<div>
+ <span class="large">TheQuickBrownFox</span>
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/size-adjust-02-ref.html b/testing/web-platform/tests/css/css-fonts/size-adjust-02-ref.html
new file mode 100644
index 0000000000..44bf8a130b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/size-adjust-02-ref.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="author" href="mailto:jkew@mozilla.com">
+<title>Tests that font-size-adjust overrides the size-adjust descriptor</title>
+<style>
+@font-face {
+ font-family: reference-font;
+ src: local(Ahem), url(/fonts/Ahem.ttf);
+ unicode-range: U+41-5A; /* Uppercase ASCII only */
+}
+
+div {
+ font-size: 40px;
+ line-height: 100px;
+ font-size-adjust: 0.5;
+}
+
+.reference {
+ font-family: reference-font, sans-serif;
+}
+
+.large {
+ font-size: 60px;
+}
+</style>
+
+<p>Without size-adjust applied to the Ahem font.</p>
+
+<div>
+ <span class="reference">The Quick Brown Fox</span>
+</div>
+
+<p>With size-adjust:150% there should be no change as font-size-adjust overrides it.</p>
+
+<div>
+ <span class="reference">The Quick Brown Fox</span>
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/size-adjust-02.html b/testing/web-platform/tests/css/css-fonts/size-adjust-02.html
new file mode 100644
index 0000000000..3255b5ccaf
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/size-adjust-02.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="author" href="mailto:jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-5/"> <!-- XXX to be added -->
+<link rel="match" href="size-adjust-02-ref.html">
+<link rel="assert" title="Tests that font-size-adjust overrides the size-adjust descriptor">
+<title>Tests that font-size-adjust overrides the size-adjust descriptor</title>
+<style>
+@font-face {
+ font-family: reference-font;
+ src: local(Ahem), url(/fonts/Ahem.ttf);
+ size-adjust: 100%;
+ unicode-range: U+41-5A; /* Uppercase ASCII only */
+}
+
+@font-face {
+ font-family: large-font;
+ src: local(Ahem), url(/fonts/Ahem.ttf);
+ size-adjust: 150%;
+ unicode-range: U+41-5A; /* Uppercase ASCII only */
+}
+
+div {
+ font-size: 40px;
+ line-height: 100px;
+ font-size-adjust: 0.5;
+}
+
+.reference {
+ font-family: reference-font, sans-serif;
+}
+
+.large {
+ font-family: large-font, sans-serif;
+}
+</style>
+
+<p>Without size-adjust applied to the Ahem font.</p>
+
+<div>
+ <span class="reference">The Quick Brown Fox</span>
+</div>
+
+<p>With size-adjust:150% there should be no change as font-size-adjust overrides it.</p>
+
+<div>
+ <span class="large">The Quick Brown Fox</span>
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/size-adjust-03-ref.html b/testing/web-platform/tests/css/css-fonts/size-adjust-03-ref.html
new file mode 100644
index 0000000000..eff794d213
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/size-adjust-03-ref.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="author" href="mailto:changseok@webkit.org">
+<title>Tests that font-size-adjust preempts size-adjust from the descriptor.</title>
+<style>
+@font-face {
+ font-family: reference-font;
+ src: local(Ahem), url(/fonts/Ahem.ttf);
+}
+
+div {
+ line-height: 100px;
+}
+
+.font-size-adjust-override {
+ font-family: reference-font, sans-serif;
+ font-size: 40px;
+}
+
+.descriptor-size-adjust-active {
+ font-family: reference-font, sans-serif;
+ font-size: 60px;
+}
+</style>
+
+<p>With font-size-adjust, size-adjust:150% has no effect as font-size-adjust overrides it.</p>
+
+<div class="font-size-adjust-override">The Quick Brown Fox</div>
+
+<p>Without font-size-adjust, size-adjust:150% should be applied. Pass if the following texts show bigger than the above.</p>
+
+<div class="descriptor-size-adjust-active">The Quick Brown Fox</div>
diff --git a/testing/web-platform/tests/css/css-fonts/size-adjust-03.html b/testing/web-platform/tests/css/css-fonts/size-adjust-03.html
new file mode 100644
index 0000000000..f9de6499fa
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/size-adjust-03.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="author" href="mailto:changseok@webkit.org">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-5/#font-size-adjust-prop">
+<link rel="match" href="size-adjust-03-ref.html">
+<link rel="assert" title="Tests that font-size-adjust preempts size-adjust from the descriptor.">
+<title>Tests that font-size-adjust preempts size-adjust from the descriptor.</title>
+<style>
+@font-face {
+ font-family: large-font;
+ src: local(Ahem), url(/fonts/Ahem.ttf);
+ size-adjust: 150%;
+}
+
+div {
+ font-size: 40px;
+ line-height: 100px;
+}
+
+.font-size-adjust-override {
+ font-family: large-font, sans-serif;
+ font-size-adjust: 0.8;
+}
+
+.descriptor-size-adjust-active {
+ font-family: large-font, sans-serif;
+}
+</style>
+
+<p>With font-size-adjust, size-adjust:150% has no effect as font-size-adjust overrides it.</p>
+
+<div class="font-size-adjust-override">The Quick Brown Fox</div>
+
+<p>Without font-size-adjust, size-adjust:150% should be applied. Pass if the following texts show bigger than the above.</p>
+
+<div class="descriptor-size-adjust-active">The Quick Brown Fox</div>
diff --git a/testing/web-platform/tests/css/css-fonts/size-adjust-tentative-ref.html b/testing/web-platform/tests/css/css-fonts/size-adjust-tentative-ref.html
new file mode 100644
index 0000000000..d3849b0a5b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/size-adjust-tentative-ref.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<title>Tests the size-adjust descriptor of @font-face</title>
+
+<style>
+@font-face {
+ font-family: custom-font;
+ src: local(Ahem), url(/fonts/Ahem.ttf);
+ unicode-range: U+20, U+30-39; /* Digits and space */
+}
+
+.target {
+ font-size: 10px;
+ font-family: custom-font, sans-serif;
+}
+
+.unaffected {
+ font-size: 20px;
+}
+
+.square {
+ display: inline-block;
+ vertical-align: bottom;
+ background-color: black;
+ width: var(--l);
+ height: var(--l);
+}
+</style>
+
+<p>size-adjust should scale ascent and descent metrics in 'line-height: normal'.</p>
+<div class="target">
+ 123<br>
+ 123<br>
+ 123
+</div>
+
+<p>In a text node with multiple fonts, size-adjust should only scale characters in the modified font. In the test case below, digits should be scaled, but not letters.</p>
+<div class="target" style="height: 30px">
+ 123<span class="unaffected">xxx</span>
+</div>
+
+<p>In nested elements, size-adjust should be applied to each text segment independently. Both elements below should be scaled to 50% of their original sizes, respectively.</p>
+<div class="target">
+ 123
+ <div style="font-size: 200%">
+ 456
+ </div>
+</div>
+
+<p>The computed 'font-size' value (i.e., 'em') should not be affected. But 'ex' should be scaled since it's measured from the actual glyph.</p>
+<div class="target" style="font-size: 20px; line-height: 1">
+ <span class="square" style="--l: 1em"></span><span class="square" style="--l: 0.5ex"></span>
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/size-adjust-text-decoration-tentative-ref.html b/testing/web-platform/tests/css/css-fonts/size-adjust-text-decoration-tentative-ref.html
new file mode 100644
index 0000000000..1cf10862ad
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/size-adjust-text-decoration-tentative-ref.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<!-- Test is tentative due to the following issues:
+ - https://github.com/w3c/csswg-drafts/issues/6112
+ - https://github.com/w3c/csswg-drafts/issues/6114
+-->
+<title>Tests interaction between the size-adjust descriptor of @font-face and text decoration</title>
+
+<style>
+@font-face {
+ font-family: custom-font;
+ src: local(Ahem), url(/fonts/Ahem.ttf);
+}
+
+.target {
+ margin: 20px;
+ font-size: 10px;
+ font-family: custom-font, sans-serif;
+ text-decoration-line: underline;
+ text-decoration-style: solid;
+ text-decoration-color: black;
+}
+</style>
+
+<p>size-adjust should not affect em- or percentage-based text-underline-offset.</p>
+
+<!-- We fix thickness because the default thickness value 'auto' allows browser-specific behaviors. -->
+
+<div class="target" style="text-underline-offset: 0.2em; text-decoration-thickness: 1px;">
+ &#xC9;
+</div>
+
+<div class="target" style="text-underline-offset: 20%; text-decoration-thickness: 1px;">
+ &#xC9;
+</div>
+
+<p>size-adjust should not affect em- or percentage-based text-decoration-thickness.</p>
+
+<div class="target" style="text-decoration-thickness: 0.2em">
+ &#xC9;
+</div>
+
+<div class="target" style="text-decoration-thickness: 20%">
+ &#xC9;
+</div>
+
+<p>size-adjust should affect 'text-underline-thickness: from-font', which is a metric obtained from the font file. The underline should be 50% as thick as original.</p>
+<div class="target" style="text-decoration-thickness: from-font">
+ &#xC9;
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/size-adjust-text-decoration.tentative.html b/testing/web-platform/tests/css/css-fonts/size-adjust-text-decoration.tentative.html
new file mode 100644
index 0000000000..f1183dcf20
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/size-adjust-text-decoration.tentative.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<!-- Test is tentative due to the following issues:
+ - https://github.com/w3c/csswg-drafts/issues/6112
+ - https://github.com/w3c/csswg-drafts/issues/6114
+-->
+<title>Tests interaction between the size-adjust descriptor of @font-face and text decoration</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-5/#descdef-font-face-size-adjust">
+<link rel="author" href="mailto:xiaochengh@chromium.org">
+<link rel="match" href="size-adjust-text-decoration-tentative-ref.html">
+<link rel="assert" title="size-adjust should not affect em- or percentage-based values, but affects 'from-font'">
+
+<style>
+@font-face {
+ font-family: custom-font;
+ src: local(Ahem), url(/fonts/Ahem.ttf);
+ size-adjust: 50%;
+}
+
+.target {
+ margin: 20px;
+ font-size: 20px;
+ font-family: custom-font, sans-serif;
+ text-decoration-line: underline;
+ text-decoration-style: solid;
+ text-decoration-color: black;
+}
+</style>
+
+<p>size-adjust should not affect em- or percentage-based text-underline-offset.</p>
+
+<!-- We fix thickness because the default thickness value 'auto' allows browser-specific behaviors. -->
+
+<div class="target" style="text-underline-offset: 0.1em; text-decoration-thickness: 1px;">
+ &#xC9;
+</div>
+
+<div class="target" style="text-underline-offset: 10%; text-decoration-thickness: 1px;">
+ &#xC9;
+</div>
+
+<p>size-adjust should not affect em- or percentage-based text-decoration-thickness.</p>
+
+<div class="target" style="text-decoration-thickness: 0.1em">
+ &#xC9;
+</div>
+
+<div class="target" style="text-decoration-thickness: 10%">
+ &#xC9;
+</div>
+
+<p>size-adjust should affect 'text-underline-thickness: from-font', which is a metric obtained from the font file. The underline should be 50% as thick as original.</p>
+<div class="target" style="text-decoration-thickness: from-font">
+ &#xC9;
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/size-adjust-unicode-range-system-fallback-ref.html b/testing/web-platform/tests/css/css-fonts/size-adjust-unicode-range-system-fallback-ref.html
new file mode 100644
index 0000000000..c14d922a70
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/size-adjust-unicode-range-system-fallback-ref.html
@@ -0,0 +1,21 @@
+<!DOCTYPE HTML>
+<meta charset="utf-8">
+<link rel="author" href="mailto:changseok@webkit.org">
+<title>Tests that the size-adjust descriptor does not affect system fallback font size.</title>
+<style>
+@font-face {
+ font-family: large-font;
+ src: local(Ahem), url(/fonts/Ahem.ttf);
+ size-adjust: 1000%;
+ unicode-range: U+0020;
+}
+
+.space {
+ font-family: large-font;
+}
+
+.ref {
+ font-family: sans-serif;
+}
+</style>
+<span class="space"> </span><span class="ref">あ</span>
diff --git a/testing/web-platform/tests/css/css-fonts/size-adjust-unicode-range-system-fallback.html b/testing/web-platform/tests/css/css-fonts/size-adjust-unicode-range-system-fallback.html
new file mode 100644
index 0000000000..6cfc23fec5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/size-adjust-unicode-range-system-fallback.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML>
+<meta charset="utf-8">
+<link rel="author" title="ChangSeok Oh" href="mailto:changseok@webkit.org">
+<link rel="help" href="https://crbug.com/1441723">
+<link rel="match" href="size-adjust-unicode-range-system-fallback-ref.html">
+<link rel="assert" title="Tests that the size-adjust descriptor does not affect system fallback font size.">
+<title>Tests that the size-adjust descriptor does not affect system fallback font size.</title>
+<style>
+@font-face {
+ font-family: large-font;
+ src: local(Ahem), url(/fonts/Ahem.ttf);
+ size-adjust: 1000%;
+ unicode-range: U+0020;
+}
+
+.test {
+ font-family: large-font;
+}
+</style>
+<span class="test"> あ</span>
diff --git a/testing/web-platform/tests/css/css-fonts/size-adjust.tentative.html b/testing/web-platform/tests/css/css-fonts/size-adjust.tentative.html
new file mode 100644
index 0000000000..22517f3941
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/size-adjust.tentative.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<!-- Test is tentative due to the following issues:
+ - https://github.com/w3c/csswg-drafts/issues/6112
+ - https://github.com/w3c/csswg-drafts/issues/6114
+-->
+<title>Tests the size-adjust descriptor of @font-face</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-5/#descdef-font-face-size-adjust">
+<link rel="author" href="mailto:xiaochengh@chromium.org">
+<link rel="match" href="size-adjust-tentative-ref.html">
+<link rel="assert" title="size-adjust should resize all metrics of the font face">
+
+<style>
+@font-face {
+ font-family: custom-font;
+ src: local(Ahem), url(/fonts/Ahem.ttf);
+ size-adjust: 50%;
+ unicode-range: U+20, U+30-39; /* Digits and space */
+}
+
+.target {
+ font-size: 20px;
+ font-family: custom-font, sans-serif;
+}
+
+.square {
+ display: inline-block;
+ vertical-align: bottom;
+ background-color: black;
+ width: var(--l);
+ height: var(--l);
+}
+</style>
+
+<p>size-adjust should scale ascent and descent metrics in 'line-height: normal'.</p>
+<div class="target">
+ 123<br>
+ 123<br>
+ 123
+</div>
+
+<p>In a text node with multiple fonts, size-adjust should only scale characters in the modified font. In the test case below, digits should be scaled, but not letters.</p>
+<div class="target" style="height: 30px">
+ 123xxx
+</div>
+
+<p>In nested elements, size-adjust should be applied to each text segment independently. Both elements below should be scaled to 50% of their original sizes, respectively.</p>
+<div class="target">
+ 123
+ <div style="font-size: 200%">
+ 456
+ </div>
+</div>
+
+<p>The computed 'font-size' value (i.e., 'em') should not be affected. But 'ex' should be scaled since it's measured from the actual glyph.</p>
+<div class="target" style="line-height: 1">
+ <span class="square" style="--l: 1em"></span><span class="square" style="--l: 1ex"></span>
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-10-notref.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-10-notref.html
new file mode 100644
index 0000000000..e977fdaf76
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-10-notref.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+<style>
+@font-face {
+ font-family: "AppleSystemUIRounded";
+ src: local("ui-rounded");
+}
+</style>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font: 72px 'AppleSystemUIRounded'; font-synthesis: none;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-10.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-10.html
new file mode 100644
index 0000000000..5dde6348d3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-10.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#standard-font-families"/>
+<link rel="mismatch" href="standard-font-family-10-notref.html"/>
+<meta name="assert" content="ui-rounded's bold in @font-face isn't synthetic"/>
+<style>
+@font-face {
+ font-family: "AppleSystemUIRounded";
+ src: local("ui-rounded");
+}
+</style>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font: bold 72px 'AppleSystemUIRounded'; font-synthesis: none;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-11-notref.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-11-notref.html
new file mode 100644
index 0000000000..7e876ced31
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-11-notref.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font-size: 72px;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-11.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-11.html
new file mode 100644
index 0000000000..15abb9a30a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-11.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#standard-font-families"/>
+<link rel="mismatch" href="standard-font-family-11-notref.html"/>
+<meta name="assert" content="ui-serif works"/>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font: 72px 'ui-serif';">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-12-notref.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-12-notref.html
new file mode 100644
index 0000000000..7e876ced31
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-12-notref.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font-size: 72px;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-12.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-12.html
new file mode 100644
index 0000000000..7c34b0b8ca
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-12.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#standard-font-families"/>
+<link rel="mismatch" href="standard-font-family-12-notref.html"/>
+<meta name="assert" content="ui-monospace works"/>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font: 72px 'ui-monospace';">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-13-notref.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-13-notref.html
new file mode 100644
index 0000000000..7e876ced31
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-13-notref.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font-size: 72px;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-13.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-13.html
new file mode 100644
index 0000000000..1f8186f482
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-13.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#standard-font-families"/>
+<link rel="mismatch" href="standard-font-family-13-notref.html"/>
+<meta name="assert" content="ui-rounded works"/>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font: 72px 'ui-rounded';">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-14-notref.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-14-notref.html
new file mode 100644
index 0000000000..7e876ced31
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-14-notref.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font-size: 72px;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-14.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-14.html
new file mode 100644
index 0000000000..5b694ef09b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-14.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#standard-font-families"/>
+<link rel="mismatch" href="standard-font-family-14-notref.html"/>
+<meta name="assert" content="ui-serif in @font-face works"/>
+<style>
+@font-face {
+ font-family: "AppleSystemUISerif";
+ src: local("ui-serif");
+}
+</style>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font: 72px 'AppleSystemUISerif';">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-15-notref.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-15-notref.html
new file mode 100644
index 0000000000..7e876ced31
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-15-notref.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font-size: 72px;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-15.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-15.html
new file mode 100644
index 0000000000..2e21b833c9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-15.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#standard-font-families"/>
+<link rel="mismatch" href="standard-font-family-15-notref.html"/>
+<meta name="assert" content="ui-monospace in @font-face works"/>
+<style>
+@font-face {
+ font-family: "AppleSystemUIMonospace";
+ src: local("ui-monospace");
+}
+</style>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font: 72px 'AppleSystemUIMonospace';">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-16-notref.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-16-notref.html
new file mode 100644
index 0000000000..7e876ced31
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-16-notref.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font-size: 72px;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-16.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-16.html
new file mode 100644
index 0000000000..0b470bd640
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-16.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#standard-font-families"/>
+<link rel="mismatch" href="standard-font-family-16-notref.html"/>
+<meta name="assert" content="ui-rounded in @font-face works"/>
+<style>
+@font-face {
+ font-family: "AppleSystemUIRounded";
+ src: local("ui-rounded");
+}
+</style>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font: 72px 'AppleSystemUIRounded';">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-17-notref.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-17-notref.html
new file mode 100644
index 0000000000..3d01985ed6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-17-notref.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font: 72px 'ui-sans-serif'; font-synthesis: none;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-17.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-17.html
new file mode 100644
index 0000000000..9ce56ed8fa
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-17.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#standard-font-families"/>
+<link rel="mismatch" href="standard-font-family-17-notref.html"/>
+<meta name="assert" content="ui-sans-serif's bold isn't synthetic"/>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font: bold 72px 'ui-sans-serif'; font-synthesis: none;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-18-notref.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-18-notref.html
new file mode 100644
index 0000000000..7829a0c5e1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-18-notref.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+<style>
+@font-face {
+ font-family: "AppleSystemUISansSerif";
+ src: local("ui-sans-serif");
+}
+</style>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font: 72px 'AppleSystemUISansSerif'; font-synthesis: none;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-18.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-18.html
new file mode 100644
index 0000000000..69e5cabd6e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-18.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#standard-font-families"/>
+<link rel="mismatch" href="standard-font-family-18-notref.html"/>
+<meta name="assert" content="ui-sans-serif's bold in @font-face isn't synthetic"/>
+<style>
+@font-face {
+ font-family: "AppleSystemUISansSerif";
+ src: local("ui-sans-serif");
+}
+</style>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font: bold 72px 'AppleSystemUISansSerif'; font-synthesis: none;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-19-notref.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-19-notref.html
new file mode 100644
index 0000000000..7e876ced31
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-19-notref.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font-size: 72px;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-19.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-19.html
new file mode 100644
index 0000000000..43dc24b167
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-19.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#standard-font-families"/>
+<link rel="mismatch" href="standard-font-family-19-notref.html"/>
+<meta name="assert" content="ui-sans-serif works"/>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font: 72px 'ui-sans-serif';">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-2-ref.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-2-ref.html
new file mode 100644
index 0000000000..a2fe8646e1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-2-ref.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+</head>
+<body>
+This test makes sure that the bold versions of the design system UI fonts work. The test passes if all the text below is bold.
+<div>
+<div style="display: inline-block; font: bold 72px 'ui-serif';">HeJllo</div>
+<div style="display: inline-block; font: bold 72px 'ui-monospaced';">HeJllo</div>
+<div style="display: inline-block; font: bold 72px 'ui-rounded';">HeJllo</div>
+<div style="display: inline-block; font: bold 72px '.AppleSystemUIFontSerif';">HeJllo</div>
+<div style="display: inline-block; font: bold 72px '.SF NS Mono';">HeJllo</div>
+<div style="display: inline-block; font: bold 72px '.SF UI Mono';">HeJllo</div>
+<div style="display: inline-block; font: bold 72px '.AppleSystemUIFontRounded';">HeJllo</div>
+<div style="display: inline-block; font: bold 72px '.AppleSystemUIFont';">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-2.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-2.html
new file mode 100644
index 0000000000..2827c6c2cb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-2.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#standard-font-families"/>
+<link rel="match" href="standard-font-family-2-ref.html"/>
+<meta name="assert" content="Bold versions of standard fonts work"/>
+</head>
+<body>
+This test makes sure that the bold versions of the design system UI fonts work. The test passes if all the text below is bold.
+<div>
+<div style="display: inline-block; font: bold 72px 'ui-serif'; font-synthesis: none;">HeJllo</div>
+<div style="display: inline-block; font: bold 72px 'ui-monospaced'; font-synthesis: none;">HeJllo</div>
+<div style="display: inline-block; font: bold 72px 'ui-rounded'; font-synthesis: none;">HeJllo</div>
+<div style="display: inline-block; font: bold 72px '.AppleSystemUIFontSerif'; font-synthesis: none;">HeJllo</div>
+<div style="display: inline-block; font: bold 72px '.SF NS Mono'; font-synthesis: none;">HeJllo</div>
+<div style="display: inline-block; font: bold 72px '.SF UI Mono'; font-synthesis: none;">HeJllo</div>
+<div style="display: inline-block; font: bold 72px '.AppleSystemUIFontRounded'; font-synthesis: none;">HeJllo</div>
+<div style="display: inline-block; font: bold 72px '.AppleSystemUIFont'; font-synthesis: none;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-20-notref.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-20-notref.html
new file mode 100644
index 0000000000..7e876ced31
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-20-notref.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font-size: 72px;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-20.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-20.html
new file mode 100644
index 0000000000..7d0335e061
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-20.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#standard-font-families"/>
+<link rel="mismatch" href="standard-font-family-20-notref.html"/>
+<meta name="assert" content="ui-sans-serif in @font-face works"/>
+<style>
+@font-face {
+ font-family: "AppleSystemUISansSerif";
+ src: local("ui-sans-serif");
+}
+</style>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font: 72px 'AppleSystemUISansSerif';">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-3-notref.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-3-notref.html
new file mode 100644
index 0000000000..766851077e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-3-notref.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font: 72px 'ui-serif'; font-synthesis: none;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-3.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-3.html
new file mode 100644
index 0000000000..38d2410a43
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-3.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#standard-font-families"/>
+<link rel="mismatch" href="standard-font-family-3-notref.html"/>
+<meta name="assert" content="ui-serif's bold isn't synthetic"/>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font: bold 72px 'ui-serif'; font-synthesis: none;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-4-notref.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-4-notref.html
new file mode 100644
index 0000000000..bd3b029267
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-4-notref.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font: 72px 'ui-monospaced'; font-synthesis: none;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-4.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-4.html
new file mode 100644
index 0000000000..11146c9b71
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-4.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#standard-font-families"/>
+<link rel="mismatch" href="standard-font-family-4-notref.html"/>
+<meta name="assert" content="ui-monospace's bold isn't synthetic"/>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font: bold 72px 'ui-monospace'; font-synthesis: none;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-5-notref.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-5-notref.html
new file mode 100644
index 0000000000..531ac6cd9b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-5-notref.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font: 72px 'ui-rounded'; font-synthesis: none;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-5.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-5.html
new file mode 100644
index 0000000000..7d2646bb1b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-5.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#standard-font-families"/>
+<link rel="mismatch" href="standard-font-family-5-notref.html"/>
+<meta name="assert" content="ui-rounded's bold isn't synthetic"/>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font: bold 72px 'ui-rounded'; font-synthesis: none;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-6-ref.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-6-ref.html
new file mode 100644
index 0000000000..3c26321fff
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-6-ref.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+</head>
+<body>
+This test makes sure that the design system UI fonts don't work unless they are accessed from their correct names. The test passes if all the text below is rendered in Times.
+<div>
+<div style="display: inline-block; font-size: 72px;">HeJllo</div>
+<div style="display: inline-block; font-size: 72px;">HeJllo</div>
+<div style="display: inline-block; font-size: 72px;">HeJllo</div>
+<div style="display: inline-block; font-size: 72px;">HeJllo</div>
+<div style="display: inline-block; font-size: 72px;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-6.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-6.html
new file mode 100644
index 0000000000..f6a0f158b9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-6.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#standard-font-families"/>
+<link rel="match" href="standard-font-family-6-ref.html"/>
+<meta name="assert" content="Standard fonts don't work in @font-face unless they are accessed from their correct names"/>
+<style>
+@font-face {
+ font-family: "DotAppleSystemUIFontSerif";
+ src: local(".AppleSystemUIFontSerif");
+}
+@font-face {
+ font-family: "DotSFNSMono";
+ src: local(".SF NS Mono");
+}
+@font-face {
+ font-family: "DotSFUIMono";
+ src: local(".SF UI Mono");
+}
+@font-face {
+ font-family: "DotAppleSystemUIFontRounded";
+ src: local(".AppleSystemUIFontRounded");
+}
+@font-face {
+ font-family: "DotAppleSystemUIFont";
+ src: local(".AppleSystemUIFont");
+}
+</style>
+</head>
+<body>
+This test makes sure that the design system UI fonts don't work unless they are accessed from their correct names. The test passes if all the text below is rendered in Times.
+<div>
+<div style="display: inline-block; font: 72px 'DotAppleSystemUIFontSerif';">HeJllo</div>
+<div style="display: inline-block; font: 72px 'DotSFNSMono';">HeJllo</div>
+<div style="display: inline-block; font: 72px 'DotSFUIMono';">HeJllo</div>
+<div style="display: inline-block; font: 72px 'DotAppleSystemUIFontRounded';">HeJllo</div>
+<div style="display: inline-block; font: 72px 'DotAppleSystemUIFont';">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-7-ref.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-7-ref.html
new file mode 100644
index 0000000000..0e2df68c1e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-7-ref.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+<style>
+@font-face {
+ font-family: "AppleSystemUISerif";
+ src: local("ui-serif");
+}
+@font-face {
+ font-family: "AppleSystemUIMonospaced";
+ src: local("ui-monospaced");
+}
+@font-face {
+ font-family: "AppleSystemUIRounded";
+ src: local("ui-rounded");
+}
+@font-face {
+ font-family: "AppleSystemUISansSerif";
+ src: local("ui-sans-serif");
+}
+@font-face {
+ font-family: "DotAppleSystemUIFontSerif";
+ src: local(".AppleSystemUIFontSerif");
+}
+@font-face {
+ font-family: "DotSFNSMono";
+ src: local(".SF NS Mono");
+}
+@font-face {
+ font-family: "DotSFUIMono";
+ src: local(".SF UI Mono");
+}
+@font-face {
+ font-family: "DotAppleSystemUIFontRounded";
+ src: local(".AppleSystemUIFontRounded");
+}
+@font-face {
+ font-family: "DotAppleSystemUIFont";
+ src: local(".AppleSystemUIFont");
+}
+</style>
+</head>
+<body>
+This test makes sure that the bold versions of the design system UI fonts work in @font-face. The test passes if all the text below is bold.
+<div>
+<div style="display: inline-block; font: bold 72px 'AppleSystemUISerif';">HeJllo</div>
+<div style="display: inline-block; font: bold 72px 'AppleSystemUIMonospaced';">HeJllo</div>
+<div style="display: inline-block; font: bold 72px 'AppleSystemUIRounded';">HeJllo</div>
+<div style="display: inline-block; font: bold 72px 'AppleSystemUISansSerif';">HeJllo</div>
+<div style="display: inline-block; font: bold 72px 'DotAppleSystemUIFontSerif';">HeJllo</div>
+<div style="display: inline-block; font: bold 72px 'DotSFNSMono';">HeJllo</div>
+<div style="display: inline-block; font: bold 72px 'DotSFUIMono';">HeJllo</div>
+<div style="display: inline-block; font: bold 72px 'DotAppleSystemUIFontRounded';">HeJllo</div>
+<div style="display: inline-block; font: bold 72px 'DotAppleSystemUIFont';">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-7.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-7.html
new file mode 100644
index 0000000000..11af83fc9e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-7.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#standard-font-families"/>
+<link rel="match" href="standard-font-family-7-ref.html"/>
+<meta name="assert" content="Bold versions of standard fonts work in @font-face"/>
+<style>
+@font-face {
+ font-family: "AppleSystemUISerif";
+ src: local("ui-serif");
+}
+@font-face {
+ font-family: "AppleSystemUIMonospaced";
+ src: local("ui-monospaced");
+}
+@font-face {
+ font-family: "AppleSystemUIRounded";
+ src: local("ui-rounded");
+}
+@font-face {
+ font-family: "AppleSystemUISansSerif";
+ src: local("ui-sans-serif");
+}
+@font-face {
+ font-family: "DotAppleSystemUIFontSerif";
+ src: local(".AppleSystemUIFontSerif");
+}
+@font-face {
+ font-family: "DotSFNSMono";
+ src: local(".SF NS Mono");
+}
+@font-face {
+ font-family: "DotSFUIMono";
+ src: local(".SF UI Mono");
+}
+@font-face {
+ font-family: "DotAppleSystemUIFontRounded";
+ src: local(".AppleSystemUIFontRounded");
+}
+@font-face {
+ font-family: "DotAppleSystemUIFont";
+ src: local(".AppleSystemUIFont");
+}
+</style>
+</head>
+<body>
+This test makes sure that the bold versions of the design system UI fonts work in @font-face. The test passes if all the text below is bold.
+<div>
+<div style="display: inline-block; font: bold 72px 'AppleSystemUISerif'; font-synthesis: none;">HeJllo</div>
+<div style="display: inline-block; font: bold 72px 'AppleSystemUIMonospaced'; font-synthesis: none;">HeJllo</div>
+<div style="display: inline-block; font: bold 72px 'AppleSystemUIRounded'; font-synthesis: none;">HeJllo</div>
+<div style="display: inline-block; font: bold 72px 'AppleSystemUISansSerif'; font-synthesis: none;">HeJllo</div>
+<div style="display: inline-block; font: bold 72px 'DotAppleSystemUIFontSerif'; font-synthesis: none;">HeJllo</div>
+<div style="display: inline-block; font: bold 72px 'DotSFNSMono'; font-synthesis: none;">HeJllo</div>
+<div style="display: inline-block; font: bold 72px 'DotSFUIMono'; font-synthesis: none;">HeJllo</div>
+<div style="display: inline-block; font: bold 72px 'DotAppleSystemUIFontRounded'; font-synthesis: none;">HeJllo</div>
+<div style="display: inline-block; font: bold 72px 'DotAppleSystemUIFont'; font-synthesis: none;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-8-notref.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-8-notref.html
new file mode 100644
index 0000000000..00aa33cbab
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-8-notref.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+<style>
+@font-face {
+ font-family: "AppleSystemUISerif";
+ src: local("ui-serif");
+}
+</style>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font: 72px 'AppleSystemUISerif'; font-synthesis: none;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-8.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-8.html
new file mode 100644
index 0000000000..b64cb8fb4c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-8.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#standard-font-families"/>
+<link rel="mismatch" href="standard-font-family-8-notref.html"/>
+<meta name="assert" content="ui-serif's bold in @font-face isn't synthetic"/>
+<style>
+@font-face {
+ font-family: "AppleSystemUISerif";
+ src: local("ui-serif");
+}
+</style>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font: bold 72px 'AppleSystemUISerif'; font-synthesis: none;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-9-notref.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-9-notref.html
new file mode 100644
index 0000000000..b9d1569e53
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-9-notref.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+<style>
+@font-face {
+ font-family: "AppleSystemUIMonospaced";
+ src: local("ui-monospaced");
+}
+</style>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font: 72px 'AppleSystemUIMonospaced'; font-synthesis: none;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-9.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-9.html
new file mode 100644
index 0000000000..e5afe8ab9a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-9.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#standard-font-families"/>
+<link rel="mismatch" href="standard-font-family-9-notref.html"/>
+<meta name="assert" content="ui-monospace's bold in @font-face isn't synthetic"/>
+<style>
+@font-face {
+ font-family: "AppleSystemUIMonospace";
+ src: local("ui-monospace");
+}
+</style>
+</head>
+<body>
+<div>
+<div style="display: inline-block; font: bold 72px 'AppleSystemUIMonospace'; font-synthesis: none;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family-ref.html b/testing/web-platform/tests/css/css-fonts/standard-font-family-ref.html
new file mode 100644
index 0000000000..3c26321fff
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family-ref.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+</head>
+<body>
+This test makes sure that the design system UI fonts don't work unless they are accessed from their correct names. The test passes if all the text below is rendered in Times.
+<div>
+<div style="display: inline-block; font-size: 72px;">HeJllo</div>
+<div style="display: inline-block; font-size: 72px;">HeJllo</div>
+<div style="display: inline-block; font-size: 72px;">HeJllo</div>
+<div style="display: inline-block; font-size: 72px;">HeJllo</div>
+<div style="display: inline-block; font-size: 72px;">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/standard-font-family.html b/testing/web-platform/tests/css/css-fonts/standard-font-family.html
new file mode 100644
index 0000000000..b093ad442e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/standard-font-family.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Myles C. Maxfield" href="mailto:mmaxfield@apple.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#standard-font-families"/>
+<link rel="match" href="standard-font-family-ref.html"/>
+<meta name="assert" content="Standard fonts don't work unless they are accessed from their correct names"/>
+</head>
+<body>
+This test makes sure that the design system UI fonts don't work unless they are accessed from their correct names. The test passes if all the text below is rendered in Times.
+<div>
+<div style="display: inline-block; font: 72px '.AppleSystemUIFontSerif';">HeJllo</div>
+<div style="display: inline-block; font: 72px '.SF NS Mono';">HeJllo</div>
+<div style="display: inline-block; font: 72px '.SF UI Mono';">HeJllo</div>
+<div style="display: inline-block; font: 72px '.AppleSystemUIFontRounded';">HeJllo</div>
+<div style="display: inline-block; font: 72px '.AppleSystemUIFont';">HeJllo</div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/support/100x100-lime.png b/testing/web-platform/tests/css/css-fonts/support/100x100-lime.png
new file mode 100644
index 0000000000..1b94770080
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/100x100-lime.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/100x100-red.png b/testing/web-platform/tests/css/css-fonts/support/100x100-red.png
new file mode 100644
index 0000000000..57bf3ddc52
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/100x100-red.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/1x1-green.png b/testing/web-platform/tests/css/css-fonts/support/1x1-green.png
new file mode 100644
index 0000000000..b98ca0ba0a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/1x1-green.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/1x1-lime.png b/testing/web-platform/tests/css/css-fonts/support/1x1-lime.png
new file mode 100644
index 0000000000..cb397fb090
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/1x1-lime.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/1x1-maroon.png b/testing/web-platform/tests/css/css-fonts/support/1x1-maroon.png
new file mode 100644
index 0000000000..3f86b07219
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/1x1-maroon.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/1x1-navy.png b/testing/web-platform/tests/css/css-fonts/support/1x1-navy.png
new file mode 100644
index 0000000000..9b9a03955b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/1x1-navy.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/1x1-red.png b/testing/web-platform/tests/css/css-fonts/support/1x1-red.png
new file mode 100644
index 0000000000..6bd73ac101
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/1x1-red.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/1x1-white.png b/testing/web-platform/tests/css/css-fonts/support/1x1-white.png
new file mode 100644
index 0000000000..dd43faec54
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/1x1-white.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/60x60-gg-rr.png b/testing/web-platform/tests/css/css-fonts/support/60x60-gg-rr.png
new file mode 100644
index 0000000000..84f5b2a4f1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/60x60-gg-rr.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/60x60-green.png b/testing/web-platform/tests/css/css-fonts/support/60x60-green.png
new file mode 100644
index 0000000000..b3c8cf3eb4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/60x60-green.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/README b/testing/web-platform/tests/css/css-fonts/support/README
new file mode 100644
index 0000000000..2e5f2ad073
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/README
@@ -0,0 +1,28 @@
+CSS Global Support Directory
+============================
+
+This directory contains common support files (such as images and external
+style sheets). These are sync'ed into the support directories of all our
+test suites. If you have test-suite-specific support files, please add
+them to the appropriate test-suite-specific support/ directory.
+
+If you add to a support/ directory, please run the tools/supportprop.py
+script from the top of the repository to cascade support files into the
+lower-level support directories.
+
+Description of the Common Support File Collection
+-------------------------------------------------
+
+The 1x1-* images are all exactly one pixel.
+
+The swatch-* images all use 15x15 cells.
+
+The square-* images all use 15x15 cells with one pixel borders.
+
+The pattern-* images use cells of various sizes:
+
+ pattern-grg-rgr-grg.png 20x20
+ pattern-rgr-grg-rgr.png 20x20
+ pattern-tr.png 15x15
+ pattern-grg-rrg-rgg.png 15x15
+
diff --git a/testing/web-platform/tests/css/css-fonts/support/bar_with_corner_dot.png b/testing/web-platform/tests/css/css-fonts/support/bar_with_corner_dot.png
new file mode 100644
index 0000000000..fbbc56de16
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/bar_with_corner_dot.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/black15x15.png b/testing/web-platform/tests/css/css-fonts/support/black15x15.png
new file mode 100644
index 0000000000..b1bbef2cd5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/black15x15.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/black96x96.png b/testing/web-platform/tests/css/css-fonts/support/black96x96.png
new file mode 100644
index 0000000000..4e5a7c7546
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/black96x96.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/blue-orange-rectangle.png b/testing/web-platform/tests/css/css-fonts/support/blue-orange-rectangle.png
new file mode 100644
index 0000000000..f43f193291
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/blue-orange-rectangle.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/blue15x15.png b/testing/web-platform/tests/css/css-fonts/support/blue15x15.png
new file mode 100644
index 0000000000..89de32fdb8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/blue15x15.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/blue96x96.png b/testing/web-platform/tests/css/css-fonts/support/blue96x96.png
new file mode 100644
index 0000000000..820f8cace2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/blue96x96.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/cat.png b/testing/web-platform/tests/css/css-fonts/support/cat.png
new file mode 100644
index 0000000000..85dd732481
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/cat.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/css/font-variant-features.css b/testing/web-platform/tests/css/css-fonts/support/css/font-variant-features.css
new file mode 100644
index 0000000000..fbe701918d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/css/font-variant-features.css
@@ -0,0 +1,63 @@
+body { margin: 10px; }
+
+@font-face {
+ font-family: gsub-test;
+ src: url(../fonts/gsubtest-lookup3.otf);
+}
+
+td.prop {
+ font-family: Menlo, monospace;
+ font-weight: normal;
+ text-align: left;
+ font-size: 80%;
+}
+
+td.features {
+ font-family: gsub-test;
+}
+
+.invalid {
+ color: red;
+}
+
+@font-feature-values gsub-test {
+ @styleset { ok-alt-a: 1 3 5; ok-alt-b: 19; }
+ @character-variant { ok-1: 78 2; }
+ @character-variant { ok-3: 23; }
+ @character-variant { not-good: 0 2; }
+ @annotation { ok-4: 1; }
+ @annotation { bogus-font-doesnt-support: 23; }
+ @annotation { circled: 1; }
+ @character-variant { multi-def: 4; }
+ @annotation { multi-def: 3; }
+ @styleset { multi-def2: 3 4 5; }
+ @styleset { MULTI-def2: 2 6; }
+ @styleset { out-of-bounds1: 0; out-of-bounds2: 100; }
+}
+
+@font-feature-values bogus-family {
+ @styleset { bogus: 3 4 7; }
+}
+
+@font-feature-values GSUB-tEsT {
+ @styleset { mixed-case: 3 4 7; }
+}
+
+@font-feature-values gSuB-tEsT {
+ @styleset { 3blah: 1 3; }
+}
+
+@font-feature-values gSuB-tEsT {
+ @styleset { moxie: 14; }
+ @styleset { 3blah: 1; }
+}
+
+@font-feature-values gSUB-TeST {
+ @styleset { moxie2: 14; }
+ @bongo { blah: 1; }
+}
+
+@font-feature-values gSUB-TEst {
+ @bongo { blah2: 1; }
+ @styleset { moxie3: 14; }
+}
diff --git a/testing/web-platform/tests/css/css-fonts/support/diamond.png b/testing/web-platform/tests/css/css-fonts/support/diamond.png
new file mode 100644
index 0000000000..51112efc7c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/diamond.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/font-family-keywords.js b/testing/web-platform/tests/css/css-fonts/support/font-family-keywords.js
new file mode 100644
index 0000000000..09bcf85c9f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/font-family-keywords.js
@@ -0,0 +1,27 @@
+// <generic-family> keywords, as specified in
+// https://drafts.csswg.org/css-fonts/#generic-family-value
+var kGenericFontFamilyKeywords = [
+ "serif",
+ "sans-serif",
+ "cursive",
+ "fantasy",
+ "monospace",
+ "system-ui",
+ "emoji",
+ "math",
+ "fangsong",
+ "ui-serif",
+ "ui-sans-serif",
+ "ui-monospace",
+ "ui-rounded",
+];
+
+// <family-name> values that had/have web-exposed behavior in some browsers, but
+// are not defined in the specification.
+var kNonGenericFontFamilyKeywords = [
+ "NonGenericFontFamilyName",
+ "-webkit-body",
+ "-webkit-standard",
+ "-webkit-pictograph",
+ "BlinkMacSystemFont",
+];
diff --git a/testing/web-platform/tests/css/css-fonts/support/font-weight-bolder-001-ref.png b/testing/web-platform/tests/css/css-fonts/support/font-weight-bolder-001-ref.png
new file mode 100644
index 0000000000..42675efe43
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/font-weight-bolder-001-ref.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/font-weight-lighter-001-ref.png b/testing/web-platform/tests/css/css-fonts/support/font-weight-lighter-001-ref.png
new file mode 100644
index 0000000000..78d964424b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/font-weight-lighter-001-ref.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/font-weight-normal-001-ref.png b/testing/web-platform/tests/css/css-fonts/support/font-weight-normal-001-ref.png
new file mode 100644
index 0000000000..b322e7066a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/font-weight-normal-001-ref.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/Exo-DemiBold.otf b/testing/web-platform/tests/css/css-fonts/support/fonts/Exo-DemiBold.otf
new file mode 100644
index 0000000000..b83a13a43f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/Exo-DemiBold.otf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/Exo2-SemiBold.otf b/testing/web-platform/tests/css/css-fonts/support/fonts/Exo2-SemiBold.otf
new file mode 100644
index 0000000000..76b49cdc33
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/Exo2-SemiBold.otf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/Exo2-SemiBoldCondensed.otf b/testing/web-platform/tests/css/css-fonts/support/fonts/Exo2-SemiBoldCondensed.otf
new file mode 100644
index 0000000000..832e1b44f7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/Exo2-SemiBoldCondensed.otf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/Exo2-SemiBoldExpanded.otf b/testing/web-platform/tests/css/css-fonts/support/fonts/Exo2-SemiBoldExpanded.otf
new file mode 100644
index 0000000000..f764e132a4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/Exo2-SemiBoldExpanded.otf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/FontWithFancyFeatures.otf b/testing/web-platform/tests/css/css-fonts/support/fonts/FontWithFancyFeatures.otf
new file mode 100644
index 0000000000..8c884829da
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/FontWithFancyFeatures.otf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/FontWithFeatures2.otf b/testing/web-platform/tests/css/css-fonts/support/fonts/FontWithFeatures2.otf
new file mode 100644
index 0000000000..e0bf4d51d5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/FontWithFeatures2.otf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/Inter-VF.subset.ttf b/testing/web-platform/tests/css/css-fonts/support/fonts/Inter-VF.subset.ttf
new file mode 100644
index 0000000000..ea32e1787e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/Inter-VF.subset.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/Lato-Medium-Liga.ttf b/testing/web-platform/tests/css/css-fonts/support/fonts/Lato-Medium-Liga.ttf
new file mode 100644
index 0000000000..3a0beaea38
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/Lato-Medium-Liga.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/Lato-Medium.ttf b/testing/web-platform/tests/css/css-fonts/support/fonts/Lato-Medium.ttf
new file mode 100644
index 0000000000..2c612da2ae
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/Lato-Medium.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/LigatureSymbolsWithSpaces.woff b/testing/web-platform/tests/css/css-fonts/support/fonts/LigatureSymbolsWithSpaces.woff
new file mode 100644
index 0000000000..1f0e7ca007
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/LigatureSymbolsWithSpaces.woff
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/LinLibertine_Re-4.7.5.woff b/testing/web-platform/tests/css/css-fonts/support/fonts/LinLibertine_Re-4.7.5.woff
new file mode 100644
index 0000000000..c953a546f0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/LinLibertine_Re-4.7.5.woff
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/RobotoExtremo-VF.subset.ttf b/testing/web-platform/tests/css/css-fonts/support/fonts/RobotoExtremo-VF.subset.ttf
new file mode 100644
index 0000000000..c29dad1f73
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/RobotoExtremo-VF.subset.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/Rochester.otf b/testing/web-platform/tests/css/css-fonts/support/fonts/Rochester.otf
new file mode 100644
index 0000000000..79f63ced68
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/Rochester.otf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/fail.woff b/testing/web-platform/tests/css/css-fonts/support/fonts/fail.woff
new file mode 100644
index 0000000000..33487cdbb4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/fail.woff
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-features.js b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-features.js
new file mode 100644
index 0000000000..52b2e2e249
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-features.js
@@ -0,0 +1,85 @@
+
+/* This file is autogenerated by makegsubfonts.py */
+
+/*
+ Features defined in gsubtest fonts with associated base
+ codepoints for each feature:
+
+ cp = codepoint for feature featX
+
+ cp default PASS
+ cp featX=1 FAIL
+ cp featX=2 FAIL
+
+ cp+1 default FAIL
+ cp+1 featX=1 PASS
+ cp+1 featX=2 FAIL
+
+ cp+2 default FAIL
+ cp+2 featX=1 FAIL
+ cp+2 featX=2 PASS
+
+*/
+
+var gFeatures = {
+ "MWL1": 0xe000, "NUM2": 0xe004, "PRIV": 0xe008, "T3ST": 0xe00c,
+ "TPSP": 0xe010, "abvf": 0xe014, "abvm": 0xe018, "abvs": 0xe01c,
+ "afrc": 0xe020, "akhn": 0xe024, "blwf": 0xe028, "blwm": 0xe02c,
+ "blws": 0xe030, "c2pc": 0xe034, "c2sc": 0xe038, "calt": 0xe03c,
+ "case": 0xe040, "ccmp": 0xe044, "cfar": 0xe048, "cjct": 0xe04c,
+ "clig": 0xe050, "cpct": 0xe054, "cpsp": 0xe058, "cswh": 0xe05c,
+ "curs": 0xe060, "cv00": 0xe064, "cv01": 0xe068, "cv02": 0xe06c,
+ "cv03": 0xe070, "cv04": 0xe074, "cv05": 0xe078, "cv06": 0xe07c,
+ "cv07": 0xe080, "cv08": 0xe084, "cv09": 0xe088, "cv10": 0xe08c,
+ "cv11": 0xe090, "cv12": 0xe094, "cv13": 0xe098, "cv14": 0xe09c,
+ "cv15": 0xe0a0, "cv16": 0xe0a4, "cv17": 0xe0a8, "cv18": 0xe0ac,
+ "cv19": 0xe0b0, "cv20": 0xe0b4, "cv21": 0xe0b8, "cv22": 0xe0bc,
+ "cv23": 0xe0c0, "cv24": 0xe0c4, "cv25": 0xe0c8, "cv26": 0xe0cc,
+ "cv27": 0xe0d0, "cv28": 0xe0d4, "cv29": 0xe0d8, "cv30": 0xe0dc,
+ "cv31": 0xe0e0, "cv32": 0xe0e4, "cv33": 0xe0e8, "cv34": 0xe0ec,
+ "cv35": 0xe0f0, "cv36": 0xe0f4, "cv37": 0xe0f8, "cv38": 0xe0fc,
+ "cv39": 0xe100, "cv40": 0xe104, "cv41": 0xe108, "cv42": 0xe10c,
+ "cv43": 0xe110, "cv44": 0xe114, "cv45": 0xe118, "cv46": 0xe11c,
+ "cv47": 0xe120, "cv48": 0xe124, "cv49": 0xe128, "cv50": 0xe12c,
+ "cv51": 0xe130, "cv52": 0xe134, "cv53": 0xe138, "cv54": 0xe13c,
+ "cv55": 0xe140, "cv56": 0xe144, "cv57": 0xe148, "cv58": 0xe14c,
+ "cv59": 0xe150, "cv60": 0xe154, "cv61": 0xe158, "cv62": 0xe15c,
+ "cv63": 0xe160, "cv64": 0xe164, "cv65": 0xe168, "cv66": 0xe16c,
+ "cv67": 0xe170, "cv68": 0xe174, "cv69": 0xe178, "cv70": 0xe17c,
+ "cv71": 0xe180, "cv72": 0xe184, "cv73": 0xe188, "cv74": 0xe18c,
+ "cv75": 0xe190, "cv76": 0xe194, "cv77": 0xe198, "cv78": 0xe19c,
+ "cv79": 0xe1a0, "cv80": 0xe1a4, "cv81": 0xe1a8, "cv82": 0xe1ac,
+ "cv83": 0xe1b0, "cv84": 0xe1b4, "cv85": 0xe1b8, "cv86": 0xe1bc,
+ "cv87": 0xe1c0, "cv88": 0xe1c4, "cv89": 0xe1c8, "cv90": 0xe1cc,
+ "cv91": 0xe1d0, "cv92": 0xe1d4, "cv93": 0xe1d8, "cv94": 0xe1dc,
+ "cv95": 0xe1e0, "cv96": 0xe1e4, "cv97": 0xe1e8, "cv98": 0xe1ec,
+ "cv99": 0xe1f0, "dist": 0xe1f4, "dlig": 0xe1f8, "dnom": 0xe1fc,
+ "expt": 0xe200, "falt": 0xe204, "fin2": 0xe208, "fin3": 0xe20c,
+ "fina": 0xe210, "frac": 0xe214, "fwid": 0xe218, "half": 0xe21c,
+ "haln": 0xe220, "halt": 0xe224, "hist": 0xe228, "hkna": 0xe22c,
+ "hlig": 0xe230, "hngl": 0xe234, "hojo": 0xe238, "hwid": 0xe23c,
+ "init": 0xe240, "isol": 0xe244, "ital": 0xe248, "jalt": 0xe24c,
+ "jp04": 0xe250, "jp78": 0xe254, "jp83": 0xe258, "jp90": 0xe25c,
+ "kern": 0xe260, "lfbd": 0xe264, "liga": 0xe268, "ljmo": 0xe26c,
+ "lnum": 0xe270, "locl": 0xe274, "ltra": 0xe278, "ltrm": 0xe27c,
+ "mark": 0xe280, "med2": 0xe284, "medi": 0xe288, "mgrk": 0xe28c,
+ "mkmk": 0xe290, "mset": 0xe294, "nalt": 0xe298, "nlck": 0xe29c,
+ "nukt": 0xe2a0, "numr": 0xe2a4, "onum": 0xe2a8, "opbd": 0xe2ac,
+ "ordn": 0xe2b0, "ornm": 0xe2b4, "palt": 0xe2b8, "pcap": 0xe2bc,
+ "pkna": 0xe2c0, "pnum": 0xe2c4, "pref": 0xe2c8, "pres": 0xe2cc,
+ "pstf": 0xe2d0, "psts": 0xe2d4, "pwid": 0xe2d8, "qwid": 0xe2dc,
+ "rand": 0xe2e0, "rkrf": 0xe2e4, "rlig": 0xe2e8, "rphf": 0xe2ec,
+ "rtbd": 0xe2f0, "rtla": 0xe2f4, "rtlm": 0xe2f8, "ruby": 0xe2fc,
+ "salt": 0xe300, "sinf": 0xe304, "size": 0xe308, "smcp": 0xe30c,
+ "smpl": 0xe310, "ss00": 0xe314, "ss01": 0xe318, "ss02": 0xe31c,
+ "ss03": 0xe320, "ss04": 0xe324, "ss05": 0xe328, "ss06": 0xe32c,
+ "ss07": 0xe330, "ss08": 0xe334, "ss09": 0xe338, "ss10": 0xe33c,
+ "ss11": 0xe340, "ss12": 0xe344, "ss13": 0xe348, "ss14": 0xe34c,
+ "ss15": 0xe350, "ss16": 0xe354, "ss17": 0xe358, "ss18": 0xe35c,
+ "ss19": 0xe360, "ss20": 0xe364, "ss21": 0xe368, "subs": 0xe36c,
+ "sups": 0xe370, "swsh": 0xe374, "titl": 0xe378, "tjmo": 0xe37c,
+ "tnam": 0xe380, "tnum": 0xe384, "trad": 0xe388, "twid": 0xe38c,
+ "unic": 0xe390, "valt": 0xe394, "vatu": 0xe398, "vert": 0xe39c,
+ "vhal": 0xe3a0, "vjmo": 0xe3a4, "vkna": 0xe3a8, "vkrn": 0xe3ac,
+ "vpal": 0xe3b0, "vrt2": 0xe3b4, "zero": 0xe3b8
+};
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-features.txt b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-features.txt
new file mode 100644
index 0000000000..c78addb96b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-features.txt
@@ -0,0 +1,251 @@
+# Feature To Unicode Mapping
+# --------------------------
+# This file is structured as:
+# feature tag target first alternate second alternate third alternate
+# with tab being the delimiter.
+#
+# Lines beginning with # should be ignored.
+# Empty or whitespace only lines should be ignored.
+
+abvf
+abvm
+abvs
+afrc
+akhn
+blwf
+blwm
+blws
+calt
+case
+ccmp
+cfar
+cjct
+clig
+cpct
+cpsp
+cswh
+curs
+# cv00 is a deliberately invalid feature tag
+cv00
+cv01
+cv02
+cv03
+cv04
+cv05
+cv06
+cv07
+cv08
+cv09
+cv10
+cv11
+cv12
+cv13
+cv14
+cv15
+cv16
+cv17
+cv18
+cv19
+cv20
+cv21
+cv22
+cv23
+cv24
+cv25
+cv26
+cv27
+cv28
+cv29
+cv30
+cv31
+cv32
+cv33
+cv34
+cv35
+cv36
+cv37
+cv38
+cv39
+cv40
+cv41
+cv42
+cv43
+cv44
+cv45
+cv46
+cv47
+cv48
+cv49
+cv50
+cv51
+cv52
+cv53
+cv54
+cv55
+cv56
+cv57
+cv58
+cv59
+cv60
+cv61
+cv62
+cv63
+cv64
+cv65
+cv66
+cv67
+cv68
+cv69
+cv70
+cv71
+cv72
+cv73
+cv74
+cv75
+cv76
+cv77
+cv78
+cv79
+cv80
+cv81
+cv82
+cv83
+cv84
+cv85
+cv86
+cv87
+cv88
+cv89
+cv90
+cv91
+cv92
+cv93
+cv94
+cv95
+cv96
+cv97
+cv98
+cv99
+c2pc
+c2sc
+dist
+dlig
+dnom
+expt
+falt
+fin2
+fin3
+fina
+frac
+fwid
+half
+haln
+halt
+hist
+hkna
+hlig
+hngl
+hojo
+hwid
+init
+isol
+ital
+jalt
+jp78
+jp83
+jp90
+jp04
+kern
+lfbd
+liga
+ljmo
+lnum
+locl
+ltra
+ltrm
+mark
+med2
+medi
+mgrk
+mkmk
+mset
+nalt
+nlck
+nukt
+numr
+onum
+opbd
+ordn
+ornm
+palt
+pcap
+pkna
+pnum
+pref
+pres
+pstf
+psts
+pwid
+qwid
+rand
+rkrf
+rlig
+rphf
+rtbd
+rtla
+rtlm
+ruby
+salt
+sinf
+size
+smcp
+smpl
+# ss00 is a deliberately invalid feature tag
+ss00
+ss01
+ss02
+ss03
+ss04
+ss05
+ss06
+ss07
+ss08
+ss09
+ss10
+ss11
+ss12
+ss13
+ss14
+ss15
+ss16
+ss17
+ss18
+ss19
+ss20
+# ss21 is a deliberately invalid feature tag
+ss21
+subs
+sups
+swsh
+titl
+tjmo
+tnam
+tnum
+trad
+twid
+unic
+valt
+vatu
+vert
+vhal
+vjmo
+vkna
+vkrn
+vpal
+vrt2
+zero
+MWL1
+NUM2
+PRIV
+T3ST
+TPSP
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup1.otf b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup1.otf
new file mode 100644
index 0000000000..9f359e51d2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup1.otf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.otf b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.otf
new file mode 100644
index 0000000000..86d79a0d8f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.otf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/features.fea b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/features.fea
new file mode 100644
index 0000000000..d2fa30d83a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/features.fea
@@ -0,0 +1,3834 @@
+languagesystem DFLT dflt;
+
+
+# GSUB
+
+
+lookup AlternateSubstitutionlookup0 {
+ lookupflag 0;
+ sub \MWL1.default from [\MWL1.fail \MWL1.fail \MWL1.fail ];
+ sub \MWL1.alt1 from [\MWL1.pass \MWL1.fail \MWL1.fail ];
+ sub \MWL1.alt2 from [\MWL1.fail \MWL1.pass \MWL1.fail ];
+ sub \MWL1.alt3 from [\MWL1.fail \MWL1.fail \MWL1.pass ];
+} AlternateSubstitutionlookup0;
+
+lookup AlternateSubstitutionlookup1 {
+ lookupflag 0;
+ sub \NUM2.default from [\NUM2.fail \NUM2.fail \NUM2.fail ];
+ sub \NUM2.alt1 from [\NUM2.pass \NUM2.fail \NUM2.fail ];
+ sub \NUM2.alt2 from [\NUM2.fail \NUM2.pass \NUM2.fail ];
+ sub \NUM2.alt3 from [\NUM2.fail \NUM2.fail \NUM2.pass ];
+} AlternateSubstitutionlookup1;
+
+lookup AlternateSubstitutionlookup2 {
+ lookupflag 0;
+ sub \PRIV.default from [\PRIV.fail \PRIV.fail \PRIV.fail ];
+ sub \PRIV.alt1 from [\PRIV.pass \PRIV.fail \PRIV.fail ];
+ sub \PRIV.alt2 from [\PRIV.fail \PRIV.pass \PRIV.fail ];
+ sub \PRIV.alt3 from [\PRIV.fail \PRIV.fail \PRIV.pass ];
+} AlternateSubstitutionlookup2;
+
+lookup AlternateSubstitutionlookup3 {
+ lookupflag 0;
+ sub \T3ST.default from [\T3ST.fail \T3ST.fail \T3ST.fail ];
+ sub \T3ST.alt1 from [\T3ST.pass \T3ST.fail \T3ST.fail ];
+ sub \T3ST.alt2 from [\T3ST.fail \T3ST.pass \T3ST.fail ];
+ sub \T3ST.alt3 from [\T3ST.fail \T3ST.fail \T3ST.pass ];
+} AlternateSubstitutionlookup3;
+
+lookup AlternateSubstitutionlookup4 {
+ lookupflag 0;
+ sub \TPSP.default from [\TPSP.fail \TPSP.fail \TPSP.fail ];
+ sub \TPSP.alt1 from [\TPSP.pass \TPSP.fail \TPSP.fail ];
+ sub \TPSP.alt2 from [\TPSP.fail \TPSP.pass \TPSP.fail ];
+ sub \TPSP.alt3 from [\TPSP.fail \TPSP.fail \TPSP.pass ];
+} AlternateSubstitutionlookup4;
+
+lookup abvfAboveBaseFormslookup5 {
+ lookupflag 0;
+ sub \abvf.default from [\abvf.fail \abvf.fail \abvf.fail ];
+ sub \abvf.alt1 from [\abvf.pass \abvf.fail \abvf.fail ];
+ sub \abvf.alt2 from [\abvf.fail \abvf.pass \abvf.fail ];
+ sub \abvf.alt3 from [\abvf.fail \abvf.fail \abvf.pass ];
+} abvfAboveBaseFormslookup5;
+
+lookup abvmAboveBaseMarklookup6 {
+ lookupflag 0;
+ sub \abvm.default from [\abvm.fail \abvm.fail \abvm.fail ];
+ sub \abvm.alt1 from [\abvm.pass \abvm.fail \abvm.fail ];
+ sub \abvm.alt2 from [\abvm.fail \abvm.pass \abvm.fail ];
+ sub \abvm.alt3 from [\abvm.fail \abvm.fail \abvm.pass ];
+} abvmAboveBaseMarklookup6;
+
+lookup abvsAboveBaseSubstitutionslooku {
+ lookupflag 0;
+ sub \abvs.default from [\abvs.fail \abvs.fail \abvs.fail ];
+ sub \abvs.alt1 from [\abvs.pass \abvs.fail \abvs.fail ];
+ sub \abvs.alt2 from [\abvs.fail \abvs.pass \abvs.fail ];
+ sub \abvs.alt3 from [\abvs.fail \abvs.fail \abvs.pass ];
+} abvsAboveBaseSubstitutionslooku;
+
+lookup afrcVerticalFractionslookup8 {
+ lookupflag 0;
+ sub \afrc.default from [\afrc.fail \afrc.fail \afrc.fail ];
+ sub \afrc.alt1 from [\afrc.pass \afrc.fail \afrc.fail ];
+ sub \afrc.alt2 from [\afrc.fail \afrc.pass \afrc.fail ];
+ sub \afrc.alt3 from [\afrc.fail \afrc.fail \afrc.pass ];
+} afrcVerticalFractionslookup8;
+
+lookup akhnAkhandlookup9 {
+ lookupflag 0;
+ sub \akhn.default from [\akhn.fail \akhn.fail \akhn.fail ];
+ sub \akhn.alt1 from [\akhn.pass \akhn.fail \akhn.fail ];
+ sub \akhn.alt2 from [\akhn.fail \akhn.pass \akhn.fail ];
+ sub \akhn.alt3 from [\akhn.fail \akhn.fail \akhn.pass ];
+} akhnAkhandlookup9;
+
+lookup blwfBelowBaseFormslookup10 {
+ lookupflag 0;
+ sub \blwf.default from [\blwf.fail \blwf.fail \blwf.fail ];
+ sub \blwf.alt1 from [\blwf.pass \blwf.fail \blwf.fail ];
+ sub \blwf.alt2 from [\blwf.fail \blwf.pass \blwf.fail ];
+ sub \blwf.alt3 from [\blwf.fail \blwf.fail \blwf.pass ];
+} blwfBelowBaseFormslookup10;
+
+lookup blwmBelowBaseMarklookup11 {
+ lookupflag 0;
+ sub \blwm.default from [\blwm.fail \blwm.fail \blwm.fail ];
+ sub \blwm.alt1 from [\blwm.pass \blwm.fail \blwm.fail ];
+ sub \blwm.alt2 from [\blwm.fail \blwm.pass \blwm.fail ];
+ sub \blwm.alt3 from [\blwm.fail \blwm.fail \blwm.pass ];
+} blwmBelowBaseMarklookup11;
+
+lookup blwsBelowBaseSubstitutionslooku {
+ lookupflag 0;
+ sub \blws.default from [\blws.fail \blws.fail \blws.fail ];
+ sub \blws.alt1 from [\blws.pass \blws.fail \blws.fail ];
+ sub \blws.alt2 from [\blws.fail \blws.pass \blws.fail ];
+ sub \blws.alt3 from [\blws.fail \blws.fail \blws.pass ];
+} blwsBelowBaseSubstitutionslooku;
+
+lookup c2pcCapitalstoPetiteCapitalsloo {
+ lookupflag 0;
+ sub \c2pc.default from [\c2pc.fail \c2pc.fail \c2pc.fail ];
+ sub \c2pc.alt1 from [\c2pc.pass \c2pc.fail \c2pc.fail ];
+ sub \c2pc.alt2 from [\c2pc.fail \c2pc.pass \c2pc.fail ];
+ sub \c2pc.alt3 from [\c2pc.fail \c2pc.fail \c2pc.pass ];
+} c2pcCapitalstoPetiteCapitalsloo;
+
+lookup c2scCapitalstoSmallCapitalslook {
+ lookupflag 0;
+ sub \c2sc.default from [\c2sc.fail \c2sc.fail \c2sc.fail ];
+ sub \c2sc.alt1 from [\c2sc.pass \c2sc.fail \c2sc.fail ];
+ sub \c2sc.alt2 from [\c2sc.fail \c2sc.pass \c2sc.fail ];
+ sub \c2sc.alt3 from [\c2sc.fail \c2sc.fail \c2sc.pass ];
+} c2scCapitalstoSmallCapitalslook;
+
+lookup caltContextualAlternateslookup1 {
+ lookupflag 0;
+ sub \calt.default from [\calt.fail \calt.fail \calt.fail ];
+ sub \calt.alt1 from [\calt.pass \calt.fail \calt.fail ];
+ sub \calt.alt2 from [\calt.fail \calt.pass \calt.fail ];
+ sub \calt.alt3 from [\calt.fail \calt.fail \calt.pass ];
+} caltContextualAlternateslookup1;
+
+lookup caseCaseSensitiveFormslookup16 {
+ lookupflag 0;
+ sub \case.default from [\case.fail \case.fail \case.fail ];
+ sub \case.alt1 from [\case.pass \case.fail \case.fail ];
+ sub \case.alt2 from [\case.fail \case.pass \case.fail ];
+ sub \case.alt3 from [\case.fail \case.fail \case.pass ];
+} caseCaseSensitiveFormslookup16;
+
+lookup ccmpGlyphCompositionDecompositi {
+ lookupflag 0;
+ sub \ccmp.default from [\ccmp.fail \ccmp.fail \ccmp.fail ];
+ sub \ccmp.alt1 from [\ccmp.pass \ccmp.fail \ccmp.fail ];
+ sub \ccmp.alt2 from [\ccmp.fail \ccmp.pass \ccmp.fail ];
+ sub \ccmp.alt3 from [\ccmp.fail \ccmp.fail \ccmp.pass ];
+} ccmpGlyphCompositionDecompositi;
+
+lookup cfarConjunctFormAfterRolookup18 {
+ lookupflag 0;
+ sub \cfar.default from [\cfar.fail \cfar.fail \cfar.fail ];
+ sub \cfar.alt1 from [\cfar.pass \cfar.fail \cfar.fail ];
+ sub \cfar.alt2 from [\cfar.fail \cfar.pass \cfar.fail ];
+ sub \cfar.alt3 from [\cfar.fail \cfar.fail \cfar.pass ];
+} cfarConjunctFormAfterRolookup18;
+
+lookup cjctConjunctFormslookup19 {
+ lookupflag 0;
+ sub \cjct.default from [\cjct.fail \cjct.fail \cjct.fail ];
+ sub \cjct.alt1 from [\cjct.pass \cjct.fail \cjct.fail ];
+ sub \cjct.alt2 from [\cjct.fail \cjct.pass \cjct.fail ];
+ sub \cjct.alt3 from [\cjct.fail \cjct.fail \cjct.pass ];
+} cjctConjunctFormslookup19;
+
+lookup cligContextualLigatureslookup20 {
+ lookupflag 0;
+ sub \clig.default from [\clig.fail \clig.fail \clig.fail ];
+ sub \clig.alt1 from [\clig.pass \clig.fail \clig.fail ];
+ sub \clig.alt2 from [\clig.fail \clig.pass \clig.fail ];
+ sub \clig.alt3 from [\clig.fail \clig.fail \clig.pass ];
+} cligContextualLigatureslookup20;
+
+lookup cpctCenteredCJKPunctuationlooku {
+ lookupflag 0;
+ sub \cpct.default from [\cpct.fail \cpct.fail \cpct.fail ];
+ sub \cpct.alt1 from [\cpct.pass \cpct.fail \cpct.fail ];
+ sub \cpct.alt2 from [\cpct.fail \cpct.pass \cpct.fail ];
+ sub \cpct.alt3 from [\cpct.fail \cpct.fail \cpct.pass ];
+} cpctCenteredCJKPunctuationlooku;
+
+lookup cpspCapitalSpacinglookup22 {
+ lookupflag 0;
+ sub \cpsp.default from [\cpsp.fail \cpsp.fail \cpsp.fail ];
+ sub \cpsp.alt1 from [\cpsp.pass \cpsp.fail \cpsp.fail ];
+ sub \cpsp.alt2 from [\cpsp.fail \cpsp.pass \cpsp.fail ];
+ sub \cpsp.alt3 from [\cpsp.fail \cpsp.fail \cpsp.pass ];
+} cpspCapitalSpacinglookup22;
+
+lookup cswhContextualSwashlookup23 {
+ lookupflag 0;
+ sub \cswh.default from [\cswh.fail \cswh.fail \cswh.fail ];
+ sub \cswh.alt1 from [\cswh.pass \cswh.fail \cswh.fail ];
+ sub \cswh.alt2 from [\cswh.fail \cswh.pass \cswh.fail ];
+ sub \cswh.alt3 from [\cswh.fail \cswh.fail \cswh.pass ];
+} cswhContextualSwashlookup23;
+
+lookup cursCursiveAttachmentlookup24 {
+ lookupflag 0;
+ sub \curs.default from [\curs.fail \curs.fail \curs.fail ];
+ sub \curs.alt1 from [\curs.pass \curs.fail \curs.fail ];
+ sub \curs.alt2 from [\curs.fail \curs.pass \curs.fail ];
+ sub \curs.alt3 from [\curs.fail \curs.fail \curs.pass ];
+} cursCursiveAttachmentlookup24;
+
+lookup cv00CharacterVariants00lookup25 {
+ lookupflag 0;
+ sub \cv00.default from [\cv00.fail \cv00.fail \cv00.fail ];
+ sub \cv00.alt1 from [\cv00.pass \cv00.fail \cv00.fail ];
+ sub \cv00.alt2 from [\cv00.fail \cv00.pass \cv00.fail ];
+ sub \cv00.alt3 from [\cv00.fail \cv00.fail \cv00.pass ];
+} cv00CharacterVariants00lookup25;
+
+lookup cv01CharacterVariants01lookup26 {
+ lookupflag 0;
+ sub \cv01.default from [\cv01.fail \cv01.fail \cv01.fail ];
+ sub \cv01.alt1 from [\cv01.pass \cv01.fail \cv01.fail ];
+ sub \cv01.alt2 from [\cv01.fail \cv01.pass \cv01.fail ];
+ sub \cv01.alt3 from [\cv01.fail \cv01.fail \cv01.pass ];
+} cv01CharacterVariants01lookup26;
+
+lookup cv02CharacterVariants02lookup27 {
+ lookupflag 0;
+ sub \cv02.default from [\cv02.fail \cv02.fail \cv02.fail ];
+ sub \cv02.alt1 from [\cv02.pass \cv02.fail \cv02.fail ];
+ sub \cv02.alt2 from [\cv02.fail \cv02.pass \cv02.fail ];
+ sub \cv02.alt3 from [\cv02.fail \cv02.fail \cv02.pass ];
+} cv02CharacterVariants02lookup27;
+
+lookup cv03CharacterVariants03lookup28 {
+ lookupflag 0;
+ sub \cv03.default from [\cv03.fail \cv03.fail \cv03.fail ];
+ sub \cv03.alt1 from [\cv03.pass \cv03.fail \cv03.fail ];
+ sub \cv03.alt2 from [\cv03.fail \cv03.pass \cv03.fail ];
+ sub \cv03.alt3 from [\cv03.fail \cv03.fail \cv03.pass ];
+} cv03CharacterVariants03lookup28;
+
+lookup cv04CharacterVariants04lookup29 {
+ lookupflag 0;
+ sub \cv04.default from [\cv04.fail \cv04.fail \cv04.fail ];
+ sub \cv04.alt1 from [\cv04.pass \cv04.fail \cv04.fail ];
+ sub \cv04.alt2 from [\cv04.fail \cv04.pass \cv04.fail ];
+ sub \cv04.alt3 from [\cv04.fail \cv04.fail \cv04.pass ];
+} cv04CharacterVariants04lookup29;
+
+lookup cv05CharacterVariants05lookup30 {
+ lookupflag 0;
+ sub \cv05.default from [\cv05.fail \cv05.fail \cv05.fail ];
+ sub \cv05.alt1 from [\cv05.pass \cv05.fail \cv05.fail ];
+ sub \cv05.alt2 from [\cv05.fail \cv05.pass \cv05.fail ];
+ sub \cv05.alt3 from [\cv05.fail \cv05.fail \cv05.pass ];
+} cv05CharacterVariants05lookup30;
+
+lookup cv06CharacterVariants06lookup31 {
+ lookupflag 0;
+ sub \cv06.default from [\cv06.fail \cv06.fail \cv06.fail ];
+ sub \cv06.alt1 from [\cv06.pass \cv06.fail \cv06.fail ];
+ sub \cv06.alt2 from [\cv06.fail \cv06.pass \cv06.fail ];
+ sub \cv06.alt3 from [\cv06.fail \cv06.fail \cv06.pass ];
+} cv06CharacterVariants06lookup31;
+
+lookup cv07CharacterVariants07lookup32 {
+ lookupflag 0;
+ sub \cv07.default from [\cv07.fail \cv07.fail \cv07.fail ];
+ sub \cv07.alt1 from [\cv07.pass \cv07.fail \cv07.fail ];
+ sub \cv07.alt2 from [\cv07.fail \cv07.pass \cv07.fail ];
+ sub \cv07.alt3 from [\cv07.fail \cv07.fail \cv07.pass ];
+} cv07CharacterVariants07lookup32;
+
+lookup cv08CharacterVariants08lookup33 {
+ lookupflag 0;
+ sub \cv08.default from [\cv08.fail \cv08.fail \cv08.fail ];
+ sub \cv08.alt1 from [\cv08.pass \cv08.fail \cv08.fail ];
+ sub \cv08.alt2 from [\cv08.fail \cv08.pass \cv08.fail ];
+ sub \cv08.alt3 from [\cv08.fail \cv08.fail \cv08.pass ];
+} cv08CharacterVariants08lookup33;
+
+lookup cv09CharacterVariants09lookup34 {
+ lookupflag 0;
+ sub \cv09.default from [\cv09.fail \cv09.fail \cv09.fail ];
+ sub \cv09.alt1 from [\cv09.pass \cv09.fail \cv09.fail ];
+ sub \cv09.alt2 from [\cv09.fail \cv09.pass \cv09.fail ];
+ sub \cv09.alt3 from [\cv09.fail \cv09.fail \cv09.pass ];
+} cv09CharacterVariants09lookup34;
+
+lookup cv10CharacterVariants10lookup35 {
+ lookupflag 0;
+ sub \cv10.default from [\cv10.fail \cv10.fail \cv10.fail ];
+ sub \cv10.alt1 from [\cv10.pass \cv10.fail \cv10.fail ];
+ sub \cv10.alt2 from [\cv10.fail \cv10.pass \cv10.fail ];
+ sub \cv10.alt3 from [\cv10.fail \cv10.fail \cv10.pass ];
+} cv10CharacterVariants10lookup35;
+
+lookup AlternateSubstitutionlookup36 {
+ lookupflag 0;
+ sub \cv11.default from [\cv11.fail \cv11.fail \cv11.fail ];
+ sub \cv11.alt1 from [\cv11.pass \cv11.fail \cv11.fail ];
+ sub \cv11.alt2 from [\cv11.fail \cv11.pass \cv11.fail ];
+ sub \cv11.alt3 from [\cv11.fail \cv11.fail \cv11.pass ];
+} AlternateSubstitutionlookup36;
+
+lookup AlternateSubstitutionlookup37 {
+ lookupflag 0;
+ sub \cv12.default from [\cv12.fail \cv12.fail \cv12.fail ];
+ sub \cv12.alt1 from [\cv12.pass \cv12.fail \cv12.fail ];
+ sub \cv12.alt2 from [\cv12.fail \cv12.pass \cv12.fail ];
+ sub \cv12.alt3 from [\cv12.fail \cv12.fail \cv12.pass ];
+} AlternateSubstitutionlookup37;
+
+lookup AlternateSubstitutionlookup38 {
+ lookupflag 0;
+ sub \cv13.default from [\cv13.fail \cv13.fail \cv13.fail ];
+ sub \cv13.alt1 from [\cv13.pass \cv13.fail \cv13.fail ];
+ sub \cv13.alt2 from [\cv13.fail \cv13.pass \cv13.fail ];
+ sub \cv13.alt3 from [\cv13.fail \cv13.fail \cv13.pass ];
+} AlternateSubstitutionlookup38;
+
+lookup AlternateSubstitutionlookup39 {
+ lookupflag 0;
+ sub \cv14.default from [\cv14.fail \cv14.fail \cv14.fail ];
+ sub \cv14.alt1 from [\cv14.pass \cv14.fail \cv14.fail ];
+ sub \cv14.alt2 from [\cv14.fail \cv14.pass \cv14.fail ];
+ sub \cv14.alt3 from [\cv14.fail \cv14.fail \cv14.pass ];
+} AlternateSubstitutionlookup39;
+
+lookup AlternateSubstitutionlookup40 {
+ lookupflag 0;
+ sub \cv15.default from [\cv15.fail \cv15.fail \cv15.fail ];
+ sub \cv15.alt1 from [\cv15.pass \cv15.fail \cv15.fail ];
+ sub \cv15.alt2 from [\cv15.fail \cv15.pass \cv15.fail ];
+ sub \cv15.alt3 from [\cv15.fail \cv15.fail \cv15.pass ];
+} AlternateSubstitutionlookup40;
+
+lookup AlternateSubstitutionlookup41 {
+ lookupflag 0;
+ sub \cv16.default from [\cv16.fail \cv16.fail \cv16.fail ];
+ sub \cv16.alt1 from [\cv16.pass \cv16.fail \cv16.fail ];
+ sub \cv16.alt2 from [\cv16.fail \cv16.pass \cv16.fail ];
+ sub \cv16.alt3 from [\cv16.fail \cv16.fail \cv16.pass ];
+} AlternateSubstitutionlookup41;
+
+lookup AlternateSubstitutionlookup42 {
+ lookupflag 0;
+ sub \cv17.default from [\cv17.fail \cv17.fail \cv17.fail ];
+ sub \cv17.alt1 from [\cv17.pass \cv17.fail \cv17.fail ];
+ sub \cv17.alt2 from [\cv17.fail \cv17.pass \cv17.fail ];
+ sub \cv17.alt3 from [\cv17.fail \cv17.fail \cv17.pass ];
+} AlternateSubstitutionlookup42;
+
+lookup AlternateSubstitutionlookup43 {
+ lookupflag 0;
+ sub \cv18.default from [\cv18.fail \cv18.fail \cv18.fail ];
+ sub \cv18.alt1 from [\cv18.pass \cv18.fail \cv18.fail ];
+ sub \cv18.alt2 from [\cv18.fail \cv18.pass \cv18.fail ];
+ sub \cv18.alt3 from [\cv18.fail \cv18.fail \cv18.pass ];
+} AlternateSubstitutionlookup43;
+
+lookup AlternateSubstitutionlookup44 {
+ lookupflag 0;
+ sub \cv19.default from [\cv19.fail \cv19.fail \cv19.fail ];
+ sub \cv19.alt1 from [\cv19.pass \cv19.fail \cv19.fail ];
+ sub \cv19.alt2 from [\cv19.fail \cv19.pass \cv19.fail ];
+ sub \cv19.alt3 from [\cv19.fail \cv19.fail \cv19.pass ];
+} AlternateSubstitutionlookup44;
+
+lookup AlternateSubstitutionlookup45 {
+ lookupflag 0;
+ sub \cv20.default from [\cv20.fail \cv20.fail \cv20.fail ];
+ sub \cv20.alt1 from [\cv20.pass \cv20.fail \cv20.fail ];
+ sub \cv20.alt2 from [\cv20.fail \cv20.pass \cv20.fail ];
+ sub \cv20.alt3 from [\cv20.fail \cv20.fail \cv20.pass ];
+} AlternateSubstitutionlookup45;
+
+lookup AlternateSubstitutionlookup46 {
+ lookupflag 0;
+ sub \cv21.default from [\cv21.fail \cv21.fail \cv21.fail ];
+ sub \cv21.alt1 from [\cv21.pass \cv21.fail \cv21.fail ];
+ sub \cv21.alt2 from [\cv21.fail \cv21.pass \cv21.fail ];
+ sub \cv21.alt3 from [\cv21.fail \cv21.fail \cv21.pass ];
+} AlternateSubstitutionlookup46;
+
+lookup AlternateSubstitutionlookup47 {
+ lookupflag 0;
+ sub \cv22.default from [\cv22.fail \cv22.fail \cv22.fail ];
+ sub \cv22.alt1 from [\cv22.pass \cv22.fail \cv22.fail ];
+ sub \cv22.alt2 from [\cv22.fail \cv22.pass \cv22.fail ];
+ sub \cv22.alt3 from [\cv22.fail \cv22.fail \cv22.pass ];
+} AlternateSubstitutionlookup47;
+
+lookup AlternateSubstitutionlookup48 {
+ lookupflag 0;
+ sub \cv23.default from [\cv23.fail \cv23.fail \cv23.fail ];
+ sub \cv23.alt1 from [\cv23.pass \cv23.fail \cv23.fail ];
+ sub \cv23.alt2 from [\cv23.fail \cv23.pass \cv23.fail ];
+ sub \cv23.alt3 from [\cv23.fail \cv23.fail \cv23.pass ];
+} AlternateSubstitutionlookup48;
+
+lookup AlternateSubstitutionlookup49 {
+ lookupflag 0;
+ sub \cv24.default from [\cv24.fail \cv24.fail \cv24.fail ];
+ sub \cv24.alt1 from [\cv24.pass \cv24.fail \cv24.fail ];
+ sub \cv24.alt2 from [\cv24.fail \cv24.pass \cv24.fail ];
+ sub \cv24.alt3 from [\cv24.fail \cv24.fail \cv24.pass ];
+} AlternateSubstitutionlookup49;
+
+lookup AlternateSubstitutionlookup50 {
+ lookupflag 0;
+ sub \cv25.default from [\cv25.fail \cv25.fail \cv25.fail ];
+ sub \cv25.alt1 from [\cv25.pass \cv25.fail \cv25.fail ];
+ sub \cv25.alt2 from [\cv25.fail \cv25.pass \cv25.fail ];
+ sub \cv25.alt3 from [\cv25.fail \cv25.fail \cv25.pass ];
+} AlternateSubstitutionlookup50;
+
+lookup AlternateSubstitutionlookup51 {
+ lookupflag 0;
+ sub \cv26.default from [\cv26.fail \cv26.fail \cv26.fail ];
+ sub \cv26.alt1 from [\cv26.pass \cv26.fail \cv26.fail ];
+ sub \cv26.alt2 from [\cv26.fail \cv26.pass \cv26.fail ];
+ sub \cv26.alt3 from [\cv26.fail \cv26.fail \cv26.pass ];
+} AlternateSubstitutionlookup51;
+
+lookup AlternateSubstitutionlookup52 {
+ lookupflag 0;
+ sub \cv27.default from [\cv27.fail \cv27.fail \cv27.fail ];
+ sub \cv27.alt1 from [\cv27.pass \cv27.fail \cv27.fail ];
+ sub \cv27.alt2 from [\cv27.fail \cv27.pass \cv27.fail ];
+ sub \cv27.alt3 from [\cv27.fail \cv27.fail \cv27.pass ];
+} AlternateSubstitutionlookup52;
+
+lookup AlternateSubstitutionlookup53 {
+ lookupflag 0;
+ sub \cv28.default from [\cv28.fail \cv28.fail \cv28.fail ];
+ sub \cv28.alt1 from [\cv28.pass \cv28.fail \cv28.fail ];
+ sub \cv28.alt2 from [\cv28.fail \cv28.pass \cv28.fail ];
+ sub \cv28.alt3 from [\cv28.fail \cv28.fail \cv28.pass ];
+} AlternateSubstitutionlookup53;
+
+lookup AlternateSubstitutionlookup54 {
+ lookupflag 0;
+ sub \cv29.default from [\cv29.fail \cv29.fail \cv29.fail ];
+ sub \cv29.alt1 from [\cv29.pass \cv29.fail \cv29.fail ];
+ sub \cv29.alt2 from [\cv29.fail \cv29.pass \cv29.fail ];
+ sub \cv29.alt3 from [\cv29.fail \cv29.fail \cv29.pass ];
+} AlternateSubstitutionlookup54;
+
+lookup AlternateSubstitutionlookup55 {
+ lookupflag 0;
+ sub \cv30.default from [\cv30.fail \cv30.fail \cv30.fail ];
+ sub \cv30.alt1 from [\cv30.pass \cv30.fail \cv30.fail ];
+ sub \cv30.alt2 from [\cv30.fail \cv30.pass \cv30.fail ];
+ sub \cv30.alt3 from [\cv30.fail \cv30.fail \cv30.pass ];
+} AlternateSubstitutionlookup55;
+
+lookup AlternateSubstitutionlookup56 {
+ lookupflag 0;
+ sub \cv31.default from [\cv31.fail \cv31.fail \cv31.fail ];
+ sub \cv31.alt1 from [\cv31.pass \cv31.fail \cv31.fail ];
+ sub \cv31.alt2 from [\cv31.fail \cv31.pass \cv31.fail ];
+ sub \cv31.alt3 from [\cv31.fail \cv31.fail \cv31.pass ];
+} AlternateSubstitutionlookup56;
+
+lookup AlternateSubstitutionlookup57 {
+ lookupflag 0;
+ sub \cv32.default from [\cv32.fail \cv32.fail \cv32.fail ];
+ sub \cv32.alt1 from [\cv32.pass \cv32.fail \cv32.fail ];
+ sub \cv32.alt2 from [\cv32.fail \cv32.pass \cv32.fail ];
+ sub \cv32.alt3 from [\cv32.fail \cv32.fail \cv32.pass ];
+} AlternateSubstitutionlookup57;
+
+lookup AlternateSubstitutionlookup58 {
+ lookupflag 0;
+ sub \cv33.default from [\cv33.fail \cv33.fail \cv33.fail ];
+ sub \cv33.alt1 from [\cv33.pass \cv33.fail \cv33.fail ];
+ sub \cv33.alt2 from [\cv33.fail \cv33.pass \cv33.fail ];
+ sub \cv33.alt3 from [\cv33.fail \cv33.fail \cv33.pass ];
+} AlternateSubstitutionlookup58;
+
+lookup AlternateSubstitutionlookup59 {
+ lookupflag 0;
+ sub \cv34.default from [\cv34.fail \cv34.fail \cv34.fail ];
+ sub \cv34.alt1 from [\cv34.pass \cv34.fail \cv34.fail ];
+ sub \cv34.alt2 from [\cv34.fail \cv34.pass \cv34.fail ];
+ sub \cv34.alt3 from [\cv34.fail \cv34.fail \cv34.pass ];
+} AlternateSubstitutionlookup59;
+
+lookup AlternateSubstitutionlookup60 {
+ lookupflag 0;
+ sub \cv35.default from [\cv35.fail \cv35.fail \cv35.fail ];
+ sub \cv35.alt1 from [\cv35.pass \cv35.fail \cv35.fail ];
+ sub \cv35.alt2 from [\cv35.fail \cv35.pass \cv35.fail ];
+ sub \cv35.alt3 from [\cv35.fail \cv35.fail \cv35.pass ];
+} AlternateSubstitutionlookup60;
+
+lookup AlternateSubstitutionlookup61 {
+ lookupflag 0;
+ sub \cv36.default from [\cv36.fail \cv36.fail \cv36.fail ];
+ sub \cv36.alt1 from [\cv36.pass \cv36.fail \cv36.fail ];
+ sub \cv36.alt2 from [\cv36.fail \cv36.pass \cv36.fail ];
+ sub \cv36.alt3 from [\cv36.fail \cv36.fail \cv36.pass ];
+} AlternateSubstitutionlookup61;
+
+lookup AlternateSubstitutionlookup62 {
+ lookupflag 0;
+ sub \cv37.default from [\cv37.fail \cv37.fail \cv37.fail ];
+ sub \cv37.alt1 from [\cv37.pass \cv37.fail \cv37.fail ];
+ sub \cv37.alt2 from [\cv37.fail \cv37.pass \cv37.fail ];
+ sub \cv37.alt3 from [\cv37.fail \cv37.fail \cv37.pass ];
+} AlternateSubstitutionlookup62;
+
+lookup AlternateSubstitutionlookup63 {
+ lookupflag 0;
+ sub \cv38.default from [\cv38.fail \cv38.fail \cv38.fail ];
+ sub \cv38.alt1 from [\cv38.pass \cv38.fail \cv38.fail ];
+ sub \cv38.alt2 from [\cv38.fail \cv38.pass \cv38.fail ];
+ sub \cv38.alt3 from [\cv38.fail \cv38.fail \cv38.pass ];
+} AlternateSubstitutionlookup63;
+
+lookup AlternateSubstitutionlookup64 {
+ lookupflag 0;
+ sub \cv39.default from [\cv39.fail \cv39.fail \cv39.fail ];
+ sub \cv39.alt1 from [\cv39.pass \cv39.fail \cv39.fail ];
+ sub \cv39.alt2 from [\cv39.fail \cv39.pass \cv39.fail ];
+ sub \cv39.alt3 from [\cv39.fail \cv39.fail \cv39.pass ];
+} AlternateSubstitutionlookup64;
+
+lookup AlternateSubstitutionlookup65 {
+ lookupflag 0;
+ sub \cv40.default from [\cv40.fail \cv40.fail \cv40.fail ];
+ sub \cv40.alt1 from [\cv40.pass \cv40.fail \cv40.fail ];
+ sub \cv40.alt2 from [\cv40.fail \cv40.pass \cv40.fail ];
+ sub \cv40.alt3 from [\cv40.fail \cv40.fail \cv40.pass ];
+} AlternateSubstitutionlookup65;
+
+lookup AlternateSubstitutionlookup66 {
+ lookupflag 0;
+ sub \cv41.default from [\cv41.fail \cv41.fail \cv41.fail ];
+ sub \cv41.alt1 from [\cv41.pass \cv41.fail \cv41.fail ];
+ sub \cv41.alt2 from [\cv41.fail \cv41.pass \cv41.fail ];
+ sub \cv41.alt3 from [\cv41.fail \cv41.fail \cv41.pass ];
+} AlternateSubstitutionlookup66;
+
+lookup AlternateSubstitutionlookup67 {
+ lookupflag 0;
+ sub \cv42.default from [\cv42.fail \cv42.fail \cv42.fail ];
+ sub \cv42.alt1 from [\cv42.pass \cv42.fail \cv42.fail ];
+ sub \cv42.alt2 from [\cv42.fail \cv42.pass \cv42.fail ];
+ sub \cv42.alt3 from [\cv42.fail \cv42.fail \cv42.pass ];
+} AlternateSubstitutionlookup67;
+
+lookup AlternateSubstitutionlookup68 {
+ lookupflag 0;
+ sub \cv43.default from [\cv43.fail \cv43.fail \cv43.fail ];
+ sub \cv43.alt1 from [\cv43.pass \cv43.fail \cv43.fail ];
+ sub \cv43.alt2 from [\cv43.fail \cv43.pass \cv43.fail ];
+ sub \cv43.alt3 from [\cv43.fail \cv43.fail \cv43.pass ];
+} AlternateSubstitutionlookup68;
+
+lookup AlternateSubstitutionlookup69 {
+ lookupflag 0;
+ sub \cv44.default from [\cv44.fail \cv44.fail \cv44.fail ];
+ sub \cv44.alt1 from [\cv44.pass \cv44.fail \cv44.fail ];
+ sub \cv44.alt2 from [\cv44.fail \cv44.pass \cv44.fail ];
+ sub \cv44.alt3 from [\cv44.fail \cv44.fail \cv44.pass ];
+} AlternateSubstitutionlookup69;
+
+lookup AlternateSubstitutionlookup70 {
+ lookupflag 0;
+ sub \cv45.default from [\cv45.fail \cv45.fail \cv45.fail ];
+ sub \cv45.alt1 from [\cv45.pass \cv45.fail \cv45.fail ];
+ sub \cv45.alt2 from [\cv45.fail \cv45.pass \cv45.fail ];
+ sub \cv45.alt3 from [\cv45.fail \cv45.fail \cv45.pass ];
+} AlternateSubstitutionlookup70;
+
+lookup AlternateSubstitutionlookup71 {
+ lookupflag 0;
+ sub \cv46.default from [\cv46.fail \cv46.fail \cv46.fail ];
+ sub \cv46.alt1 from [\cv46.pass \cv46.fail \cv46.fail ];
+ sub \cv46.alt2 from [\cv46.fail \cv46.pass \cv46.fail ];
+ sub \cv46.alt3 from [\cv46.fail \cv46.fail \cv46.pass ];
+} AlternateSubstitutionlookup71;
+
+lookup AlternateSubstitutionlookup72 {
+ lookupflag 0;
+ sub \cv47.default from [\cv47.fail \cv47.fail \cv47.fail ];
+ sub \cv47.alt1 from [\cv47.pass \cv47.fail \cv47.fail ];
+ sub \cv47.alt2 from [\cv47.fail \cv47.pass \cv47.fail ];
+ sub \cv47.alt3 from [\cv47.fail \cv47.fail \cv47.pass ];
+} AlternateSubstitutionlookup72;
+
+lookup AlternateSubstitutionlookup73 {
+ lookupflag 0;
+ sub \cv48.default from [\cv48.fail \cv48.fail \cv48.fail ];
+ sub \cv48.alt1 from [\cv48.pass \cv48.fail \cv48.fail ];
+ sub \cv48.alt2 from [\cv48.fail \cv48.pass \cv48.fail ];
+ sub \cv48.alt3 from [\cv48.fail \cv48.fail \cv48.pass ];
+} AlternateSubstitutionlookup73;
+
+lookup AlternateSubstitutionlookup74 {
+ lookupflag 0;
+ sub \cv49.default from [\cv49.fail \cv49.fail \cv49.fail ];
+ sub \cv49.alt1 from [\cv49.pass \cv49.fail \cv49.fail ];
+ sub \cv49.alt2 from [\cv49.fail \cv49.pass \cv49.fail ];
+ sub \cv49.alt3 from [\cv49.fail \cv49.fail \cv49.pass ];
+} AlternateSubstitutionlookup74;
+
+lookup AlternateSubstitutionlookup75 {
+ lookupflag 0;
+ sub \cv50.default from [\cv50.fail \cv50.fail \cv50.fail ];
+ sub \cv50.alt1 from [\cv50.pass \cv50.fail \cv50.fail ];
+ sub \cv50.alt2 from [\cv50.fail \cv50.pass \cv50.fail ];
+ sub \cv50.alt3 from [\cv50.fail \cv50.fail \cv50.pass ];
+} AlternateSubstitutionlookup75;
+
+lookup AlternateSubstitutionlookup76 {
+ lookupflag 0;
+ sub \cv51.default from [\cv51.fail \cv51.fail \cv51.fail ];
+ sub \cv51.alt1 from [\cv51.pass \cv51.fail \cv51.fail ];
+ sub \cv51.alt2 from [\cv51.fail \cv51.pass \cv51.fail ];
+ sub \cv51.alt3 from [\cv51.fail \cv51.fail \cv51.pass ];
+} AlternateSubstitutionlookup76;
+
+lookup AlternateSubstitutionlookup77 {
+ lookupflag 0;
+ sub \cv52.default from [\cv52.fail \cv52.fail \cv52.fail ];
+ sub \cv52.alt1 from [\cv52.pass \cv52.fail \cv52.fail ];
+ sub \cv52.alt2 from [\cv52.fail \cv52.pass \cv52.fail ];
+ sub \cv52.alt3 from [\cv52.fail \cv52.fail \cv52.pass ];
+} AlternateSubstitutionlookup77;
+
+lookup AlternateSubstitutionlookup78 {
+ lookupflag 0;
+ sub \cv53.default from [\cv53.fail \cv53.fail \cv53.fail ];
+ sub \cv53.alt1 from [\cv53.pass \cv53.fail \cv53.fail ];
+ sub \cv53.alt2 from [\cv53.fail \cv53.pass \cv53.fail ];
+ sub \cv53.alt3 from [\cv53.fail \cv53.fail \cv53.pass ];
+} AlternateSubstitutionlookup78;
+
+lookup AlternateSubstitutionlookup79 {
+ lookupflag 0;
+ sub \cv54.default from [\cv54.fail \cv54.fail \cv54.fail ];
+ sub \cv54.alt1 from [\cv54.pass \cv54.fail \cv54.fail ];
+ sub \cv54.alt2 from [\cv54.fail \cv54.pass \cv54.fail ];
+ sub \cv54.alt3 from [\cv54.fail \cv54.fail \cv54.pass ];
+} AlternateSubstitutionlookup79;
+
+lookup AlternateSubstitutionlookup80 {
+ lookupflag 0;
+ sub \cv55.default from [\cv55.fail \cv55.fail \cv55.fail ];
+ sub \cv55.alt1 from [\cv55.pass \cv55.fail \cv55.fail ];
+ sub \cv55.alt2 from [\cv55.fail \cv55.pass \cv55.fail ];
+ sub \cv55.alt3 from [\cv55.fail \cv55.fail \cv55.pass ];
+} AlternateSubstitutionlookup80;
+
+lookup AlternateSubstitutionlookup81 {
+ lookupflag 0;
+ sub \cv56.default from [\cv56.fail \cv56.fail \cv56.fail ];
+ sub \cv56.alt1 from [\cv56.pass \cv56.fail \cv56.fail ];
+ sub \cv56.alt2 from [\cv56.fail \cv56.pass \cv56.fail ];
+ sub \cv56.alt3 from [\cv56.fail \cv56.fail \cv56.pass ];
+} AlternateSubstitutionlookup81;
+
+lookup AlternateSubstitutionlookup82 {
+ lookupflag 0;
+ sub \cv57.default from [\cv57.fail \cv57.fail \cv57.fail ];
+ sub \cv57.alt1 from [\cv57.pass \cv57.fail \cv57.fail ];
+ sub \cv57.alt2 from [\cv57.fail \cv57.pass \cv57.fail ];
+ sub \cv57.alt3 from [\cv57.fail \cv57.fail \cv57.pass ];
+} AlternateSubstitutionlookup82;
+
+lookup AlternateSubstitutionlookup83 {
+ lookupflag 0;
+ sub \cv58.default from [\cv58.fail \cv58.fail \cv58.fail ];
+ sub \cv58.alt1 from [\cv58.pass \cv58.fail \cv58.fail ];
+ sub \cv58.alt2 from [\cv58.fail \cv58.pass \cv58.fail ];
+ sub \cv58.alt3 from [\cv58.fail \cv58.fail \cv58.pass ];
+} AlternateSubstitutionlookup83;
+
+lookup AlternateSubstitutionlookup84 {
+ lookupflag 0;
+ sub \cv59.default from [\cv59.fail \cv59.fail \cv59.fail ];
+ sub \cv59.alt1 from [\cv59.pass \cv59.fail \cv59.fail ];
+ sub \cv59.alt2 from [\cv59.fail \cv59.pass \cv59.fail ];
+ sub \cv59.alt3 from [\cv59.fail \cv59.fail \cv59.pass ];
+} AlternateSubstitutionlookup84;
+
+lookup AlternateSubstitutionlookup85 {
+ lookupflag 0;
+ sub \cv60.default from [\cv60.fail \cv60.fail \cv60.fail ];
+ sub \cv60.alt1 from [\cv60.pass \cv60.fail \cv60.fail ];
+ sub \cv60.alt2 from [\cv60.fail \cv60.pass \cv60.fail ];
+ sub \cv60.alt3 from [\cv60.fail \cv60.fail \cv60.pass ];
+} AlternateSubstitutionlookup85;
+
+lookup AlternateSubstitutionlookup86 {
+ lookupflag 0;
+ sub \cv61.default from [\cv61.fail \cv61.fail \cv61.fail ];
+ sub \cv61.alt1 from [\cv61.pass \cv61.fail \cv61.fail ];
+ sub \cv61.alt2 from [\cv61.fail \cv61.pass \cv61.fail ];
+ sub \cv61.alt3 from [\cv61.fail \cv61.fail \cv61.pass ];
+} AlternateSubstitutionlookup86;
+
+lookup AlternateSubstitutionlookup87 {
+ lookupflag 0;
+ sub \cv62.default from [\cv62.fail \cv62.fail \cv62.fail ];
+ sub \cv62.alt1 from [\cv62.pass \cv62.fail \cv62.fail ];
+ sub \cv62.alt2 from [\cv62.fail \cv62.pass \cv62.fail ];
+ sub \cv62.alt3 from [\cv62.fail \cv62.fail \cv62.pass ];
+} AlternateSubstitutionlookup87;
+
+lookup AlternateSubstitutionlookup88 {
+ lookupflag 0;
+ sub \cv63.default from [\cv63.fail \cv63.fail \cv63.fail ];
+ sub \cv63.alt1 from [\cv63.pass \cv63.fail \cv63.fail ];
+ sub \cv63.alt2 from [\cv63.fail \cv63.pass \cv63.fail ];
+ sub \cv63.alt3 from [\cv63.fail \cv63.fail \cv63.pass ];
+} AlternateSubstitutionlookup88;
+
+lookup AlternateSubstitutionlookup89 {
+ lookupflag 0;
+ sub \cv64.default from [\cv64.fail \cv64.fail \cv64.fail ];
+ sub \cv64.alt1 from [\cv64.pass \cv64.fail \cv64.fail ];
+ sub \cv64.alt2 from [\cv64.fail \cv64.pass \cv64.fail ];
+ sub \cv64.alt3 from [\cv64.fail \cv64.fail \cv64.pass ];
+} AlternateSubstitutionlookup89;
+
+lookup AlternateSubstitutionlookup90 {
+ lookupflag 0;
+ sub \cv65.default from [\cv65.fail \cv65.fail \cv65.fail ];
+ sub \cv65.alt1 from [\cv65.pass \cv65.fail \cv65.fail ];
+ sub \cv65.alt2 from [\cv65.fail \cv65.pass \cv65.fail ];
+ sub \cv65.alt3 from [\cv65.fail \cv65.fail \cv65.pass ];
+} AlternateSubstitutionlookup90;
+
+lookup AlternateSubstitutionlookup91 {
+ lookupflag 0;
+ sub \cv66.default from [\cv66.fail \cv66.fail \cv66.fail ];
+ sub \cv66.alt1 from [\cv66.pass \cv66.fail \cv66.fail ];
+ sub \cv66.alt2 from [\cv66.fail \cv66.pass \cv66.fail ];
+ sub \cv66.alt3 from [\cv66.fail \cv66.fail \cv66.pass ];
+} AlternateSubstitutionlookup91;
+
+lookup AlternateSubstitutionlookup92 {
+ lookupflag 0;
+ sub \cv67.default from [\cv67.fail \cv67.fail \cv67.fail ];
+ sub \cv67.alt1 from [\cv67.pass \cv67.fail \cv67.fail ];
+ sub \cv67.alt2 from [\cv67.fail \cv67.pass \cv67.fail ];
+ sub \cv67.alt3 from [\cv67.fail \cv67.fail \cv67.pass ];
+} AlternateSubstitutionlookup92;
+
+lookup AlternateSubstitutionlookup93 {
+ lookupflag 0;
+ sub \cv68.default from [\cv68.fail \cv68.fail \cv68.fail ];
+ sub \cv68.alt1 from [\cv68.pass \cv68.fail \cv68.fail ];
+ sub \cv68.alt2 from [\cv68.fail \cv68.pass \cv68.fail ];
+ sub \cv68.alt3 from [\cv68.fail \cv68.fail \cv68.pass ];
+} AlternateSubstitutionlookup93;
+
+lookup AlternateSubstitutionlookup94 {
+ lookupflag 0;
+ sub \cv69.default from [\cv69.fail \cv69.fail \cv69.fail ];
+ sub \cv69.alt1 from [\cv69.pass \cv69.fail \cv69.fail ];
+ sub \cv69.alt2 from [\cv69.fail \cv69.pass \cv69.fail ];
+ sub \cv69.alt3 from [\cv69.fail \cv69.fail \cv69.pass ];
+} AlternateSubstitutionlookup94;
+
+lookup AlternateSubstitutionlookup95 {
+ lookupflag 0;
+ sub \cv70.default from [\cv70.fail \cv70.fail \cv70.fail ];
+ sub \cv70.alt1 from [\cv70.pass \cv70.fail \cv70.fail ];
+ sub \cv70.alt2 from [\cv70.fail \cv70.pass \cv70.fail ];
+ sub \cv70.alt3 from [\cv70.fail \cv70.fail \cv70.pass ];
+} AlternateSubstitutionlookup95;
+
+lookup AlternateSubstitutionlookup96 {
+ lookupflag 0;
+ sub \cv71.default from [\cv71.fail \cv71.fail \cv71.fail ];
+ sub \cv71.alt1 from [\cv71.pass \cv71.fail \cv71.fail ];
+ sub \cv71.alt2 from [\cv71.fail \cv71.pass \cv71.fail ];
+ sub \cv71.alt3 from [\cv71.fail \cv71.fail \cv71.pass ];
+} AlternateSubstitutionlookup96;
+
+lookup AlternateSubstitutionlookup97 {
+ lookupflag 0;
+ sub \cv72.default from [\cv72.fail \cv72.fail \cv72.fail ];
+ sub \cv72.alt1 from [\cv72.pass \cv72.fail \cv72.fail ];
+ sub \cv72.alt2 from [\cv72.fail \cv72.pass \cv72.fail ];
+ sub \cv72.alt3 from [\cv72.fail \cv72.fail \cv72.pass ];
+} AlternateSubstitutionlookup97;
+
+lookup AlternateSubstitutionlookup98 {
+ lookupflag 0;
+ sub \cv73.default from [\cv73.fail \cv73.fail \cv73.fail ];
+ sub \cv73.alt1 from [\cv73.pass \cv73.fail \cv73.fail ];
+ sub \cv73.alt2 from [\cv73.fail \cv73.pass \cv73.fail ];
+ sub \cv73.alt3 from [\cv73.fail \cv73.fail \cv73.pass ];
+} AlternateSubstitutionlookup98;
+
+lookup AlternateSubstitutionlookup99 {
+ lookupflag 0;
+ sub \cv74.default from [\cv74.fail \cv74.fail \cv74.fail ];
+ sub \cv74.alt1 from [\cv74.pass \cv74.fail \cv74.fail ];
+ sub \cv74.alt2 from [\cv74.fail \cv74.pass \cv74.fail ];
+ sub \cv74.alt3 from [\cv74.fail \cv74.fail \cv74.pass ];
+} AlternateSubstitutionlookup99;
+
+lookup AlternateSubstitutionlookup100 {
+ lookupflag 0;
+ sub \cv75.default from [\cv75.fail \cv75.fail \cv75.fail ];
+ sub \cv75.alt1 from [\cv75.pass \cv75.fail \cv75.fail ];
+ sub \cv75.alt2 from [\cv75.fail \cv75.pass \cv75.fail ];
+ sub \cv75.alt3 from [\cv75.fail \cv75.fail \cv75.pass ];
+} AlternateSubstitutionlookup100;
+
+lookup AlternateSubstitutionlookup101 {
+ lookupflag 0;
+ sub \cv76.default from [\cv76.fail \cv76.fail \cv76.fail ];
+ sub \cv76.alt1 from [\cv76.pass \cv76.fail \cv76.fail ];
+ sub \cv76.alt2 from [\cv76.fail \cv76.pass \cv76.fail ];
+ sub \cv76.alt3 from [\cv76.fail \cv76.fail \cv76.pass ];
+} AlternateSubstitutionlookup101;
+
+lookup AlternateSubstitutionlookup102 {
+ lookupflag 0;
+ sub \cv77.default from [\cv77.fail \cv77.fail \cv77.fail ];
+ sub \cv77.alt1 from [\cv77.pass \cv77.fail \cv77.fail ];
+ sub \cv77.alt2 from [\cv77.fail \cv77.pass \cv77.fail ];
+ sub \cv77.alt3 from [\cv77.fail \cv77.fail \cv77.pass ];
+} AlternateSubstitutionlookup102;
+
+lookup AlternateSubstitutionlookup103 {
+ lookupflag 0;
+ sub \cv78.default from [\cv78.fail \cv78.fail \cv78.fail ];
+ sub \cv78.alt1 from [\cv78.pass \cv78.fail \cv78.fail ];
+ sub \cv78.alt2 from [\cv78.fail \cv78.pass \cv78.fail ];
+ sub \cv78.alt3 from [\cv78.fail \cv78.fail \cv78.pass ];
+} AlternateSubstitutionlookup103;
+
+lookup AlternateSubstitutionlookup104 {
+ lookupflag 0;
+ sub \cv79.default from [\cv79.fail \cv79.fail \cv79.fail ];
+ sub \cv79.alt1 from [\cv79.pass \cv79.fail \cv79.fail ];
+ sub \cv79.alt2 from [\cv79.fail \cv79.pass \cv79.fail ];
+ sub \cv79.alt3 from [\cv79.fail \cv79.fail \cv79.pass ];
+} AlternateSubstitutionlookup104;
+
+lookup AlternateSubstitutionlookup105 {
+ lookupflag 0;
+ sub \cv80.default from [\cv80.fail \cv80.fail \cv80.fail ];
+ sub \cv80.alt1 from [\cv80.pass \cv80.fail \cv80.fail ];
+ sub \cv80.alt2 from [\cv80.fail \cv80.pass \cv80.fail ];
+ sub \cv80.alt3 from [\cv80.fail \cv80.fail \cv80.pass ];
+} AlternateSubstitutionlookup105;
+
+lookup AlternateSubstitutionlookup106 {
+ lookupflag 0;
+ sub \cv81.default from [\cv81.fail \cv81.fail \cv81.fail ];
+ sub \cv81.alt1 from [\cv81.pass \cv81.fail \cv81.fail ];
+ sub \cv81.alt2 from [\cv81.fail \cv81.pass \cv81.fail ];
+ sub \cv81.alt3 from [\cv81.fail \cv81.fail \cv81.pass ];
+} AlternateSubstitutionlookup106;
+
+lookup AlternateSubstitutionlookup107 {
+ lookupflag 0;
+ sub \cv82.default from [\cv82.fail \cv82.fail \cv82.fail ];
+ sub \cv82.alt1 from [\cv82.pass \cv82.fail \cv82.fail ];
+ sub \cv82.alt2 from [\cv82.fail \cv82.pass \cv82.fail ];
+ sub \cv82.alt3 from [\cv82.fail \cv82.fail \cv82.pass ];
+} AlternateSubstitutionlookup107;
+
+lookup AlternateSubstitutionlookup108 {
+ lookupflag 0;
+ sub \cv83.default from [\cv83.fail \cv83.fail \cv83.fail ];
+ sub \cv83.alt1 from [\cv83.pass \cv83.fail \cv83.fail ];
+ sub \cv83.alt2 from [\cv83.fail \cv83.pass \cv83.fail ];
+ sub \cv83.alt3 from [\cv83.fail \cv83.fail \cv83.pass ];
+} AlternateSubstitutionlookup108;
+
+lookup AlternateSubstitutionlookup109 {
+ lookupflag 0;
+ sub \cv84.default from [\cv84.fail \cv84.fail \cv84.fail ];
+ sub \cv84.alt1 from [\cv84.pass \cv84.fail \cv84.fail ];
+ sub \cv84.alt2 from [\cv84.fail \cv84.pass \cv84.fail ];
+ sub \cv84.alt3 from [\cv84.fail \cv84.fail \cv84.pass ];
+} AlternateSubstitutionlookup109;
+
+lookup AlternateSubstitutionlookup110 {
+ lookupflag 0;
+ sub \cv85.default from [\cv85.fail \cv85.fail \cv85.fail ];
+ sub \cv85.alt1 from [\cv85.pass \cv85.fail \cv85.fail ];
+ sub \cv85.alt2 from [\cv85.fail \cv85.pass \cv85.fail ];
+ sub \cv85.alt3 from [\cv85.fail \cv85.fail \cv85.pass ];
+} AlternateSubstitutionlookup110;
+
+lookup AlternateSubstitutionlookup111 {
+ lookupflag 0;
+ sub \cv86.default from [\cv86.fail \cv86.fail \cv86.fail ];
+ sub \cv86.alt1 from [\cv86.pass \cv86.fail \cv86.fail ];
+ sub \cv86.alt2 from [\cv86.fail \cv86.pass \cv86.fail ];
+ sub \cv86.alt3 from [\cv86.fail \cv86.fail \cv86.pass ];
+} AlternateSubstitutionlookup111;
+
+lookup AlternateSubstitutionlookup112 {
+ lookupflag 0;
+ sub \cv87.default from [\cv87.fail \cv87.fail \cv87.fail ];
+ sub \cv87.alt1 from [\cv87.pass \cv87.fail \cv87.fail ];
+ sub \cv87.alt2 from [\cv87.fail \cv87.pass \cv87.fail ];
+ sub \cv87.alt3 from [\cv87.fail \cv87.fail \cv87.pass ];
+} AlternateSubstitutionlookup112;
+
+lookup AlternateSubstitutionlookup113 {
+ lookupflag 0;
+ sub \cv88.default from [\cv88.fail \cv88.fail \cv88.fail ];
+ sub \cv88.alt1 from [\cv88.pass \cv88.fail \cv88.fail ];
+ sub \cv88.alt2 from [\cv88.fail \cv88.pass \cv88.fail ];
+ sub \cv88.alt3 from [\cv88.fail \cv88.fail \cv88.pass ];
+} AlternateSubstitutionlookup113;
+
+lookup AlternateSubstitutionlookup114 {
+ lookupflag 0;
+ sub \cv89.default from [\cv89.fail \cv89.fail \cv89.fail ];
+ sub \cv89.alt1 from [\cv89.pass \cv89.fail \cv89.fail ];
+ sub \cv89.alt2 from [\cv89.fail \cv89.pass \cv89.fail ];
+ sub \cv89.alt3 from [\cv89.fail \cv89.fail \cv89.pass ];
+} AlternateSubstitutionlookup114;
+
+lookup AlternateSubstitutionlookup115 {
+ lookupflag 0;
+ sub \cv90.default from [\cv90.fail \cv90.fail \cv90.fail ];
+ sub \cv90.alt1 from [\cv90.pass \cv90.fail \cv90.fail ];
+ sub \cv90.alt2 from [\cv90.fail \cv90.pass \cv90.fail ];
+ sub \cv90.alt3 from [\cv90.fail \cv90.fail \cv90.pass ];
+} AlternateSubstitutionlookup115;
+
+lookup AlternateSubstitutionlookup116 {
+ lookupflag 0;
+ sub \cv91.default from [\cv91.fail \cv91.fail \cv91.fail ];
+ sub \cv91.alt1 from [\cv91.pass \cv91.fail \cv91.fail ];
+ sub \cv91.alt2 from [\cv91.fail \cv91.pass \cv91.fail ];
+ sub \cv91.alt3 from [\cv91.fail \cv91.fail \cv91.pass ];
+} AlternateSubstitutionlookup116;
+
+lookup AlternateSubstitutionlookup117 {
+ lookupflag 0;
+ sub \cv92.default from [\cv92.fail \cv92.fail \cv92.fail ];
+ sub \cv92.alt1 from [\cv92.pass \cv92.fail \cv92.fail ];
+ sub \cv92.alt2 from [\cv92.fail \cv92.pass \cv92.fail ];
+ sub \cv92.alt3 from [\cv92.fail \cv92.fail \cv92.pass ];
+} AlternateSubstitutionlookup117;
+
+lookup AlternateSubstitutionlookup118 {
+ lookupflag 0;
+ sub \cv93.default from [\cv93.fail \cv93.fail \cv93.fail ];
+ sub \cv93.alt1 from [\cv93.pass \cv93.fail \cv93.fail ];
+ sub \cv93.alt2 from [\cv93.fail \cv93.pass \cv93.fail ];
+ sub \cv93.alt3 from [\cv93.fail \cv93.fail \cv93.pass ];
+} AlternateSubstitutionlookup118;
+
+lookup AlternateSubstitutionlookup119 {
+ lookupflag 0;
+ sub \cv94.default from [\cv94.fail \cv94.fail \cv94.fail ];
+ sub \cv94.alt1 from [\cv94.pass \cv94.fail \cv94.fail ];
+ sub \cv94.alt2 from [\cv94.fail \cv94.pass \cv94.fail ];
+ sub \cv94.alt3 from [\cv94.fail \cv94.fail \cv94.pass ];
+} AlternateSubstitutionlookup119;
+
+lookup AlternateSubstitutionlookup120 {
+ lookupflag 0;
+ sub \cv95.default from [\cv95.fail \cv95.fail \cv95.fail ];
+ sub \cv95.alt1 from [\cv95.pass \cv95.fail \cv95.fail ];
+ sub \cv95.alt2 from [\cv95.fail \cv95.pass \cv95.fail ];
+ sub \cv95.alt3 from [\cv95.fail \cv95.fail \cv95.pass ];
+} AlternateSubstitutionlookup120;
+
+lookup AlternateSubstitutionlookup121 {
+ lookupflag 0;
+ sub \cv96.default from [\cv96.fail \cv96.fail \cv96.fail ];
+ sub \cv96.alt1 from [\cv96.pass \cv96.fail \cv96.fail ];
+ sub \cv96.alt2 from [\cv96.fail \cv96.pass \cv96.fail ];
+ sub \cv96.alt3 from [\cv96.fail \cv96.fail \cv96.pass ];
+} AlternateSubstitutionlookup121;
+
+lookup AlternateSubstitutionlookup122 {
+ lookupflag 0;
+ sub \cv97.default from [\cv97.fail \cv97.fail \cv97.fail ];
+ sub \cv97.alt1 from [\cv97.pass \cv97.fail \cv97.fail ];
+ sub \cv97.alt2 from [\cv97.fail \cv97.pass \cv97.fail ];
+ sub \cv97.alt3 from [\cv97.fail \cv97.fail \cv97.pass ];
+} AlternateSubstitutionlookup122;
+
+lookup AlternateSubstitutionlookup123 {
+ lookupflag 0;
+ sub \cv98.default from [\cv98.fail \cv98.fail \cv98.fail ];
+ sub \cv98.alt1 from [\cv98.pass \cv98.fail \cv98.fail ];
+ sub \cv98.alt2 from [\cv98.fail \cv98.pass \cv98.fail ];
+ sub \cv98.alt3 from [\cv98.fail \cv98.fail \cv98.pass ];
+} AlternateSubstitutionlookup123;
+
+lookup cv99CharacterVariants99lookup12 {
+ lookupflag 0;
+ sub \cv99.default from [\cv99.fail \cv99.fail \cv99.fail ];
+ sub \cv99.alt1 from [\cv99.pass \cv99.fail \cv99.fail ];
+ sub \cv99.alt2 from [\cv99.fail \cv99.pass \cv99.fail ];
+ sub \cv99.alt3 from [\cv99.fail \cv99.fail \cv99.pass ];
+} cv99CharacterVariants99lookup12;
+
+lookup distDistancelookup125 {
+ lookupflag 0;
+ sub \dist.default from [\dist.fail \dist.fail \dist.fail ];
+ sub \dist.alt1 from [\dist.pass \dist.fail \dist.fail ];
+ sub \dist.alt2 from [\dist.fail \dist.pass \dist.fail ];
+ sub \dist.alt3 from [\dist.fail \dist.fail \dist.pass ];
+} distDistancelookup125;
+
+lookup dligDiscretionaryLigatureslooku {
+ lookupflag 0;
+ sub \dlig.default from [\dlig.fail \dlig.fail \dlig.fail ];
+ sub \dlig.alt1 from [\dlig.pass \dlig.fail \dlig.fail ];
+ sub \dlig.alt2 from [\dlig.fail \dlig.pass \dlig.fail ];
+ sub \dlig.alt3 from [\dlig.fail \dlig.fail \dlig.pass ];
+} dligDiscretionaryLigatureslooku;
+
+lookup dnomDenominatorslookup127 {
+ lookupflag 0;
+ sub \dnom.default from [\dnom.fail \dnom.fail \dnom.fail ];
+ sub \dnom.alt1 from [\dnom.pass \dnom.fail \dnom.fail ];
+ sub \dnom.alt2 from [\dnom.fail \dnom.pass \dnom.fail ];
+ sub \dnom.alt3 from [\dnom.fail \dnom.fail \dnom.pass ];
+} dnomDenominatorslookup127;
+
+lookup exptExpertFormslookup128 {
+ lookupflag 0;
+ sub \expt.default from [\expt.fail \expt.fail \expt.fail ];
+ sub \expt.alt1 from [\expt.pass \expt.fail \expt.fail ];
+ sub \expt.alt2 from [\expt.fail \expt.pass \expt.fail ];
+ sub \expt.alt3 from [\expt.fail \expt.fail \expt.pass ];
+} exptExpertFormslookup128;
+
+lookup faltFinalGlyphOnLinelookup129 {
+ lookupflag 0;
+ sub \falt.default from [\falt.fail \falt.fail \falt.fail ];
+ sub \falt.alt1 from [\falt.pass \falt.fail \falt.fail ];
+ sub \falt.alt2 from [\falt.fail \falt.pass \falt.fail ];
+ sub \falt.alt3 from [\falt.fail \falt.fail \falt.pass ];
+} faltFinalGlyphOnLinelookup129;
+
+lookup fin2TerminalForms2lookup130 {
+ lookupflag 0;
+ sub \fin2.default from [\fin2.fail \fin2.fail \fin2.fail ];
+ sub \fin2.alt1 from [\fin2.pass \fin2.fail \fin2.fail ];
+ sub \fin2.alt2 from [\fin2.fail \fin2.pass \fin2.fail ];
+ sub \fin2.alt3 from [\fin2.fail \fin2.fail \fin2.pass ];
+} fin2TerminalForms2lookup130;
+
+lookup fin3TerminalForms3lookup131 {
+ lookupflag 0;
+ sub \fin3.default from [\fin3.fail \fin3.fail \fin3.fail ];
+ sub \fin3.alt1 from [\fin3.pass \fin3.fail \fin3.fail ];
+ sub \fin3.alt2 from [\fin3.fail \fin3.pass \fin3.fail ];
+ sub \fin3.alt3 from [\fin3.fail \fin3.fail \fin3.pass ];
+} fin3TerminalForms3lookup131;
+
+lookup finaTerminalFormslookup132 {
+ lookupflag 0;
+ sub \fina.default from [\fina.fail \fina.fail \fina.fail ];
+ sub \fina.alt1 from [\fina.pass \fina.fail \fina.fail ];
+ sub \fina.alt2 from [\fina.fail \fina.pass \fina.fail ];
+ sub \fina.alt3 from [\fina.fail \fina.fail \fina.pass ];
+} finaTerminalFormslookup132;
+
+lookup fracDiagonalFractionslookup133 {
+ lookupflag 0;
+ sub \frac.default from [\frac.fail \frac.fail \frac.fail ];
+ sub \frac.alt1 from [\frac.pass \frac.fail \frac.fail ];
+ sub \frac.alt2 from [\frac.fail \frac.pass \frac.fail ];
+ sub \frac.alt3 from [\frac.fail \frac.fail \frac.pass ];
+} fracDiagonalFractionslookup133;
+
+lookup fwidFullWidthslookup134 {
+ lookupflag 0;
+ sub \fwid.default from [\fwid.fail \fwid.fail \fwid.fail ];
+ sub \fwid.alt1 from [\fwid.pass \fwid.fail \fwid.fail ];
+ sub \fwid.alt2 from [\fwid.fail \fwid.pass \fwid.fail ];
+ sub \fwid.alt3 from [\fwid.fail \fwid.fail \fwid.pass ];
+} fwidFullWidthslookup134;
+
+lookup halfHalfFormslookup135 {
+ lookupflag 0;
+ sub \half.default from [\half.fail \half.fail \half.fail ];
+ sub \half.alt1 from [\half.pass \half.fail \half.fail ];
+ sub \half.alt2 from [\half.fail \half.pass \half.fail ];
+ sub \half.alt3 from [\half.fail \half.fail \half.pass ];
+} halfHalfFormslookup135;
+
+lookup halnHalantFormslookup136 {
+ lookupflag 0;
+ sub \haln.default from [\haln.fail \haln.fail \haln.fail ];
+ sub \haln.alt1 from [\haln.pass \haln.fail \haln.fail ];
+ sub \haln.alt2 from [\haln.fail \haln.pass \haln.fail ];
+ sub \haln.alt3 from [\haln.fail \haln.fail \haln.pass ];
+} halnHalantFormslookup136;
+
+lookup haltAlternativeHalfWidthslookup {
+ lookupflag 0;
+ sub \halt.default from [\halt.fail \halt.fail \halt.fail ];
+ sub \halt.alt1 from [\halt.pass \halt.fail \halt.fail ];
+ sub \halt.alt2 from [\halt.fail \halt.pass \halt.fail ];
+ sub \halt.alt3 from [\halt.fail \halt.fail \halt.pass ];
+} haltAlternativeHalfWidthslookup;
+
+lookup histHistoricalFormslookup138 {
+ lookupflag 0;
+ sub \hist.default from [\hist.fail \hist.fail \hist.fail ];
+ sub \hist.alt1 from [\hist.pass \hist.fail \hist.fail ];
+ sub \hist.alt2 from [\hist.fail \hist.pass \hist.fail ];
+ sub \hist.alt3 from [\hist.fail \hist.fail \hist.pass ];
+} histHistoricalFormslookup138;
+
+lookup hknaHorizontalKanaAlternativesl {
+ lookupflag 0;
+ sub \hkna.default from [\hkna.fail \hkna.fail \hkna.fail ];
+ sub \hkna.alt1 from [\hkna.pass \hkna.fail \hkna.fail ];
+ sub \hkna.alt2 from [\hkna.fail \hkna.pass \hkna.fail ];
+ sub \hkna.alt3 from [\hkna.fail \hkna.fail \hkna.pass ];
+} hknaHorizontalKanaAlternativesl;
+
+lookup hligHistoricLigatureslookup140 {
+ lookupflag 0;
+ sub \hlig.default from [\hlig.fail \hlig.fail \hlig.fail ];
+ sub \hlig.alt1 from [\hlig.pass \hlig.fail \hlig.fail ];
+ sub \hlig.alt2 from [\hlig.fail \hlig.pass \hlig.fail ];
+ sub \hlig.alt3 from [\hlig.fail \hlig.fail \hlig.pass ];
+} hligHistoricLigatureslookup140;
+
+lookup hnglHanjatoHangullookup141 {
+ lookupflag 0;
+ sub \hngl.default from [\hngl.fail \hngl.fail \hngl.fail ];
+ sub \hngl.alt1 from [\hngl.pass \hngl.fail \hngl.fail ];
+ sub \hngl.alt2 from [\hngl.fail \hngl.pass \hngl.fail ];
+ sub \hngl.alt3 from [\hngl.fail \hngl.fail \hngl.pass ];
+} hnglHanjatoHangullookup141;
+
+lookup hojoHojoJISX02121990KanjiFormsl {
+ lookupflag 0;
+ sub \hojo.default from [\hojo.fail \hojo.fail \hojo.fail ];
+ sub \hojo.alt1 from [\hojo.pass \hojo.fail \hojo.fail ];
+ sub \hojo.alt2 from [\hojo.fail \hojo.pass \hojo.fail ];
+ sub \hojo.alt3 from [\hojo.fail \hojo.fail \hojo.pass ];
+} hojoHojoJISX02121990KanjiFormsl;
+
+lookup hwidHalfWidthslookup143 {
+ lookupflag 0;
+ sub \hwid.default from [\hwid.fail \hwid.fail \hwid.fail ];
+ sub \hwid.alt1 from [\hwid.pass \hwid.fail \hwid.fail ];
+ sub \hwid.alt2 from [\hwid.fail \hwid.pass \hwid.fail ];
+ sub \hwid.alt3 from [\hwid.fail \hwid.fail \hwid.pass ];
+} hwidHalfWidthslookup143;
+
+lookup initInitialFormslookup144 {
+ lookupflag 0;
+ sub \init.default from [\init.fail \init.fail \init.fail ];
+ sub \init.alt1 from [\init.pass \init.fail \init.fail ];
+ sub \init.alt2 from [\init.fail \init.pass \init.fail ];
+ sub \init.alt3 from [\init.fail \init.fail \init.pass ];
+} initInitialFormslookup144;
+
+lookup isolIsolatedFormslookup145 {
+ lookupflag 0;
+ sub \isol.default from [\isol.fail \isol.fail \isol.fail ];
+ sub \isol.alt1 from [\isol.pass \isol.fail \isol.fail ];
+ sub \isol.alt2 from [\isol.fail \isol.pass \isol.fail ];
+ sub \isol.alt3 from [\isol.fail \isol.fail \isol.pass ];
+} isolIsolatedFormslookup145;
+
+lookup italItalicslookup146 {
+ lookupflag 0;
+ sub \ital.default from [\ital.fail \ital.fail \ital.fail ];
+ sub \ital.alt1 from [\ital.pass \ital.fail \ital.fail ];
+ sub \ital.alt2 from [\ital.fail \ital.pass \ital.fail ];
+ sub \ital.alt3 from [\ital.fail \ital.fail \ital.pass ];
+} italItalicslookup146;
+
+lookup jaltJustificationAlternativeslo {
+ lookupflag 0;
+ sub \jalt.default from [\jalt.fail \jalt.fail \jalt.fail ];
+ sub \jalt.alt1 from [\jalt.pass \jalt.fail \jalt.fail ];
+ sub \jalt.alt2 from [\jalt.fail \jalt.pass \jalt.fail ];
+ sub \jalt.alt3 from [\jalt.fail \jalt.fail \jalt.pass ];
+} jaltJustificationAlternativeslo;
+
+lookup jp04JIS2004Formslookup148 {
+ lookupflag 0;
+ sub \jp04.default from [\jp04.fail \jp04.fail \jp04.fail ];
+ sub \jp04.alt1 from [\jp04.pass \jp04.fail \jp04.fail ];
+ sub \jp04.alt2 from [\jp04.fail \jp04.pass \jp04.fail ];
+ sub \jp04.alt3 from [\jp04.fail \jp04.fail \jp04.pass ];
+} jp04JIS2004Formslookup148;
+
+lookup jp78JIS78Formslookup149 {
+ lookupflag 0;
+ sub \jp78.default from [\jp78.fail \jp78.fail \jp78.fail ];
+ sub \jp78.alt1 from [\jp78.pass \jp78.fail \jp78.fail ];
+ sub \jp78.alt2 from [\jp78.fail \jp78.pass \jp78.fail ];
+ sub \jp78.alt3 from [\jp78.fail \jp78.fail \jp78.pass ];
+} jp78JIS78Formslookup149;
+
+lookup jp83JIS83Formslookup150 {
+ lookupflag 0;
+ sub \jp83.default from [\jp83.fail \jp83.fail \jp83.fail ];
+ sub \jp83.alt1 from [\jp83.pass \jp83.fail \jp83.fail ];
+ sub \jp83.alt2 from [\jp83.fail \jp83.pass \jp83.fail ];
+ sub \jp83.alt3 from [\jp83.fail \jp83.fail \jp83.pass ];
+} jp83JIS83Formslookup150;
+
+lookup jp90JIS90Formslookup151 {
+ lookupflag 0;
+ sub \jp90.default from [\jp90.fail \jp90.fail \jp90.fail ];
+ sub \jp90.alt1 from [\jp90.pass \jp90.fail \jp90.fail ];
+ sub \jp90.alt2 from [\jp90.fail \jp90.pass \jp90.fail ];
+ sub \jp90.alt3 from [\jp90.fail \jp90.fail \jp90.pass ];
+} jp90JIS90Formslookup151;
+
+lookup kernHorizontalKerninglookup152 {
+ lookupflag 0;
+ sub \kern.default from [\kern.fail \kern.fail \kern.fail ];
+ sub \kern.alt1 from [\kern.pass \kern.fail \kern.fail ];
+ sub \kern.alt2 from [\kern.fail \kern.pass \kern.fail ];
+ sub \kern.alt3 from [\kern.fail \kern.fail \kern.pass ];
+} kernHorizontalKerninglookup152;
+
+lookup lfbdLeftBoundslookup153 {
+ lookupflag 0;
+ sub \lfbd.default from [\lfbd.fail \lfbd.fail \lfbd.fail ];
+ sub \lfbd.alt1 from [\lfbd.pass \lfbd.fail \lfbd.fail ];
+ sub \lfbd.alt2 from [\lfbd.fail \lfbd.pass \lfbd.fail ];
+ sub \lfbd.alt3 from [\lfbd.fail \lfbd.fail \lfbd.pass ];
+} lfbdLeftBoundslookup153;
+
+lookup ligaStandardLigatureslookup154 {
+ lookupflag 0;
+ sub \liga.default from [\liga.fail \liga.fail \liga.fail ];
+ sub \liga.alt1 from [\liga.pass \liga.fail \liga.fail ];
+ sub \liga.alt2 from [\liga.fail \liga.pass \liga.fail ];
+ sub \liga.alt3 from [\liga.fail \liga.fail \liga.pass ];
+} ligaStandardLigatureslookup154;
+
+lookup ljmoLeadingJamoFormslookup155 {
+ lookupflag 0;
+ sub \ljmo.default from [\ljmo.fail \ljmo.fail \ljmo.fail ];
+ sub \ljmo.alt1 from [\ljmo.pass \ljmo.fail \ljmo.fail ];
+ sub \ljmo.alt2 from [\ljmo.fail \ljmo.pass \ljmo.fail ];
+ sub \ljmo.alt3 from [\ljmo.fail \ljmo.fail \ljmo.pass ];
+} ljmoLeadingJamoFormslookup155;
+
+lookup lnumLiningFigureslookup156 {
+ lookupflag 0;
+ sub \lnum.default from [\lnum.fail \lnum.fail \lnum.fail ];
+ sub \lnum.alt1 from [\lnum.pass \lnum.fail \lnum.fail ];
+ sub \lnum.alt2 from [\lnum.fail \lnum.pass \lnum.fail ];
+ sub \lnum.alt3 from [\lnum.fail \lnum.fail \lnum.pass ];
+} lnumLiningFigureslookup156;
+
+lookup loclLocalizedFormslookup157 {
+ lookupflag 0;
+ sub \locl.default from [\locl.fail \locl.fail \locl.fail ];
+ sub \locl.alt1 from [\locl.pass \locl.fail \locl.fail ];
+ sub \locl.alt2 from [\locl.fail \locl.pass \locl.fail ];
+ sub \locl.alt3 from [\locl.fail \locl.fail \locl.pass ];
+} loclLocalizedFormslookup157;
+
+lookup AlternateSubstitutionlookup158 {
+ lookupflag 0;
+ sub \ltra.default from [\ltra.fail \ltra.fail \ltra.fail ];
+ sub \ltra.alt1 from [\ltra.pass \ltra.fail \ltra.fail ];
+ sub \ltra.alt2 from [\ltra.fail \ltra.pass \ltra.fail ];
+ sub \ltra.alt3 from [\ltra.fail \ltra.fail \ltra.pass ];
+} AlternateSubstitutionlookup158;
+
+lookup AlternateSubstitutionlookup159 {
+ lookupflag 0;
+ sub \ltrm.default from [\ltrm.fail \ltrm.fail \ltrm.fail ];
+ sub \ltrm.alt1 from [\ltrm.pass \ltrm.fail \ltrm.fail ];
+ sub \ltrm.alt2 from [\ltrm.fail \ltrm.pass \ltrm.fail ];
+ sub \ltrm.alt3 from [\ltrm.fail \ltrm.fail \ltrm.pass ];
+} AlternateSubstitutionlookup159;
+
+lookup markMarkPositioninglookup160 {
+ lookupflag 0;
+ sub \mark.default from [\mark.fail \mark.fail \mark.fail ];
+ sub \mark.alt1 from [\mark.pass \mark.fail \mark.fail ];
+ sub \mark.alt2 from [\mark.fail \mark.pass \mark.fail ];
+ sub \mark.alt3 from [\mark.fail \mark.fail \mark.pass ];
+} markMarkPositioninglookup160;
+
+lookup med2MedialForms2lookup161 {
+ lookupflag 0;
+ sub \med2.default from [\med2.fail \med2.fail \med2.fail ];
+ sub \med2.alt1 from [\med2.pass \med2.fail \med2.fail ];
+ sub \med2.alt2 from [\med2.fail \med2.pass \med2.fail ];
+ sub \med2.alt3 from [\med2.fail \med2.fail \med2.pass ];
+} med2MedialForms2lookup161;
+
+lookup mediMedialFormslookup162 {
+ lookupflag 0;
+ sub \medi.default from [\medi.fail \medi.fail \medi.fail ];
+ sub \medi.alt1 from [\medi.pass \medi.fail \medi.fail ];
+ sub \medi.alt2 from [\medi.fail \medi.pass \medi.fail ];
+ sub \medi.alt3 from [\medi.fail \medi.fail \medi.pass ];
+} mediMedialFormslookup162;
+
+lookup mgrkMathematicalGreeklookup163 {
+ lookupflag 0;
+ sub \mgrk.default from [\mgrk.fail \mgrk.fail \mgrk.fail ];
+ sub \mgrk.alt1 from [\mgrk.pass \mgrk.fail \mgrk.fail ];
+ sub \mgrk.alt2 from [\mgrk.fail \mgrk.pass \mgrk.fail ];
+ sub \mgrk.alt3 from [\mgrk.fail \mgrk.fail \mgrk.pass ];
+} mgrkMathematicalGreeklookup163;
+
+lookup mkmkMarktoMarklookup164 {
+ lookupflag 0;
+ sub \mkmk.default from [\mkmk.fail \mkmk.fail \mkmk.fail ];
+ sub \mkmk.alt1 from [\mkmk.pass \mkmk.fail \mkmk.fail ];
+ sub \mkmk.alt2 from [\mkmk.fail \mkmk.pass \mkmk.fail ];
+ sub \mkmk.alt3 from [\mkmk.fail \mkmk.fail \mkmk.pass ];
+} mkmkMarktoMarklookup164;
+
+lookup msetMarkPositioningviaSubstitut {
+ lookupflag 0;
+ sub \mset.default from [\mset.fail \mset.fail \mset.fail ];
+ sub \mset.alt1 from [\mset.pass \mset.fail \mset.fail ];
+ sub \mset.alt2 from [\mset.fail \mset.pass \mset.fail ];
+ sub \mset.alt3 from [\mset.fail \mset.fail \mset.pass ];
+} msetMarkPositioningviaSubstitut;
+
+lookup naltAlternateAnnotationFormsloo {
+ lookupflag 0;
+ sub \nalt.default from [\nalt.fail \nalt.fail \nalt.fail ];
+ sub \nalt.alt1 from [\nalt.pass \nalt.fail \nalt.fail ];
+ sub \nalt.alt2 from [\nalt.fail \nalt.pass \nalt.fail ];
+ sub \nalt.alt3 from [\nalt.fail \nalt.fail \nalt.pass ];
+} naltAlternateAnnotationFormsloo;
+
+lookup nlckNLCKanjiFormslookup167 {
+ lookupflag 0;
+ sub \nlck.default from [\nlck.fail \nlck.fail \nlck.fail ];
+ sub \nlck.alt1 from [\nlck.pass \nlck.fail \nlck.fail ];
+ sub \nlck.alt2 from [\nlck.fail \nlck.pass \nlck.fail ];
+ sub \nlck.alt3 from [\nlck.fail \nlck.fail \nlck.pass ];
+} nlckNLCKanjiFormslookup167;
+
+lookup nuktNuktaFormslookup168 {
+ lookupflag 0;
+ sub \nukt.default from [\nukt.fail \nukt.fail \nukt.fail ];
+ sub \nukt.alt1 from [\nukt.pass \nukt.fail \nukt.fail ];
+ sub \nukt.alt2 from [\nukt.fail \nukt.pass \nukt.fail ];
+ sub \nukt.alt3 from [\nukt.fail \nukt.fail \nukt.pass ];
+} nuktNuktaFormslookup168;
+
+lookup numrNumeratorslookup169 {
+ lookupflag 0;
+ sub \numr.default from [\numr.fail \numr.fail \numr.fail ];
+ sub \numr.alt1 from [\numr.pass \numr.fail \numr.fail ];
+ sub \numr.alt2 from [\numr.fail \numr.pass \numr.fail ];
+ sub \numr.alt3 from [\numr.fail \numr.fail \numr.pass ];
+} numrNumeratorslookup169;
+
+lookup onumOldstyleFigureslookup170 {
+ lookupflag 0;
+ sub \onum.default from [\onum.fail \onum.fail \onum.fail ];
+ sub \onum.alt1 from [\onum.pass \onum.fail \onum.fail ];
+ sub \onum.alt2 from [\onum.fail \onum.pass \onum.fail ];
+ sub \onum.alt3 from [\onum.fail \onum.fail \onum.pass ];
+} onumOldstyleFigureslookup170;
+
+lookup opbdOpticalBoundslookup171 {
+ lookupflag 0;
+ sub \opbd.default from [\opbd.fail \opbd.fail \opbd.fail ];
+ sub \opbd.alt1 from [\opbd.pass \opbd.fail \opbd.fail ];
+ sub \opbd.alt2 from [\opbd.fail \opbd.pass \opbd.fail ];
+ sub \opbd.alt3 from [\opbd.fail \opbd.fail \opbd.pass ];
+} opbdOpticalBoundslookup171;
+
+lookup ordnOrdinalslookup172 {
+ lookupflag 0;
+ sub \ordn.default from [\ordn.fail \ordn.fail \ordn.fail ];
+ sub \ordn.alt1 from [\ordn.pass \ordn.fail \ordn.fail ];
+ sub \ordn.alt2 from [\ordn.fail \ordn.pass \ordn.fail ];
+ sub \ordn.alt3 from [\ordn.fail \ordn.fail \ordn.pass ];
+} ordnOrdinalslookup172;
+
+lookup ornmOrnamentslookup173 {
+ lookupflag 0;
+ sub \ornm.default from [\ornm.fail \ornm.fail \ornm.fail ];
+ sub \ornm.alt1 from [\ornm.pass \ornm.fail \ornm.fail ];
+ sub \ornm.alt2 from [\ornm.fail \ornm.pass \ornm.fail ];
+ sub \ornm.alt3 from [\ornm.fail \ornm.fail \ornm.pass ];
+} ornmOrnamentslookup173;
+
+lookup paltProportionalAlternateMetric {
+ lookupflag 0;
+ sub \palt.default from [\palt.fail \palt.fail \palt.fail ];
+ sub \palt.alt1 from [\palt.pass \palt.fail \palt.fail ];
+ sub \palt.alt2 from [\palt.fail \palt.pass \palt.fail ];
+ sub \palt.alt3 from [\palt.fail \palt.fail \palt.pass ];
+} paltProportionalAlternateMetric;
+
+lookup pcapLowercasetoPetiteCapitalslo {
+ lookupflag 0;
+ sub \pcap.default from [\pcap.fail \pcap.fail \pcap.fail ];
+ sub \pcap.alt1 from [\pcap.pass \pcap.fail \pcap.fail ];
+ sub \pcap.alt2 from [\pcap.fail \pcap.pass \pcap.fail ];
+ sub \pcap.alt3 from [\pcap.fail \pcap.fail \pcap.pass ];
+} pcapLowercasetoPetiteCapitalslo;
+
+lookup pknaProportionalKanalookup176 {
+ lookupflag 0;
+ sub \pkna.default from [\pkna.fail \pkna.fail \pkna.fail ];
+ sub \pkna.alt1 from [\pkna.pass \pkna.fail \pkna.fail ];
+ sub \pkna.alt2 from [\pkna.fail \pkna.pass \pkna.fail ];
+ sub \pkna.alt3 from [\pkna.fail \pkna.fail \pkna.pass ];
+} pknaProportionalKanalookup176;
+
+lookup pnumProportionalNumberslookup17 {
+ lookupflag 0;
+ sub \pnum.default from [\pnum.fail \pnum.fail \pnum.fail ];
+ sub \pnum.alt1 from [\pnum.pass \pnum.fail \pnum.fail ];
+ sub \pnum.alt2 from [\pnum.fail \pnum.pass \pnum.fail ];
+ sub \pnum.alt3 from [\pnum.fail \pnum.fail \pnum.pass ];
+} pnumProportionalNumberslookup17;
+
+lookup prefPreBaseFormslookup178 {
+ lookupflag 0;
+ sub \pref.default from [\pref.fail \pref.fail \pref.fail ];
+ sub \pref.alt1 from [\pref.pass \pref.fail \pref.fail ];
+ sub \pref.alt2 from [\pref.fail \pref.pass \pref.fail ];
+ sub \pref.alt3 from [\pref.fail \pref.fail \pref.pass ];
+} prefPreBaseFormslookup178;
+
+lookup presPreBaseSubstitutionslookup1 {
+ lookupflag 0;
+ sub \pres.default from [\pres.fail \pres.fail \pres.fail ];
+ sub \pres.alt1 from [\pres.pass \pres.fail \pres.fail ];
+ sub \pres.alt2 from [\pres.fail \pres.pass \pres.fail ];
+ sub \pres.alt3 from [\pres.fail \pres.fail \pres.pass ];
+} presPreBaseSubstitutionslookup1;
+
+lookup pstfPostBaseFormslookup180 {
+ lookupflag 0;
+ sub \pstf.default from [\pstf.fail \pstf.fail \pstf.fail ];
+ sub \pstf.alt1 from [\pstf.pass \pstf.fail \pstf.fail ];
+ sub \pstf.alt2 from [\pstf.fail \pstf.pass \pstf.fail ];
+ sub \pstf.alt3 from [\pstf.fail \pstf.fail \pstf.pass ];
+} pstfPostBaseFormslookup180;
+
+lookup pstsPostBaseSubstitutionslookup {
+ lookupflag 0;
+ sub \psts.default from [\psts.fail \psts.fail \psts.fail ];
+ sub \psts.alt1 from [\psts.pass \psts.fail \psts.fail ];
+ sub \psts.alt2 from [\psts.fail \psts.pass \psts.fail ];
+ sub \psts.alt3 from [\psts.fail \psts.fail \psts.pass ];
+} pstsPostBaseSubstitutionslookup;
+
+lookup pwidProportionalWidthlookup182 {
+ lookupflag 0;
+ sub \pwid.default from [\pwid.fail \pwid.fail \pwid.fail ];
+ sub \pwid.alt1 from [\pwid.pass \pwid.fail \pwid.fail ];
+ sub \pwid.alt2 from [\pwid.fail \pwid.pass \pwid.fail ];
+ sub \pwid.alt3 from [\pwid.fail \pwid.fail \pwid.pass ];
+} pwidProportionalWidthlookup182;
+
+lookup qwidQuarterWidthslookup183 {
+ lookupflag 0;
+ sub \qwid.default from [\qwid.fail \qwid.fail \qwid.fail ];
+ sub \qwid.alt1 from [\qwid.pass \qwid.fail \qwid.fail ];
+ sub \qwid.alt2 from [\qwid.fail \qwid.pass \qwid.fail ];
+ sub \qwid.alt3 from [\qwid.fail \qwid.fail \qwid.pass ];
+} qwidQuarterWidthslookup183;
+
+lookup randRandomizelookup184 {
+ lookupflag 0;
+ sub \rand.default from [\rand.fail \rand.fail \rand.fail ];
+ sub \rand.alt1 from [\rand.pass \rand.fail \rand.fail ];
+ sub \rand.alt2 from [\rand.fail \rand.pass \rand.fail ];
+ sub \rand.alt3 from [\rand.fail \rand.fail \rand.pass ];
+} randRandomizelookup184;
+
+lookup rkrfRakarFormslookup185 {
+ lookupflag 0;
+ sub \rkrf.default from [\rkrf.fail \rkrf.fail \rkrf.fail ];
+ sub \rkrf.alt1 from [\rkrf.pass \rkrf.fail \rkrf.fail ];
+ sub \rkrf.alt2 from [\rkrf.fail \rkrf.pass \rkrf.fail ];
+ sub \rkrf.alt3 from [\rkrf.fail \rkrf.fail \rkrf.pass ];
+} rkrfRakarFormslookup185;
+
+lookup rligRequiredLigatureslookup186 {
+ lookupflag 0;
+ sub \rlig.default from [\rlig.fail \rlig.fail \rlig.fail ];
+ sub \rlig.alt1 from [\rlig.pass \rlig.fail \rlig.fail ];
+ sub \rlig.alt2 from [\rlig.fail \rlig.pass \rlig.fail ];
+ sub \rlig.alt3 from [\rlig.fail \rlig.fail \rlig.pass ];
+} rligRequiredLigatureslookup186;
+
+lookup rphfRephFormlookup187 {
+ lookupflag 0;
+ sub \rphf.default from [\rphf.fail \rphf.fail \rphf.fail ];
+ sub \rphf.alt1 from [\rphf.pass \rphf.fail \rphf.fail ];
+ sub \rphf.alt2 from [\rphf.fail \rphf.pass \rphf.fail ];
+ sub \rphf.alt3 from [\rphf.fail \rphf.fail \rphf.pass ];
+} rphfRephFormlookup187;
+
+lookup rtbdRightBoundslookup188 {
+ lookupflag 0;
+ sub \rtbd.default from [\rtbd.fail \rtbd.fail \rtbd.fail ];
+ sub \rtbd.alt1 from [\rtbd.pass \rtbd.fail \rtbd.fail ];
+ sub \rtbd.alt2 from [\rtbd.fail \rtbd.pass \rtbd.fail ];
+ sub \rtbd.alt3 from [\rtbd.fail \rtbd.fail \rtbd.pass ];
+} rtbdRightBoundslookup188;
+
+lookup rtlaRighttoLeftAlternateslookup {
+ lookupflag 0;
+ sub \rtla.default from [\rtla.fail \rtla.fail \rtla.fail ];
+ sub \rtla.alt1 from [\rtla.pass \rtla.fail \rtla.fail ];
+ sub \rtla.alt2 from [\rtla.fail \rtla.pass \rtla.fail ];
+ sub \rtla.alt3 from [\rtla.fail \rtla.fail \rtla.pass ];
+} rtlaRighttoLeftAlternateslookup;
+
+lookup rtlmRighttoLeftmirroredformsloo {
+ lookupflag 0;
+ sub \rtlm.default from [\rtlm.fail \rtlm.fail \rtlm.fail ];
+ sub \rtlm.alt1 from [\rtlm.pass \rtlm.fail \rtlm.fail ];
+ sub \rtlm.alt2 from [\rtlm.fail \rtlm.pass \rtlm.fail ];
+ sub \rtlm.alt3 from [\rtlm.fail \rtlm.fail \rtlm.pass ];
+} rtlmRighttoLeftmirroredformsloo;
+
+lookup rubyRubyNotationalFormslookup19 {
+ lookupflag 0;
+ sub \ruby.default from [\ruby.fail \ruby.fail \ruby.fail ];
+ sub \ruby.alt1 from [\ruby.pass \ruby.fail \ruby.fail ];
+ sub \ruby.alt2 from [\ruby.fail \ruby.pass \ruby.fail ];
+ sub \ruby.alt3 from [\ruby.fail \ruby.fail \ruby.pass ];
+} rubyRubyNotationalFormslookup19;
+
+lookup saltStylisticAlternativeslookup {
+ lookupflag 0;
+ sub \salt.default from [\salt.fail \salt.fail \salt.fail ];
+ sub \salt.alt1 from [\salt.pass \salt.fail \salt.fail ];
+ sub \salt.alt2 from [\salt.fail \salt.pass \salt.fail ];
+ sub \salt.alt3 from [\salt.fail \salt.fail \salt.pass ];
+} saltStylisticAlternativeslookup;
+
+lookup sinfScientificInferiorslookup19 {
+ lookupflag 0;
+ sub \sinf.default from [\sinf.fail \sinf.fail \sinf.fail ];
+ sub \sinf.alt1 from [\sinf.pass \sinf.fail \sinf.fail ];
+ sub \sinf.alt2 from [\sinf.fail \sinf.pass \sinf.fail ];
+ sub \sinf.alt3 from [\sinf.fail \sinf.fail \sinf.pass ];
+} sinfScientificInferiorslookup19;
+
+lookup AlternateSubstitutionlookup194 {
+ lookupflag 0;
+ sub \size.default from [\size.fail \size.fail \size.fail ];
+ sub \size.alt1 from [\size.pass \size.fail \size.fail ];
+ sub \size.alt2 from [\size.fail \size.pass \size.fail ];
+ sub \size.alt3 from [\size.fail \size.fail \size.pass ];
+} AlternateSubstitutionlookup194;
+
+lookup smcpLowercasetoSmallCapitalsloo {
+ lookupflag 0;
+ sub \smcp.default from [\smcp.fail \smcp.fail \smcp.fail ];
+ sub \smcp.alt1 from [\smcp.pass \smcp.fail \smcp.fail ];
+ sub \smcp.alt2 from [\smcp.fail \smcp.pass \smcp.fail ];
+ sub \smcp.alt3 from [\smcp.fail \smcp.fail \smcp.pass ];
+} smcpLowercasetoSmallCapitalsloo;
+
+lookup smplSimplifiedFormslookup196 {
+ lookupflag 0;
+ sub \smpl.default from [\smpl.fail \smpl.fail \smpl.fail ];
+ sub \smpl.alt1 from [\smpl.pass \smpl.fail \smpl.fail ];
+ sub \smpl.alt2 from [\smpl.fail \smpl.pass \smpl.fail ];
+ sub \smpl.alt3 from [\smpl.fail \smpl.fail \smpl.pass ];
+} smplSimplifiedFormslookup196;
+
+lookup AlternateSubstitutionlookup197 {
+ lookupflag 0;
+ sub \ss00.default from [\ss00.fail \ss00.fail \ss00.fail ];
+ sub \ss00.alt1 from [\ss00.pass \ss00.fail \ss00.fail ];
+ sub \ss00.alt2 from [\ss00.fail \ss00.pass \ss00.fail ];
+ sub \ss00.alt3 from [\ss00.fail \ss00.fail \ss00.pass ];
+} AlternateSubstitutionlookup197;
+
+lookup ss01StyleSet1lookup198 {
+ lookupflag 0;
+ sub \ss01.default from [\ss01.fail \ss01.fail \ss01.fail ];
+ sub \ss01.alt1 from [\ss01.pass \ss01.fail \ss01.fail ];
+ sub \ss01.alt2 from [\ss01.fail \ss01.pass \ss01.fail ];
+ sub \ss01.alt3 from [\ss01.fail \ss01.fail \ss01.pass ];
+} ss01StyleSet1lookup198;
+
+lookup ss02StyleSet2lookup199 {
+ lookupflag 0;
+ sub \ss02.default from [\ss02.fail \ss02.fail \ss02.fail ];
+ sub \ss02.alt1 from [\ss02.pass \ss02.fail \ss02.fail ];
+ sub \ss02.alt2 from [\ss02.fail \ss02.pass \ss02.fail ];
+ sub \ss02.alt3 from [\ss02.fail \ss02.fail \ss02.pass ];
+} ss02StyleSet2lookup199;
+
+lookup ss03StyleSet3lookup200 {
+ lookupflag 0;
+ sub \ss03.default from [\ss03.fail \ss03.fail \ss03.fail ];
+ sub \ss03.alt1 from [\ss03.pass \ss03.fail \ss03.fail ];
+ sub \ss03.alt2 from [\ss03.fail \ss03.pass \ss03.fail ];
+ sub \ss03.alt3 from [\ss03.fail \ss03.fail \ss03.pass ];
+} ss03StyleSet3lookup200;
+
+lookup ss04StyleSet4lookup201 {
+ lookupflag 0;
+ sub \ss04.default from [\ss04.fail \ss04.fail \ss04.fail ];
+ sub \ss04.alt1 from [\ss04.pass \ss04.fail \ss04.fail ];
+ sub \ss04.alt2 from [\ss04.fail \ss04.pass \ss04.fail ];
+ sub \ss04.alt3 from [\ss04.fail \ss04.fail \ss04.pass ];
+} ss04StyleSet4lookup201;
+
+lookup ss05StyleSet5lookup202 {
+ lookupflag 0;
+ sub \ss05.default from [\ss05.fail \ss05.fail \ss05.fail ];
+ sub \ss05.alt1 from [\ss05.pass \ss05.fail \ss05.fail ];
+ sub \ss05.alt2 from [\ss05.fail \ss05.pass \ss05.fail ];
+ sub \ss05.alt3 from [\ss05.fail \ss05.fail \ss05.pass ];
+} ss05StyleSet5lookup202;
+
+lookup ss06StyleSet6lookup203 {
+ lookupflag 0;
+ sub \ss06.default from [\ss06.fail \ss06.fail \ss06.fail ];
+ sub \ss06.alt1 from [\ss06.pass \ss06.fail \ss06.fail ];
+ sub \ss06.alt2 from [\ss06.fail \ss06.pass \ss06.fail ];
+ sub \ss06.alt3 from [\ss06.fail \ss06.fail \ss06.pass ];
+} ss06StyleSet6lookup203;
+
+lookup ss07StyleSet7lookup204 {
+ lookupflag 0;
+ sub \ss07.default from [\ss07.fail \ss07.fail \ss07.fail ];
+ sub \ss07.alt1 from [\ss07.pass \ss07.fail \ss07.fail ];
+ sub \ss07.alt2 from [\ss07.fail \ss07.pass \ss07.fail ];
+ sub \ss07.alt3 from [\ss07.fail \ss07.fail \ss07.pass ];
+} ss07StyleSet7lookup204;
+
+lookup ss08StyleSet8lookup205 {
+ lookupflag 0;
+ sub \ss08.default from [\ss08.fail \ss08.fail \ss08.fail ];
+ sub \ss08.alt1 from [\ss08.pass \ss08.fail \ss08.fail ];
+ sub \ss08.alt2 from [\ss08.fail \ss08.pass \ss08.fail ];
+ sub \ss08.alt3 from [\ss08.fail \ss08.fail \ss08.pass ];
+} ss08StyleSet8lookup205;
+
+lookup ss09StyleSet9lookup206 {
+ lookupflag 0;
+ sub \ss09.default from [\ss09.fail \ss09.fail \ss09.fail ];
+ sub \ss09.alt1 from [\ss09.pass \ss09.fail \ss09.fail ];
+ sub \ss09.alt2 from [\ss09.fail \ss09.pass \ss09.fail ];
+ sub \ss09.alt3 from [\ss09.fail \ss09.fail \ss09.pass ];
+} ss09StyleSet9lookup206;
+
+lookup ss10StyleSet10lookup207 {
+ lookupflag 0;
+ sub \ss10.default from [\ss10.fail \ss10.fail \ss10.fail ];
+ sub \ss10.alt1 from [\ss10.pass \ss10.fail \ss10.fail ];
+ sub \ss10.alt2 from [\ss10.fail \ss10.pass \ss10.fail ];
+ sub \ss10.alt3 from [\ss10.fail \ss10.fail \ss10.pass ];
+} ss10StyleSet10lookup207;
+
+lookup ss11StyleSet11lookup208 {
+ lookupflag 0;
+ sub \ss11.default from [\ss11.fail \ss11.fail \ss11.fail ];
+ sub \ss11.alt1 from [\ss11.pass \ss11.fail \ss11.fail ];
+ sub \ss11.alt2 from [\ss11.fail \ss11.pass \ss11.fail ];
+ sub \ss11.alt3 from [\ss11.fail \ss11.fail \ss11.pass ];
+} ss11StyleSet11lookup208;
+
+lookup ss12StyleSet12lookup209 {
+ lookupflag 0;
+ sub \ss12.default from [\ss12.fail \ss12.fail \ss12.fail ];
+ sub \ss12.alt1 from [\ss12.pass \ss12.fail \ss12.fail ];
+ sub \ss12.alt2 from [\ss12.fail \ss12.pass \ss12.fail ];
+ sub \ss12.alt3 from [\ss12.fail \ss12.fail \ss12.pass ];
+} ss12StyleSet12lookup209;
+
+lookup ss13StyleSet13lookup210 {
+ lookupflag 0;
+ sub \ss13.default from [\ss13.fail \ss13.fail \ss13.fail ];
+ sub \ss13.alt1 from [\ss13.pass \ss13.fail \ss13.fail ];
+ sub \ss13.alt2 from [\ss13.fail \ss13.pass \ss13.fail ];
+ sub \ss13.alt3 from [\ss13.fail \ss13.fail \ss13.pass ];
+} ss13StyleSet13lookup210;
+
+lookup ss14StyleSet14lookup211 {
+ lookupflag 0;
+ sub \ss14.default from [\ss14.fail \ss14.fail \ss14.fail ];
+ sub \ss14.alt1 from [\ss14.pass \ss14.fail \ss14.fail ];
+ sub \ss14.alt2 from [\ss14.fail \ss14.pass \ss14.fail ];
+ sub \ss14.alt3 from [\ss14.fail \ss14.fail \ss14.pass ];
+} ss14StyleSet14lookup211;
+
+lookup ss15StyleSet15lookup212 {
+ lookupflag 0;
+ sub \ss15.default from [\ss15.fail \ss15.fail \ss15.fail ];
+ sub \ss15.alt1 from [\ss15.pass \ss15.fail \ss15.fail ];
+ sub \ss15.alt2 from [\ss15.fail \ss15.pass \ss15.fail ];
+ sub \ss15.alt3 from [\ss15.fail \ss15.fail \ss15.pass ];
+} ss15StyleSet15lookup212;
+
+lookup ss16StyleSet16lookup213 {
+ lookupflag 0;
+ sub \ss16.default from [\ss16.fail \ss16.fail \ss16.fail ];
+ sub \ss16.alt1 from [\ss16.pass \ss16.fail \ss16.fail ];
+ sub \ss16.alt2 from [\ss16.fail \ss16.pass \ss16.fail ];
+ sub \ss16.alt3 from [\ss16.fail \ss16.fail \ss16.pass ];
+} ss16StyleSet16lookup213;
+
+lookup ss17StyleSet17lookup214 {
+ lookupflag 0;
+ sub \ss17.default from [\ss17.fail \ss17.fail \ss17.fail ];
+ sub \ss17.alt1 from [\ss17.pass \ss17.fail \ss17.fail ];
+ sub \ss17.alt2 from [\ss17.fail \ss17.pass \ss17.fail ];
+ sub \ss17.alt3 from [\ss17.fail \ss17.fail \ss17.pass ];
+} ss17StyleSet17lookup214;
+
+lookup ss18StyleSet18lookup215 {
+ lookupflag 0;
+ sub \ss18.default from [\ss18.fail \ss18.fail \ss18.fail ];
+ sub \ss18.alt1 from [\ss18.pass \ss18.fail \ss18.fail ];
+ sub \ss18.alt2 from [\ss18.fail \ss18.pass \ss18.fail ];
+ sub \ss18.alt3 from [\ss18.fail \ss18.fail \ss18.pass ];
+} ss18StyleSet18lookup215;
+
+lookup ss19StyleSet19lookup216 {
+ lookupflag 0;
+ sub \ss19.default from [\ss19.fail \ss19.fail \ss19.fail ];
+ sub \ss19.alt1 from [\ss19.pass \ss19.fail \ss19.fail ];
+ sub \ss19.alt2 from [\ss19.fail \ss19.pass \ss19.fail ];
+ sub \ss19.alt3 from [\ss19.fail \ss19.fail \ss19.pass ];
+} ss19StyleSet19lookup216;
+
+lookup ss20StyleSet20lookup217 {
+ lookupflag 0;
+ sub \ss20.default from [\ss20.fail \ss20.fail \ss20.fail ];
+ sub \ss20.alt1 from [\ss20.pass \ss20.fail \ss20.fail ];
+ sub \ss20.alt2 from [\ss20.fail \ss20.pass \ss20.fail ];
+ sub \ss20.alt3 from [\ss20.fail \ss20.fail \ss20.pass ];
+} ss20StyleSet20lookup217;
+
+lookup AlternateSubstitutionlookup218 {
+ lookupflag 0;
+ sub \ss21.default from [\ss21.fail \ss21.fail \ss21.fail ];
+ sub \ss21.alt1 from [\ss21.pass \ss21.fail \ss21.fail ];
+ sub \ss21.alt2 from [\ss21.fail \ss21.pass \ss21.fail ];
+ sub \ss21.alt3 from [\ss21.fail \ss21.fail \ss21.pass ];
+} AlternateSubstitutionlookup218;
+
+lookup subsSubscriptlookup219 {
+ lookupflag 0;
+ sub \subs.default from [\subs.fail \subs.fail \subs.fail ];
+ sub \subs.alt1 from [\subs.pass \subs.fail \subs.fail ];
+ sub \subs.alt2 from [\subs.fail \subs.pass \subs.fail ];
+ sub \subs.alt3 from [\subs.fail \subs.fail \subs.pass ];
+} subsSubscriptlookup219;
+
+lookup supsSuperscriptlookup220 {
+ lookupflag 0;
+ sub \sups.default from [\sups.fail \sups.fail \sups.fail ];
+ sub \sups.alt1 from [\sups.pass \sups.fail \sups.fail ];
+ sub \sups.alt2 from [\sups.fail \sups.pass \sups.fail ];
+ sub \sups.alt3 from [\sups.fail \sups.fail \sups.pass ];
+} supsSuperscriptlookup220;
+
+lookup swshSwashlookup221 {
+ lookupflag 0;
+ sub \swsh.default from [\swsh.fail \swsh.fail \swsh.fail ];
+ sub \swsh.alt1 from [\swsh.pass \swsh.fail \swsh.fail ];
+ sub \swsh.alt2 from [\swsh.fail \swsh.pass \swsh.fail ];
+ sub \swsh.alt3 from [\swsh.fail \swsh.fail \swsh.pass ];
+} swshSwashlookup221;
+
+lookup titlTitlinglookup222 {
+ lookupflag 0;
+ sub \titl.default from [\titl.fail \titl.fail \titl.fail ];
+ sub \titl.alt1 from [\titl.pass \titl.fail \titl.fail ];
+ sub \titl.alt2 from [\titl.fail \titl.pass \titl.fail ];
+ sub \titl.alt3 from [\titl.fail \titl.fail \titl.pass ];
+} titlTitlinglookup222;
+
+lookup tjmoTrailingJamoFormslookup223 {
+ lookupflag 0;
+ sub \tjmo.default from [\tjmo.fail \tjmo.fail \tjmo.fail ];
+ sub \tjmo.alt1 from [\tjmo.pass \tjmo.fail \tjmo.fail ];
+ sub \tjmo.alt2 from [\tjmo.fail \tjmo.pass \tjmo.fail ];
+ sub \tjmo.alt3 from [\tjmo.fail \tjmo.fail \tjmo.pass ];
+} tjmoTrailingJamoFormslookup223;
+
+lookup tnamTraditionalNameFormslookup2 {
+ lookupflag 0;
+ sub \tnam.default from [\tnam.fail \tnam.fail \tnam.fail ];
+ sub \tnam.alt1 from [\tnam.pass \tnam.fail \tnam.fail ];
+ sub \tnam.alt2 from [\tnam.fail \tnam.pass \tnam.fail ];
+ sub \tnam.alt3 from [\tnam.fail \tnam.fail \tnam.pass ];
+} tnamTraditionalNameFormslookup2;
+
+lookup tnumTabularNumberslookup225 {
+ lookupflag 0;
+ sub \tnum.default from [\tnum.fail \tnum.fail \tnum.fail ];
+ sub \tnum.alt1 from [\tnum.pass \tnum.fail \tnum.fail ];
+ sub \tnum.alt2 from [\tnum.fail \tnum.pass \tnum.fail ];
+ sub \tnum.alt3 from [\tnum.fail \tnum.fail \tnum.pass ];
+} tnumTabularNumberslookup225;
+
+lookup tradTraditionalFormslookup226 {
+ lookupflag 0;
+ sub \trad.default from [\trad.fail \trad.fail \trad.fail ];
+ sub \trad.alt1 from [\trad.pass \trad.fail \trad.fail ];
+ sub \trad.alt2 from [\trad.fail \trad.pass \trad.fail ];
+ sub \trad.alt3 from [\trad.fail \trad.fail \trad.pass ];
+} tradTraditionalFormslookup226;
+
+lookup twidThirdWidthslookup227 {
+ lookupflag 0;
+ sub \twid.default from [\twid.fail \twid.fail \twid.fail ];
+ sub \twid.alt1 from [\twid.pass \twid.fail \twid.fail ];
+ sub \twid.alt2 from [\twid.fail \twid.pass \twid.fail ];
+ sub \twid.alt3 from [\twid.fail \twid.fail \twid.pass ];
+} twidThirdWidthslookup227;
+
+lookup unicUnicaselookup228 {
+ lookupflag 0;
+ sub \unic.default from [\unic.fail \unic.fail \unic.fail ];
+ sub \unic.alt1 from [\unic.pass \unic.fail \unic.fail ];
+ sub \unic.alt2 from [\unic.fail \unic.pass \unic.fail ];
+ sub \unic.alt3 from [\unic.fail \unic.fail \unic.pass ];
+} unicUnicaselookup228;
+
+lookup valtAlternateVerticalMetricsloo {
+ lookupflag 0;
+ sub \valt.default from [\valt.fail \valt.fail \valt.fail ];
+ sub \valt.alt1 from [\valt.pass \valt.fail \valt.fail ];
+ sub \valt.alt2 from [\valt.fail \valt.pass \valt.fail ];
+ sub \valt.alt3 from [\valt.fail \valt.fail \valt.pass ];
+} valtAlternateVerticalMetricsloo;
+
+lookup vatuVattuVariantslookup230 {
+ lookupflag 0;
+ sub \vatu.default from [\vatu.fail \vatu.fail \vatu.fail ];
+ sub \vatu.alt1 from [\vatu.pass \vatu.fail \vatu.fail ];
+ sub \vatu.alt2 from [\vatu.fail \vatu.pass \vatu.fail ];
+ sub \vatu.alt3 from [\vatu.fail \vatu.fail \vatu.pass ];
+} vatuVattuVariantslookup230;
+
+lookup vertVerticalAlternatesobslookup {
+ lookupflag 0;
+ sub \vert.default from [\vert.fail \vert.fail \vert.fail ];
+ sub \vert.alt1 from [\vert.pass \vert.fail \vert.fail ];
+ sub \vert.alt2 from [\vert.fail \vert.pass \vert.fail ];
+ sub \vert.alt3 from [\vert.fail \vert.fail \vert.pass ];
+} vertVerticalAlternatesobslookup;
+
+lookup vhalAlternateVerticalHalfMetric {
+ lookupflag 0;
+ sub \vhal.default from [\vhal.fail \vhal.fail \vhal.fail ];
+ sub \vhal.alt1 from [\vhal.pass \vhal.fail \vhal.fail ];
+ sub \vhal.alt2 from [\vhal.fail \vhal.pass \vhal.fail ];
+ sub \vhal.alt3 from [\vhal.fail \vhal.fail \vhal.pass ];
+} vhalAlternateVerticalHalfMetric;
+
+lookup vjmoVowelJamoFormslookup233 {
+ lookupflag 0;
+ sub \vjmo.default from [\vjmo.fail \vjmo.fail \vjmo.fail ];
+ sub \vjmo.alt1 from [\vjmo.pass \vjmo.fail \vjmo.fail ];
+ sub \vjmo.alt2 from [\vjmo.fail \vjmo.pass \vjmo.fail ];
+ sub \vjmo.alt3 from [\vjmo.fail \vjmo.fail \vjmo.pass ];
+} vjmoVowelJamoFormslookup233;
+
+lookup vknaVerticalKanaAlternateslooku {
+ lookupflag 0;
+ sub \vkna.default from [\vkna.fail \vkna.fail \vkna.fail ];
+ sub \vkna.alt1 from [\vkna.pass \vkna.fail \vkna.fail ];
+ sub \vkna.alt2 from [\vkna.fail \vkna.pass \vkna.fail ];
+ sub \vkna.alt3 from [\vkna.fail \vkna.fail \vkna.pass ];
+} vknaVerticalKanaAlternateslooku;
+
+lookup vkrnVerticalKerninglookup235 {
+ lookupflag 0;
+ sub \vkrn.default from [\vkrn.fail \vkrn.fail \vkrn.fail ];
+ sub \vkrn.alt1 from [\vkrn.pass \vkrn.fail \vkrn.fail ];
+ sub \vkrn.alt2 from [\vkrn.fail \vkrn.pass \vkrn.fail ];
+ sub \vkrn.alt3 from [\vkrn.fail \vkrn.fail \vkrn.pass ];
+} vkrnVerticalKerninglookup235;
+
+lookup vpalProportionalAlternateVertic {
+ lookupflag 0;
+ sub \vpal.default from [\vpal.fail \vpal.fail \vpal.fail ];
+ sub \vpal.alt1 from [\vpal.pass \vpal.fail \vpal.fail ];
+ sub \vpal.alt2 from [\vpal.fail \vpal.pass \vpal.fail ];
+ sub \vpal.alt3 from [\vpal.fail \vpal.fail \vpal.pass ];
+} vpalProportionalAlternateVertic;
+
+lookup vrt2VerticalRotationAlternatesl {
+ lookupflag 0;
+ sub \vrt2.default from [\vrt2.fail \vrt2.fail \vrt2.fail ];
+ sub \vrt2.alt1 from [\vrt2.pass \vrt2.fail \vrt2.fail ];
+ sub \vrt2.alt2 from [\vrt2.fail \vrt2.pass \vrt2.fail ];
+ sub \vrt2.alt3 from [\vrt2.fail \vrt2.fail \vrt2.pass ];
+} vrt2VerticalRotationAlternatesl;
+
+lookup zeroSlashedZerolookup238 {
+ lookupflag 0;
+ sub \zero.default from [\zero.fail \zero.fail \zero.fail ];
+ sub \zero.alt1 from [\zero.pass \zero.fail \zero.fail ];
+ sub \zero.alt2 from [\zero.fail \zero.pass \zero.fail ];
+ sub \zero.alt3 from [\zero.fail \zero.fail \zero.pass ];
+} zeroSlashedZerolookup238;
+
+feature MWL1 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup0;
+} MWL1;
+
+feature NUM2 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup1;
+} NUM2;
+
+feature PRIV {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup2;
+} PRIV;
+
+feature T3ST {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup3;
+} T3ST;
+
+feature TPSP {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup4;
+} TPSP;
+
+feature abvf {
+
+ script DFLT;
+ language dflt ;
+ lookup abvfAboveBaseFormslookup5;
+} abvf;
+
+feature abvm {
+
+ script DFLT;
+ language dflt ;
+ lookup abvmAboveBaseMarklookup6;
+} abvm;
+
+feature abvs {
+
+ script DFLT;
+ language dflt ;
+ lookup abvsAboveBaseSubstitutionslooku;
+} abvs;
+
+feature afrc {
+
+ script DFLT;
+ language dflt ;
+ lookup afrcVerticalFractionslookup8;
+} afrc;
+
+feature akhn {
+
+ script DFLT;
+ language dflt ;
+ lookup akhnAkhandlookup9;
+} akhn;
+
+feature blwf {
+
+ script DFLT;
+ language dflt ;
+ lookup blwfBelowBaseFormslookup10;
+} blwf;
+
+feature blwm {
+
+ script DFLT;
+ language dflt ;
+ lookup blwmBelowBaseMarklookup11;
+} blwm;
+
+feature blws {
+
+ script DFLT;
+ language dflt ;
+ lookup blwsBelowBaseSubstitutionslooku;
+} blws;
+
+feature c2pc {
+
+ script DFLT;
+ language dflt ;
+ lookup c2pcCapitalstoPetiteCapitalsloo;
+} c2pc;
+
+feature c2sc {
+
+ script DFLT;
+ language dflt ;
+ lookup c2scCapitalstoSmallCapitalslook;
+} c2sc;
+
+feature calt {
+
+ script DFLT;
+ language dflt ;
+ lookup caltContextualAlternateslookup1;
+} calt;
+
+feature case {
+
+ script DFLT;
+ language dflt ;
+ lookup caseCaseSensitiveFormslookup16;
+} case;
+
+feature ccmp {
+
+ script DFLT;
+ language dflt ;
+ lookup ccmpGlyphCompositionDecompositi;
+} ccmp;
+
+feature cfar {
+
+ script DFLT;
+ language dflt ;
+ lookup cfarConjunctFormAfterRolookup18;
+} cfar;
+
+feature cjct {
+
+ script DFLT;
+ language dflt ;
+ lookup cjctConjunctFormslookup19;
+} cjct;
+
+feature clig {
+
+ script DFLT;
+ language dflt ;
+ lookup cligContextualLigatureslookup20;
+} clig;
+
+feature cpct {
+
+ script DFLT;
+ language dflt ;
+ lookup cpctCenteredCJKPunctuationlooku;
+} cpct;
+
+feature cpsp {
+
+ script DFLT;
+ language dflt ;
+ lookup cpspCapitalSpacinglookup22;
+} cpsp;
+
+feature cswh {
+
+ script DFLT;
+ language dflt ;
+ lookup cswhContextualSwashlookup23;
+} cswh;
+
+feature curs {
+
+ script DFLT;
+ language dflt ;
+ lookup cursCursiveAttachmentlookup24;
+} curs;
+
+feature cv00 {
+
+ script DFLT;
+ language dflt ;
+ lookup cv00CharacterVariants00lookup25;
+} cv00;
+
+feature cv01 {
+
+ script DFLT;
+ language dflt ;
+ lookup cv01CharacterVariants01lookup26;
+} cv01;
+
+feature cv02 {
+
+ script DFLT;
+ language dflt ;
+ lookup cv02CharacterVariants02lookup27;
+} cv02;
+
+feature cv03 {
+
+ script DFLT;
+ language dflt ;
+ lookup cv03CharacterVariants03lookup28;
+} cv03;
+
+feature cv04 {
+
+ script DFLT;
+ language dflt ;
+ lookup cv04CharacterVariants04lookup29;
+} cv04;
+
+feature cv05 {
+
+ script DFLT;
+ language dflt ;
+ lookup cv05CharacterVariants05lookup30;
+} cv05;
+
+feature cv06 {
+
+ script DFLT;
+ language dflt ;
+ lookup cv06CharacterVariants06lookup31;
+} cv06;
+
+feature cv07 {
+
+ script DFLT;
+ language dflt ;
+ lookup cv07CharacterVariants07lookup32;
+} cv07;
+
+feature cv08 {
+
+ script DFLT;
+ language dflt ;
+ lookup cv08CharacterVariants08lookup33;
+} cv08;
+
+feature cv09 {
+
+ script DFLT;
+ language dflt ;
+ lookup cv09CharacterVariants09lookup34;
+} cv09;
+
+feature cv10 {
+
+ script DFLT;
+ language dflt ;
+ lookup cv10CharacterVariants10lookup35;
+} cv10;
+
+feature cv11 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup36;
+} cv11;
+
+feature cv12 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup37;
+} cv12;
+
+feature cv13 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup38;
+} cv13;
+
+feature cv14 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup39;
+} cv14;
+
+feature cv15 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup40;
+} cv15;
+
+feature cv16 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup41;
+} cv16;
+
+feature cv17 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup42;
+} cv17;
+
+feature cv18 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup43;
+} cv18;
+
+feature cv19 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup44;
+} cv19;
+
+feature cv20 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup45;
+} cv20;
+
+feature cv21 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup46;
+} cv21;
+
+feature cv22 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup47;
+} cv22;
+
+feature cv23 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup48;
+} cv23;
+
+feature cv24 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup49;
+} cv24;
+
+feature cv25 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup50;
+} cv25;
+
+feature cv26 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup51;
+} cv26;
+
+feature cv27 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup52;
+} cv27;
+
+feature cv28 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup53;
+} cv28;
+
+feature cv29 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup54;
+} cv29;
+
+feature cv30 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup55;
+} cv30;
+
+feature cv31 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup56;
+} cv31;
+
+feature cv32 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup57;
+} cv32;
+
+feature cv33 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup58;
+} cv33;
+
+feature cv34 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup59;
+} cv34;
+
+feature cv35 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup60;
+} cv35;
+
+feature cv36 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup61;
+} cv36;
+
+feature cv37 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup62;
+} cv37;
+
+feature cv38 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup63;
+} cv38;
+
+feature cv39 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup64;
+} cv39;
+
+feature cv40 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup65;
+} cv40;
+
+feature cv41 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup66;
+} cv41;
+
+feature cv42 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup67;
+} cv42;
+
+feature cv43 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup68;
+} cv43;
+
+feature cv44 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup69;
+} cv44;
+
+feature cv45 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup70;
+} cv45;
+
+feature cv46 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup71;
+} cv46;
+
+feature cv47 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup72;
+} cv47;
+
+feature cv48 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup73;
+} cv48;
+
+feature cv49 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup74;
+} cv49;
+
+feature cv50 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup75;
+} cv50;
+
+feature cv51 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup76;
+} cv51;
+
+feature cv52 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup77;
+} cv52;
+
+feature cv53 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup78;
+} cv53;
+
+feature cv54 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup79;
+} cv54;
+
+feature cv55 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup80;
+} cv55;
+
+feature cv56 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup81;
+} cv56;
+
+feature cv57 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup82;
+} cv57;
+
+feature cv58 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup83;
+} cv58;
+
+feature cv59 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup84;
+} cv59;
+
+feature cv60 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup85;
+} cv60;
+
+feature cv61 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup86;
+} cv61;
+
+feature cv62 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup87;
+} cv62;
+
+feature cv63 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup88;
+} cv63;
+
+feature cv64 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup89;
+} cv64;
+
+feature cv65 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup90;
+} cv65;
+
+feature cv66 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup91;
+} cv66;
+
+feature cv67 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup92;
+} cv67;
+
+feature cv68 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup93;
+} cv68;
+
+feature cv69 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup94;
+} cv69;
+
+feature cv70 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup95;
+} cv70;
+
+feature cv71 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup96;
+} cv71;
+
+feature cv72 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup97;
+} cv72;
+
+feature cv73 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup98;
+} cv73;
+
+feature cv74 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup99;
+} cv74;
+
+feature cv75 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup100;
+} cv75;
+
+feature cv76 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup101;
+} cv76;
+
+feature cv77 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup102;
+} cv77;
+
+feature cv78 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup103;
+} cv78;
+
+feature cv79 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup104;
+} cv79;
+
+feature cv80 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup105;
+} cv80;
+
+feature cv81 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup106;
+} cv81;
+
+feature cv82 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup107;
+} cv82;
+
+feature cv83 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup108;
+} cv83;
+
+feature cv84 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup109;
+} cv84;
+
+feature cv85 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup110;
+} cv85;
+
+feature cv86 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup111;
+} cv86;
+
+feature cv87 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup112;
+} cv87;
+
+feature cv88 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup113;
+} cv88;
+
+feature cv89 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup114;
+} cv89;
+
+feature cv90 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup115;
+} cv90;
+
+feature cv91 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup116;
+} cv91;
+
+feature cv92 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup117;
+} cv92;
+
+feature cv93 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup118;
+} cv93;
+
+feature cv94 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup119;
+} cv94;
+
+feature cv95 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup120;
+} cv95;
+
+feature cv96 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup121;
+} cv96;
+
+feature cv97 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup122;
+} cv97;
+
+feature cv98 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup123;
+} cv98;
+
+feature cv99 {
+
+ script DFLT;
+ language dflt ;
+ lookup cv99CharacterVariants99lookup12;
+} cv99;
+
+feature dist {
+
+ script DFLT;
+ language dflt ;
+ lookup distDistancelookup125;
+} dist;
+
+feature dlig {
+
+ script DFLT;
+ language dflt ;
+ lookup dligDiscretionaryLigatureslooku;
+} dlig;
+
+feature dnom {
+
+ script DFLT;
+ language dflt ;
+ lookup dnomDenominatorslookup127;
+} dnom;
+
+feature expt {
+
+ script DFLT;
+ language dflt ;
+ lookup exptExpertFormslookup128;
+} expt;
+
+feature falt {
+
+ script DFLT;
+ language dflt ;
+ lookup faltFinalGlyphOnLinelookup129;
+} falt;
+
+feature fin2 {
+
+ script DFLT;
+ language dflt ;
+ lookup fin2TerminalForms2lookup130;
+} fin2;
+
+feature fin3 {
+
+ script DFLT;
+ language dflt ;
+ lookup fin3TerminalForms3lookup131;
+} fin3;
+
+feature fina {
+
+ script DFLT;
+ language dflt ;
+ lookup finaTerminalFormslookup132;
+} fina;
+
+feature frac {
+
+ script DFLT;
+ language dflt ;
+ lookup fracDiagonalFractionslookup133;
+} frac;
+
+feature fwid {
+
+ script DFLT;
+ language dflt ;
+ lookup fwidFullWidthslookup134;
+} fwid;
+
+feature half {
+
+ script DFLT;
+ language dflt ;
+ lookup halfHalfFormslookup135;
+} half;
+
+feature haln {
+
+ script DFLT;
+ language dflt ;
+ lookup halnHalantFormslookup136;
+} haln;
+
+feature halt {
+
+ script DFLT;
+ language dflt ;
+ lookup haltAlternativeHalfWidthslookup;
+} halt;
+
+feature hist {
+
+ script DFLT;
+ language dflt ;
+ lookup histHistoricalFormslookup138;
+} hist;
+
+feature hkna {
+
+ script DFLT;
+ language dflt ;
+ lookup hknaHorizontalKanaAlternativesl;
+} hkna;
+
+feature hlig {
+
+ script DFLT;
+ language dflt ;
+ lookup hligHistoricLigatureslookup140;
+} hlig;
+
+feature hngl {
+
+ script DFLT;
+ language dflt ;
+ lookup hnglHanjatoHangullookup141;
+} hngl;
+
+feature hojo {
+
+ script DFLT;
+ language dflt ;
+ lookup hojoHojoJISX02121990KanjiFormsl;
+} hojo;
+
+feature hwid {
+
+ script DFLT;
+ language dflt ;
+ lookup hwidHalfWidthslookup143;
+} hwid;
+
+feature init {
+
+ script DFLT;
+ language dflt ;
+ lookup initInitialFormslookup144;
+} init;
+
+feature isol {
+
+ script DFLT;
+ language dflt ;
+ lookup isolIsolatedFormslookup145;
+} isol;
+
+feature ital {
+
+ script DFLT;
+ language dflt ;
+ lookup italItalicslookup146;
+} ital;
+
+feature jalt {
+
+ script DFLT;
+ language dflt ;
+ lookup jaltJustificationAlternativeslo;
+} jalt;
+
+feature jp04 {
+
+ script DFLT;
+ language dflt ;
+ lookup jp04JIS2004Formslookup148;
+} jp04;
+
+feature jp78 {
+
+ script DFLT;
+ language dflt ;
+ lookup jp78JIS78Formslookup149;
+} jp78;
+
+feature jp83 {
+
+ script DFLT;
+ language dflt ;
+ lookup jp83JIS83Formslookup150;
+} jp83;
+
+feature jp90 {
+
+ script DFLT;
+ language dflt ;
+ lookup jp90JIS90Formslookup151;
+} jp90;
+
+feature kern {
+
+ script DFLT;
+ language dflt ;
+ lookup kernHorizontalKerninglookup152;
+} kern;
+
+feature lfbd {
+
+ script DFLT;
+ language dflt ;
+ lookup lfbdLeftBoundslookup153;
+} lfbd;
+
+feature liga {
+
+ script DFLT;
+ language dflt ;
+ lookup ligaStandardLigatureslookup154;
+} liga;
+
+feature ljmo {
+
+ script DFLT;
+ language dflt ;
+ lookup ljmoLeadingJamoFormslookup155;
+} ljmo;
+
+feature lnum {
+
+ script DFLT;
+ language dflt ;
+ lookup lnumLiningFigureslookup156;
+} lnum;
+
+feature locl {
+
+ script DFLT;
+ language dflt ;
+ lookup loclLocalizedFormslookup157;
+} locl;
+
+feature ltra {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup158;
+} ltra;
+
+feature ltrm {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup159;
+} ltrm;
+
+feature mark {
+
+ script DFLT;
+ language dflt ;
+ lookup markMarkPositioninglookup160;
+} mark;
+
+feature med2 {
+
+ script DFLT;
+ language dflt ;
+ lookup med2MedialForms2lookup161;
+} med2;
+
+feature medi {
+
+ script DFLT;
+ language dflt ;
+ lookup mediMedialFormslookup162;
+} medi;
+
+feature mgrk {
+
+ script DFLT;
+ language dflt ;
+ lookup mgrkMathematicalGreeklookup163;
+} mgrk;
+
+feature mkmk {
+
+ script DFLT;
+ language dflt ;
+ lookup mkmkMarktoMarklookup164;
+} mkmk;
+
+feature mset {
+
+ script DFLT;
+ language dflt ;
+ lookup msetMarkPositioningviaSubstitut;
+} mset;
+
+feature nalt {
+
+ script DFLT;
+ language dflt ;
+ lookup naltAlternateAnnotationFormsloo;
+} nalt;
+
+feature nlck {
+
+ script DFLT;
+ language dflt ;
+ lookup nlckNLCKanjiFormslookup167;
+} nlck;
+
+feature nukt {
+
+ script DFLT;
+ language dflt ;
+ lookup nuktNuktaFormslookup168;
+} nukt;
+
+feature numr {
+
+ script DFLT;
+ language dflt ;
+ lookup numrNumeratorslookup169;
+} numr;
+
+feature onum {
+
+ script DFLT;
+ language dflt ;
+ lookup onumOldstyleFigureslookup170;
+} onum;
+
+feature opbd {
+
+ script DFLT;
+ language dflt ;
+ lookup opbdOpticalBoundslookup171;
+} opbd;
+
+feature ordn {
+
+ script DFLT;
+ language dflt ;
+ lookup ordnOrdinalslookup172;
+} ordn;
+
+feature ornm {
+
+ script DFLT;
+ language dflt ;
+ lookup ornmOrnamentslookup173;
+} ornm;
+
+feature palt {
+
+ script DFLT;
+ language dflt ;
+ lookup paltProportionalAlternateMetric;
+} palt;
+
+feature pcap {
+
+ script DFLT;
+ language dflt ;
+ lookup pcapLowercasetoPetiteCapitalslo;
+} pcap;
+
+feature pkna {
+
+ script DFLT;
+ language dflt ;
+ lookup pknaProportionalKanalookup176;
+} pkna;
+
+feature pnum {
+
+ script DFLT;
+ language dflt ;
+ lookup pnumProportionalNumberslookup17;
+} pnum;
+
+feature pref {
+
+ script DFLT;
+ language dflt ;
+ lookup prefPreBaseFormslookup178;
+} pref;
+
+feature pres {
+
+ script DFLT;
+ language dflt ;
+ lookup presPreBaseSubstitutionslookup1;
+} pres;
+
+feature pstf {
+
+ script DFLT;
+ language dflt ;
+ lookup pstfPostBaseFormslookup180;
+} pstf;
+
+feature psts {
+
+ script DFLT;
+ language dflt ;
+ lookup pstsPostBaseSubstitutionslookup;
+} psts;
+
+feature pwid {
+
+ script DFLT;
+ language dflt ;
+ lookup pwidProportionalWidthlookup182;
+} pwid;
+
+feature qwid {
+
+ script DFLT;
+ language dflt ;
+ lookup qwidQuarterWidthslookup183;
+} qwid;
+
+feature rand {
+
+ script DFLT;
+ language dflt ;
+ lookup randRandomizelookup184;
+} rand;
+
+feature rkrf {
+
+ script DFLT;
+ language dflt ;
+ lookup rkrfRakarFormslookup185;
+} rkrf;
+
+feature rlig {
+
+ script DFLT;
+ language dflt ;
+ lookup rligRequiredLigatureslookup186;
+} rlig;
+
+feature rphf {
+
+ script DFLT;
+ language dflt ;
+ lookup rphfRephFormlookup187;
+} rphf;
+
+feature rtbd {
+
+ script DFLT;
+ language dflt ;
+ lookup rtbdRightBoundslookup188;
+} rtbd;
+
+feature rtla {
+
+ script DFLT;
+ language dflt ;
+ lookup rtlaRighttoLeftAlternateslookup;
+} rtla;
+
+feature rtlm {
+
+ script DFLT;
+ language dflt ;
+ lookup rtlmRighttoLeftmirroredformsloo;
+} rtlm;
+
+feature ruby {
+
+ script DFLT;
+ language dflt ;
+ lookup rubyRubyNotationalFormslookup19;
+} ruby;
+
+feature salt {
+
+ script DFLT;
+ language dflt ;
+ lookup saltStylisticAlternativeslookup;
+} salt;
+
+feature sinf {
+
+ script DFLT;
+ language dflt ;
+ lookup sinfScientificInferiorslookup19;
+} sinf;
+
+feature size {
+ parameters 0.0 0 0 0;
+} size;
+
+feature smcp {
+
+ script DFLT;
+ language dflt ;
+ lookup smcpLowercasetoSmallCapitalsloo;
+} smcp;
+
+feature smpl {
+
+ script DFLT;
+ language dflt ;
+ lookup smplSimplifiedFormslookup196;
+} smpl;
+
+feature ss00 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup197;
+} ss00;
+
+feature ss01 {
+
+ script DFLT;
+ language dflt ;
+ lookup ss01StyleSet1lookup198;
+} ss01;
+
+feature ss02 {
+
+ script DFLT;
+ language dflt ;
+ lookup ss02StyleSet2lookup199;
+} ss02;
+
+feature ss03 {
+
+ script DFLT;
+ language dflt ;
+ lookup ss03StyleSet3lookup200;
+} ss03;
+
+feature ss04 {
+
+ script DFLT;
+ language dflt ;
+ lookup ss04StyleSet4lookup201;
+} ss04;
+
+feature ss05 {
+
+ script DFLT;
+ language dflt ;
+ lookup ss05StyleSet5lookup202;
+} ss05;
+
+feature ss06 {
+
+ script DFLT;
+ language dflt ;
+ lookup ss06StyleSet6lookup203;
+} ss06;
+
+feature ss07 {
+
+ script DFLT;
+ language dflt ;
+ lookup ss07StyleSet7lookup204;
+} ss07;
+
+feature ss08 {
+
+ script DFLT;
+ language dflt ;
+ lookup ss08StyleSet8lookup205;
+} ss08;
+
+feature ss09 {
+
+ script DFLT;
+ language dflt ;
+ lookup ss09StyleSet9lookup206;
+} ss09;
+
+feature ss10 {
+
+ script DFLT;
+ language dflt ;
+ lookup ss10StyleSet10lookup207;
+} ss10;
+
+feature ss11 {
+
+ script DFLT;
+ language dflt ;
+ lookup ss11StyleSet11lookup208;
+} ss11;
+
+feature ss12 {
+
+ script DFLT;
+ language dflt ;
+ lookup ss12StyleSet12lookup209;
+} ss12;
+
+feature ss13 {
+
+ script DFLT;
+ language dflt ;
+ lookup ss13StyleSet13lookup210;
+} ss13;
+
+feature ss14 {
+
+ script DFLT;
+ language dflt ;
+ lookup ss14StyleSet14lookup211;
+} ss14;
+
+feature ss15 {
+
+ script DFLT;
+ language dflt ;
+ lookup ss15StyleSet15lookup212;
+} ss15;
+
+feature ss16 {
+
+ script DFLT;
+ language dflt ;
+ lookup ss16StyleSet16lookup213;
+} ss16;
+
+feature ss17 {
+
+ script DFLT;
+ language dflt ;
+ lookup ss17StyleSet17lookup214;
+} ss17;
+
+feature ss18 {
+
+ script DFLT;
+ language dflt ;
+ lookup ss18StyleSet18lookup215;
+} ss18;
+
+feature ss19 {
+
+ script DFLT;
+ language dflt ;
+ lookup ss19StyleSet19lookup216;
+} ss19;
+
+feature ss20 {
+
+ script DFLT;
+ language dflt ;
+ lookup ss20StyleSet20lookup217;
+} ss20;
+
+feature ss21 {
+
+ script DFLT;
+ language dflt ;
+ lookup AlternateSubstitutionlookup218;
+} ss21;
+
+feature subs {
+
+ script DFLT;
+ language dflt ;
+ lookup subsSubscriptlookup219;
+} subs;
+
+feature sups {
+
+ script DFLT;
+ language dflt ;
+ lookup supsSuperscriptlookup220;
+} sups;
+
+feature swsh {
+
+ script DFLT;
+ language dflt ;
+ lookup swshSwashlookup221;
+} swsh;
+
+feature titl {
+
+ script DFLT;
+ language dflt ;
+ lookup titlTitlinglookup222;
+} titl;
+
+feature tjmo {
+
+ script DFLT;
+ language dflt ;
+ lookup tjmoTrailingJamoFormslookup223;
+} tjmo;
+
+feature tnam {
+
+ script DFLT;
+ language dflt ;
+ lookup tnamTraditionalNameFormslookup2;
+} tnam;
+
+feature tnum {
+
+ script DFLT;
+ language dflt ;
+ lookup tnumTabularNumberslookup225;
+} tnum;
+
+feature trad {
+
+ script DFLT;
+ language dflt ;
+ lookup tradTraditionalFormslookup226;
+} trad;
+
+feature twid {
+
+ script DFLT;
+ language dflt ;
+ lookup twidThirdWidthslookup227;
+} twid;
+
+feature unic {
+
+ script DFLT;
+ language dflt ;
+ lookup unicUnicaselookup228;
+} unic;
+
+feature valt {
+
+ script DFLT;
+ language dflt ;
+ lookup valtAlternateVerticalMetricsloo;
+} valt;
+
+feature vatu {
+
+ script DFLT;
+ language dflt ;
+ lookup vatuVattuVariantslookup230;
+} vatu;
+
+feature vert {
+
+ script DFLT;
+ language dflt ;
+ lookup vertVerticalAlternatesobslookup;
+} vert;
+
+feature vhal {
+
+ script DFLT;
+ language dflt ;
+ lookup vhalAlternateVerticalHalfMetric;
+} vhal;
+
+feature vjmo {
+
+ script DFLT;
+ language dflt ;
+ lookup vjmoVowelJamoFormslookup233;
+} vjmo;
+
+feature vkna {
+
+ script DFLT;
+ language dflt ;
+ lookup vknaVerticalKanaAlternateslooku;
+} vkna;
+
+feature vkrn {
+
+ script DFLT;
+ language dflt ;
+ lookup vkrnVerticalKerninglookup235;
+} vkrn;
+
+feature vpal {
+
+ script DFLT;
+ language dflt ;
+ lookup vpalProportionalAlternateVertic;
+} vpal;
+
+feature vrt2 {
+
+ script DFLT;
+ language dflt ;
+ lookup vrt2VerticalRotationAlternatesl;
+} vrt2;
+
+feature zero {
+
+ script DFLT;
+ language dflt ;
+ lookup zeroSlashedZerolookup238;
+} zero;
+
+@GDEF_Simple = [\space \F \P \MWL1.pass \MWL1.fail \MWL1.default \MWL1.alt1
+ \MWL1.alt2 \MWL1.alt3 \NUM2.pass \NUM2.fail \NUM2.default \NUM2.alt1
+ \NUM2.alt2 \NUM2.alt3 \PRIV.pass \PRIV.fail \PRIV.default \PRIV.alt1
+ \PRIV.alt2 \PRIV.alt3 \T3ST.pass \T3ST.fail \T3ST.default \T3ST.alt1
+ \T3ST.alt2 \T3ST.alt3 \TPSP.pass \TPSP.fail \TPSP.default \TPSP.alt1
+ \TPSP.alt2 \TPSP.alt3 \abvf.pass \abvf.fail \abvf.default \abvf.alt1
+ \abvf.alt2 \abvf.alt3 \abvm.pass \abvm.fail \abvm.default \abvm.alt1
+ \abvm.alt2 \abvm.alt3 \abvs.pass \abvs.fail \abvs.default \abvs.alt1
+ \abvs.alt2 \abvs.alt3 \afrc.pass \afrc.fail \afrc.default \afrc.alt1
+ \afrc.alt2 \afrc.alt3 \akhn.pass \akhn.fail \akhn.default \akhn.alt1
+ \akhn.alt2 \akhn.alt3 \blwf.pass \blwf.fail \blwf.default \blwf.alt1
+ \blwf.alt2 \blwf.alt3 \blwm.pass \blwm.fail \blwm.default \blwm.alt1
+ \blwm.alt2 \blwm.alt3 \blws.pass \blws.fail \blws.default \blws.alt1
+ \blws.alt2 \blws.alt3 \c2pc.pass \c2pc.fail \c2pc.default \c2pc.alt1
+ \c2pc.alt2 \c2pc.alt3 \c2sc.pass \c2sc.fail \c2sc.default \c2sc.alt1
+ \c2sc.alt2 \c2sc.alt3 \calt.pass \calt.fail \calt.default \calt.alt1
+ \calt.alt2 \calt.alt3 \case.pass \case.fail \case.default \case.alt1
+ \case.alt2 \case.alt3 \ccmp.pass \ccmp.fail \ccmp.default \ccmp.alt1
+ \ccmp.alt2 \ccmp.alt3 \cfar.pass \cfar.fail \cfar.default \cfar.alt1
+ \cfar.alt2 \cfar.alt3 \cjct.pass \cjct.fail \cjct.default \cjct.alt1
+ \cjct.alt2 \cjct.alt3 \clig.pass \clig.fail \clig.default \clig.alt1
+ \clig.alt2 \clig.alt3 \cpct.pass \cpct.fail \cpct.default \cpct.alt1
+ \cpct.alt2 \cpct.alt3 \cpsp.pass \cpsp.fail \cpsp.default \cpsp.alt1
+ \cpsp.alt2 \cpsp.alt3 \cswh.pass \cswh.fail \cswh.default \cswh.alt1
+ \cswh.alt2 \cswh.alt3 \curs.pass \curs.fail \curs.default \curs.alt1
+ \curs.alt2 \curs.alt3 \cv00.pass \cv00.fail \cv00.default \cv00.alt1
+ \cv00.alt2 \cv00.alt3 \cv01.pass \cv01.fail \cv01.default \cv01.alt1
+ \cv01.alt2 \cv01.alt3 \cv02.pass \cv02.fail \cv02.default \cv02.alt1
+ \cv02.alt2 \cv02.alt3 \cv03.pass \cv03.fail \cv03.default \cv03.alt1
+ \cv03.alt2 \cv03.alt3 \cv04.pass \cv04.fail \cv04.default \cv04.alt1
+ \cv04.alt2 \cv04.alt3 \cv05.pass \cv05.fail \cv05.default \cv05.alt1
+ \cv05.alt2 \cv05.alt3 \cv06.pass \cv06.fail \cv06.default \cv06.alt1
+ \cv06.alt2 \cv06.alt3 \cv07.pass \cv07.fail \cv07.default \cv07.alt1
+ \cv07.alt2 \cv07.alt3 \cv08.pass \cv08.fail \cv08.default \cv08.alt1
+ \cv08.alt2 \cv08.alt3 \cv09.pass \cv09.fail \cv09.default \cv09.alt1
+ \cv09.alt2 \cv09.alt3 \cv10.pass \cv10.fail \cv10.default \cv10.alt1
+ \cv10.alt2 \cv10.alt3 \cv11.pass \cv11.fail \cv11.default \cv11.alt1
+ \cv11.alt2 \cv11.alt3 \cv12.pass \cv12.fail \cv12.default \cv12.alt1
+ \cv12.alt2 \cv12.alt3 \cv13.pass \cv13.fail \cv13.default \cv13.alt1
+ \cv13.alt2 \cv13.alt3 \cv14.pass \cv14.fail \cv14.default \cv14.alt1
+ \cv14.alt2 \cv14.alt3 \cv15.pass \cv15.fail \cv15.default \cv15.alt1
+ \cv15.alt2 \cv15.alt3 \cv16.pass \cv16.fail \cv16.default \cv16.alt1
+ \cv16.alt2 \cv16.alt3 \cv17.pass \cv17.fail \cv17.default \cv17.alt1
+ \cv17.alt2 \cv17.alt3 \cv18.pass \cv18.fail \cv18.default \cv18.alt1
+ \cv18.alt2 \cv18.alt3 \cv19.pass \cv19.fail \cv19.default \cv19.alt1
+ \cv19.alt2 \cv19.alt3 \cv20.pass \cv20.fail \cv20.default \cv20.alt1
+ \cv20.alt2 \cv20.alt3 \cv21.pass \cv21.fail \cv21.default \cv21.alt1
+ \cv21.alt2 \cv21.alt3 \cv22.pass \cv22.fail \cv22.default \cv22.alt1
+ \cv22.alt2 \cv22.alt3 \cv23.pass \cv23.fail \cv23.default \cv23.alt1
+ \cv23.alt2 \cv23.alt3 \cv24.pass \cv24.fail \cv24.default \cv24.alt1
+ \cv24.alt2 \cv24.alt3 \cv25.pass \cv25.fail \cv25.default \cv25.alt1
+ \cv25.alt2 \cv25.alt3 \cv26.pass \cv26.fail \cv26.default \cv26.alt1
+ \cv26.alt2 \cv26.alt3 \cv27.pass \cv27.fail \cv27.default \cv27.alt1
+ \cv27.alt2 \cv27.alt3 \cv28.pass \cv28.fail \cv28.default \cv28.alt1
+ \cv28.alt2 \cv28.alt3 \cv29.pass \cv29.fail \cv29.default \cv29.alt1
+ \cv29.alt2 \cv29.alt3 \cv30.pass \cv30.fail \cv30.default \cv30.alt1
+ \cv30.alt2 \cv30.alt3 \cv31.pass \cv31.fail \cv31.default \cv31.alt1
+ \cv31.alt2 \cv31.alt3 \cv32.pass \cv32.fail \cv32.default \cv32.alt1
+ \cv32.alt2 \cv32.alt3 \cv33.pass \cv33.fail \cv33.default \cv33.alt1
+ \cv33.alt2 \cv33.alt3 \cv34.pass \cv34.fail \cv34.default \cv34.alt1
+ \cv34.alt2 \cv34.alt3 \cv35.pass \cv35.fail \cv35.default \cv35.alt1
+ \cv35.alt2 \cv35.alt3 \cv36.pass \cv36.fail \cv36.default \cv36.alt1
+ \cv36.alt2 \cv36.alt3 \cv37.pass \cv37.fail \cv37.default \cv37.alt1
+ \cv37.alt2 \cv37.alt3 \cv38.pass \cv38.fail \cv38.default \cv38.alt1
+ \cv38.alt2 \cv38.alt3 \cv39.pass \cv39.fail \cv39.default \cv39.alt1
+ \cv39.alt2 \cv39.alt3 \cv40.pass \cv40.fail \cv40.default \cv40.alt1
+ \cv40.alt2 \cv40.alt3 \cv41.pass \cv41.fail \cv41.default \cv41.alt1
+ \cv41.alt2 \cv41.alt3 \cv42.pass \cv42.fail \cv42.default \cv42.alt1
+ \cv42.alt2 \cv42.alt3 \cv43.pass \cv43.fail \cv43.default \cv43.alt1
+ \cv43.alt2 \cv43.alt3 \cv44.pass \cv44.fail \cv44.default \cv44.alt1
+ \cv44.alt2 \cv44.alt3 \cv45.pass \cv45.fail \cv45.default \cv45.alt1
+ \cv45.alt2 \cv45.alt3 \cv46.pass \cv46.fail \cv46.default \cv46.alt1
+ \cv46.alt2 \cv46.alt3 \cv47.pass \cv47.fail \cv47.default \cv47.alt1
+ \cv47.alt2 \cv47.alt3 \cv48.pass \cv48.fail \cv48.default \cv48.alt1
+ \cv48.alt2 \cv48.alt3 \cv49.pass \cv49.fail \cv49.default \cv49.alt1
+ \cv49.alt2 \cv49.alt3 \cv50.pass \cv50.fail \cv50.default \cv50.alt1
+ \cv50.alt2 \cv50.alt3 \cv51.pass \cv51.fail \cv51.default \cv51.alt1
+ \cv51.alt2 \cv51.alt3 \cv52.pass \cv52.fail \cv52.default \cv52.alt1
+ \cv52.alt2 \cv52.alt3 \cv53.pass \cv53.fail \cv53.default \cv53.alt1
+ \cv53.alt2 \cv53.alt3 \cv54.pass \cv54.fail \cv54.default \cv54.alt1
+ \cv54.alt2 \cv54.alt3 \cv55.pass \cv55.fail \cv55.default \cv55.alt1
+ \cv55.alt2 \cv55.alt3 \cv56.pass \cv56.fail \cv56.default \cv56.alt1
+ \cv56.alt2 \cv56.alt3 \cv57.pass \cv57.fail \cv57.default \cv57.alt1
+ \cv57.alt2 \cv57.alt3 \cv58.pass \cv58.fail \cv58.default \cv58.alt1
+ \cv58.alt2 \cv58.alt3 \cv59.pass \cv59.fail \cv59.default \cv59.alt1
+ \cv59.alt2 \cv59.alt3 \cv60.pass \cv60.fail \cv60.default \cv60.alt1
+ \cv60.alt2 \cv60.alt3 \cv61.pass \cv61.fail \cv61.default \cv61.alt1
+ \cv61.alt2 \cv61.alt3 \cv62.pass \cv62.fail \cv62.default \cv62.alt1
+ \cv62.alt2 \cv62.alt3 \cv63.pass \cv63.fail \cv63.default \cv63.alt1
+ \cv63.alt2 \cv63.alt3 \cv64.pass \cv64.fail \cv64.default \cv64.alt1
+ \cv64.alt2 \cv64.alt3 \cv65.pass \cv65.fail \cv65.default \cv65.alt1
+ \cv65.alt2 \cv65.alt3 \cv66.pass \cv66.fail \cv66.default \cv66.alt1
+ \cv66.alt2 \cv66.alt3 \cv67.pass \cv67.fail \cv67.default \cv67.alt1
+ \cv67.alt2 \cv67.alt3 \cv68.pass \cv68.fail \cv68.default \cv68.alt1
+ \cv68.alt2 \cv68.alt3 \cv69.pass \cv69.fail \cv69.default \cv69.alt1
+ \cv69.alt2 \cv69.alt3 \cv70.pass \cv70.fail \cv70.default \cv70.alt1
+ \cv70.alt2 \cv70.alt3 \cv71.pass \cv71.fail \cv71.default \cv71.alt1
+ \cv71.alt2 \cv71.alt3 \cv72.pass \cv72.fail \cv72.default \cv72.alt1
+ \cv72.alt2 \cv72.alt3 \cv73.pass \cv73.fail \cv73.default \cv73.alt1
+ \cv73.alt2 \cv73.alt3 \cv74.pass \cv74.fail \cv74.default \cv74.alt1
+ \cv74.alt2 \cv74.alt3 \cv75.pass \cv75.fail \cv75.default \cv75.alt1
+ \cv75.alt2 \cv75.alt3 \cv76.pass \cv76.fail \cv76.default \cv76.alt1
+ \cv76.alt2 \cv76.alt3 \cv77.pass \cv77.fail \cv77.default \cv77.alt1
+ \cv77.alt2 \cv77.alt3 \cv78.pass \cv78.fail \cv78.default \cv78.alt1
+ \cv78.alt2 \cv78.alt3 \cv79.pass \cv79.fail \cv79.default \cv79.alt1
+ \cv79.alt2 \cv79.alt3 \cv80.pass \cv80.fail \cv80.default \cv80.alt1
+ \cv80.alt2 \cv80.alt3 \cv81.pass \cv81.fail \cv81.default \cv81.alt1
+ \cv81.alt2 \cv81.alt3 \cv82.pass \cv82.fail \cv82.default \cv82.alt1
+ \cv82.alt2 \cv82.alt3 \cv83.pass \cv83.fail \cv83.default \cv83.alt1
+ \cv83.alt2 \cv83.alt3 \cv84.pass \cv84.fail \cv84.default \cv84.alt1
+ \cv84.alt2 \cv84.alt3 \cv85.pass \cv85.fail \cv85.default \cv85.alt1
+ \cv85.alt2 \cv85.alt3 \cv86.pass \cv86.fail \cv86.default \cv86.alt1
+ \cv86.alt2 \cv86.alt3 \cv87.pass \cv87.fail \cv87.default \cv87.alt1
+ \cv87.alt2 \cv87.alt3 \cv88.pass \cv88.fail \cv88.default \cv88.alt1
+ \cv88.alt2 \cv88.alt3 \cv89.pass \cv89.fail \cv89.default \cv89.alt1
+ \cv89.alt2 \cv89.alt3 \cv90.pass \cv90.fail \cv90.default \cv90.alt1
+ \cv90.alt2 \cv90.alt3 \cv91.pass \cv91.fail \cv91.default \cv91.alt1
+ \cv91.alt2 \cv91.alt3 \cv92.pass \cv92.fail \cv92.default \cv92.alt1
+ \cv92.alt2 \cv92.alt3 \cv93.pass \cv93.fail \cv93.default \cv93.alt1
+ \cv93.alt2 \cv93.alt3 \cv94.pass \cv94.fail \cv94.default \cv94.alt1
+ \cv94.alt2 \cv94.alt3 \cv95.pass \cv95.fail \cv95.default \cv95.alt1
+ \cv95.alt2 \cv95.alt3 \cv96.pass \cv96.fail \cv96.default \cv96.alt1
+ \cv96.alt2 \cv96.alt3 \cv97.pass \cv97.fail \cv97.default \cv97.alt1
+ \cv97.alt2 \cv97.alt3 \cv98.pass \cv98.fail \cv98.default \cv98.alt1
+ \cv98.alt2 \cv98.alt3 \cv99.pass \cv99.fail \cv99.default \cv99.alt1
+ \cv99.alt2 \cv99.alt3 \dist.pass \dist.fail \dist.default \dist.alt1
+ \dist.alt2 \dist.alt3 \dlig.pass \dlig.fail \dlig.default \dlig.alt1
+ \dlig.alt2 \dlig.alt3 \dnom.pass \dnom.fail \dnom.default \dnom.alt1
+ \dnom.alt2 \dnom.alt3 \expt.pass \expt.fail \expt.default \expt.alt1
+ \expt.alt2 \expt.alt3 \falt.pass \falt.fail \falt.default \falt.alt1
+ \falt.alt2 \falt.alt3 \fin2.pass \fin2.fail \fin2.default \fin2.alt1
+ \fin2.alt2 \fin2.alt3 \fin3.pass \fin3.fail \fin3.default \fin3.alt1
+ \fin3.alt2 \fin3.alt3 \fina.pass \fina.fail \fina.default \fina.alt1
+ \fina.alt2 \fina.alt3 \frac.pass \frac.fail \frac.default \frac.alt1
+ \frac.alt2 \frac.alt3 \fwid.pass \fwid.fail \fwid.default \fwid.alt1
+ \fwid.alt2 \fwid.alt3 \half.pass \half.fail \half.default \half.alt1
+ \half.alt2 \half.alt3 \haln.pass \haln.fail \haln.default \haln.alt1
+ \haln.alt2 \haln.alt3 \halt.pass \halt.fail \halt.default \halt.alt1
+ \halt.alt2 \halt.alt3 \hist.pass \hist.fail \hist.default \hist.alt1
+ \hist.alt2 \hist.alt3 \hkna.pass \hkna.fail \hkna.default \hkna.alt1
+ \hkna.alt2 \hkna.alt3 \hlig.pass \hlig.fail \hlig.default \hlig.alt1
+ \hlig.alt2 \hlig.alt3 \hngl.pass \hngl.fail \hngl.default \hngl.alt1
+ \hngl.alt2 \hngl.alt3 \hojo.pass \hojo.fail \hojo.default \hojo.alt1
+ \hojo.alt2 \hojo.alt3 \hwid.pass \hwid.fail \hwid.default \hwid.alt1
+ \hwid.alt2 \hwid.alt3 \init.pass \init.fail \init.default \init.alt1
+ \init.alt2 \init.alt3 \isol.pass \isol.fail \isol.default \isol.alt1
+ \isol.alt2 \isol.alt3 \ital.pass \ital.fail \ital.default \ital.alt1
+ \ital.alt2 \ital.alt3 \jalt.pass \jalt.fail \jalt.default \jalt.alt1
+ \jalt.alt2 \jalt.alt3 \jp04.pass \jp04.fail \jp04.default \jp04.alt1
+ \jp04.alt2 \jp04.alt3 \jp78.pass \jp78.fail \jp78.default \jp78.alt1
+ \jp78.alt2 \jp78.alt3 \jp83.pass \jp83.fail \jp83.default \jp83.alt1
+ \jp83.alt2 \jp83.alt3 \jp90.pass \jp90.fail \jp90.default \jp90.alt1
+ \jp90.alt2 \jp90.alt3 \kern.pass \kern.fail \kern.default \kern.alt1
+ \kern.alt2 \kern.alt3 \lfbd.pass \lfbd.fail \lfbd.default \lfbd.alt1
+ \lfbd.alt2 \lfbd.alt3 \liga.pass \liga.fail \liga.default \liga.alt1
+ \liga.alt2 \liga.alt3 \ljmo.pass \ljmo.fail \ljmo.default \ljmo.alt1
+ \ljmo.alt2 \ljmo.alt3 \lnum.pass \lnum.fail \lnum.default \lnum.alt1
+ \lnum.alt2 \lnum.alt3 \locl.pass \locl.fail \locl.default \locl.alt1
+ \locl.alt2 \locl.alt3 \ltra.pass \ltra.fail \ltra.default \ltra.alt1
+ \ltra.alt2 \ltra.alt3 \ltrm.pass \ltrm.fail \ltrm.default \ltrm.alt1
+ \ltrm.alt2 \ltrm.alt3 \mark.pass \mark.fail \mark.default \mark.alt1
+ \mark.alt2 \mark.alt3 \med2.pass \med2.fail \med2.default \med2.alt1
+ \med2.alt2 \med2.alt3 \medi.pass \medi.fail \medi.default \medi.alt1
+ \medi.alt2 \medi.alt3 \mgrk.pass \mgrk.fail \mgrk.default \mgrk.alt1
+ \mgrk.alt2 \mgrk.alt3 \mkmk.pass \mkmk.fail \mkmk.default \mkmk.alt1
+ \mkmk.alt2 \mkmk.alt3 \mset.pass \mset.fail \mset.default \mset.alt1
+ \mset.alt2 \mset.alt3 \nalt.pass \nalt.fail \nalt.default \nalt.alt1
+ \nalt.alt2 \nalt.alt3 \nlck.pass \nlck.fail \nlck.default \nlck.alt1
+ \nlck.alt2 \nlck.alt3 \nukt.pass \nukt.fail \nukt.default \nukt.alt1
+ \nukt.alt2 \nukt.alt3 \numr.pass \numr.fail \numr.default \numr.alt1
+ \numr.alt2 \numr.alt3 \onum.pass \onum.fail \onum.default \onum.alt1
+ \onum.alt2 \onum.alt3 \opbd.pass \opbd.fail \opbd.default \opbd.alt1
+ \opbd.alt2 \opbd.alt3 \ordn.pass \ordn.fail \ordn.default \ordn.alt1
+ \ordn.alt2 \ordn.alt3 \ornm.pass \ornm.fail \ornm.default \ornm.alt1
+ \ornm.alt2 \ornm.alt3 \palt.pass \palt.fail \palt.default \palt.alt1
+ \palt.alt2 \palt.alt3 \pcap.pass \pcap.fail \pcap.default \pcap.alt1
+ \pcap.alt2 \pcap.alt3 \pkna.pass \pkna.fail \pkna.default \pkna.alt1
+ \pkna.alt2 \pkna.alt3 \pnum.pass \pnum.fail \pnum.default \pnum.alt1
+ \pnum.alt2 \pnum.alt3 \pref.pass \pref.fail \pref.default \pref.alt1
+ \pref.alt2 \pref.alt3 \pres.pass \pres.fail \pres.default \pres.alt1
+ \pres.alt2 \pres.alt3 \pstf.pass \pstf.fail \pstf.default \pstf.alt1
+ \pstf.alt2 \pstf.alt3 \psts.pass \psts.fail \psts.default \psts.alt1
+ \psts.alt2 \psts.alt3 \pwid.pass \pwid.fail \pwid.default \pwid.alt1
+ \pwid.alt2 \pwid.alt3 \qwid.pass \qwid.fail \qwid.default \qwid.alt1
+ \qwid.alt2 \qwid.alt3 \rand.pass \rand.fail \rand.default \rand.alt1
+ \rand.alt2 \rand.alt3 \rkrf.pass \rkrf.fail \rkrf.default \rkrf.alt1
+ \rkrf.alt2 \rkrf.alt3 \rlig.pass \rlig.fail \rlig.default \rlig.alt1
+ \rlig.alt2 \rlig.alt3 \rphf.pass \rphf.fail \rphf.default \rphf.alt1
+ \rphf.alt2 \rphf.alt3 \rtbd.pass \rtbd.fail \rtbd.default \rtbd.alt1
+ \rtbd.alt2 \rtbd.alt3 \rtla.pass \rtla.fail \rtla.default \rtla.alt1
+ \rtla.alt2 \rtla.alt3 \rtlm.pass \rtlm.fail \rtlm.default \rtlm.alt1
+ \rtlm.alt2 \rtlm.alt3 \ruby.pass \ruby.fail \ruby.default \ruby.alt1
+ \ruby.alt2 \ruby.alt3 \salt.pass \salt.fail \salt.default \salt.alt1
+ \salt.alt2 \salt.alt3 \sinf.pass \sinf.fail \sinf.default \sinf.alt1
+ \sinf.alt2 \sinf.alt3 \size.pass \size.fail \size.default \size.alt1
+ \size.alt2 \size.alt3 \smcp.pass \smcp.fail \smcp.default \smcp.alt1
+ \smcp.alt2 \smcp.alt3 \smpl.pass \smpl.fail \smpl.default \smpl.alt1
+ \smpl.alt2 \smpl.alt3 \ss00.pass \ss00.fail \ss00.default \ss00.alt1
+ \ss00.alt2 \ss00.alt3 \ss01.pass \ss01.fail \ss01.default \ss01.alt1
+ \ss01.alt2 \ss01.alt3 \ss02.pass \ss02.fail \ss02.default \ss02.alt1
+ \ss02.alt2 \ss02.alt3 \ss03.pass \ss03.fail \ss03.default \ss03.alt1
+ \ss03.alt2 \ss03.alt3 \ss04.pass \ss04.fail \ss04.default \ss04.alt1
+ \ss04.alt2 \ss04.alt3 \ss05.pass \ss05.fail \ss05.default \ss05.alt1
+ \ss05.alt2 \ss05.alt3 \ss06.pass \ss06.fail \ss06.default \ss06.alt1
+ \ss06.alt2 \ss06.alt3 \ss07.pass \ss07.fail \ss07.default \ss07.alt1
+ \ss07.alt2 \ss07.alt3 \ss08.pass \ss08.fail \ss08.default \ss08.alt1
+ \ss08.alt2 \ss08.alt3 \ss09.pass \ss09.fail \ss09.default \ss09.alt1
+ \ss09.alt2 \ss09.alt3 \ss10.pass \ss10.fail \ss10.default \ss10.alt1
+ \ss10.alt2 \ss10.alt3 \ss11.pass \ss11.fail \ss11.default \ss11.alt1
+ \ss11.alt2 \ss11.alt3 \ss12.pass \ss12.fail \ss12.default \ss12.alt1
+ \ss12.alt2 \ss12.alt3 \ss13.pass \ss13.fail \ss13.default \ss13.alt1
+ \ss13.alt2 \ss13.alt3 \ss14.pass \ss14.fail \ss14.default \ss14.alt1
+ \ss14.alt2 \ss14.alt3 \ss15.pass \ss15.fail \ss15.default \ss15.alt1
+ \ss15.alt2 \ss15.alt3 \ss16.pass \ss16.fail \ss16.default \ss16.alt1
+ \ss16.alt2 \ss16.alt3 \ss17.pass \ss17.fail \ss17.default \ss17.alt1
+ \ss17.alt2 \ss17.alt3 \ss18.pass \ss18.fail \ss18.default \ss18.alt1
+ \ss18.alt2 \ss18.alt3 \ss19.pass \ss19.fail \ss19.default \ss19.alt1
+ \ss19.alt2 \ss19.alt3 \ss20.pass \ss20.fail \ss20.default \ss20.alt1
+ \ss20.alt2 \ss20.alt3 \ss21.pass \ss21.fail \ss21.default \ss21.alt1
+ \ss21.alt2 \ss21.alt3 \subs.pass \subs.fail \subs.default \subs.alt1
+ \subs.alt2 \subs.alt3 \sups.pass \sups.fail \sups.default \sups.alt1
+ \sups.alt2 \sups.alt3 \swsh.pass \swsh.fail \swsh.default \swsh.alt1
+ \swsh.alt2 \swsh.alt3 \titl.pass \titl.fail \titl.default \titl.alt1
+ \titl.alt2 \titl.alt3 \tjmo.pass \tjmo.fail \tjmo.default \tjmo.alt1
+ \tjmo.alt2 \tjmo.alt3 \tnam.pass \tnam.fail \tnam.default \tnam.alt1
+ \tnam.alt2 \tnam.alt3 \tnum.pass \tnum.fail \tnum.default \tnum.alt1
+ \tnum.alt2 \tnum.alt3 \trad.pass \trad.fail \trad.default \trad.alt1
+ \trad.alt2 \trad.alt3 \twid.pass \twid.fail \twid.default \twid.alt1
+ \twid.alt2 \twid.alt3 \unic.pass \unic.fail \unic.default \unic.alt1
+ \unic.alt2 \unic.alt3 \valt.pass \valt.fail \valt.default \valt.alt1
+ \valt.alt2 \valt.alt3 \vatu.pass \vatu.fail \vatu.default \vatu.alt1
+ \vatu.alt2 \vatu.alt3 \vert.pass \vert.fail \vert.default \vert.alt1
+ \vert.alt2 \vert.alt3 \vhal.pass \vhal.fail \vhal.default \vhal.alt1
+ \vhal.alt2 \vhal.alt3 \vjmo.pass \vjmo.fail \vjmo.default \vjmo.alt1
+ \vjmo.alt2 \vjmo.alt3 \vkna.pass \vkna.fail \vkna.default \vkna.alt1
+ \vkna.alt2 \vkna.alt3 \vkrn.pass \vkrn.fail \vkrn.default \vkrn.alt1
+ \vkrn.alt2 \vkrn.alt3 \vpal.pass \vpal.fail \vpal.default \vpal.alt1
+ \vpal.alt2 \vpal.alt3 \vrt2.pass \vrt2.fail \vrt2.default \vrt2.alt1
+ \vrt2.alt2 \vrt2.alt3 \zero.pass \zero.fail \zero.default \zero.alt1
+ \zero.alt2 \zero.alt3 ];
+
+table GDEF {
+ GlyphClassDef @GDEF_Simple, , , ;
+
+} GDEF;
+
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/fontinfo.plist b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/fontinfo.plist
new file mode 100644
index 0000000000..1635165803
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/fontinfo.plist
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+ <dict>
+ <key>familyName</key>
+ <string>gsubtest-lookup3</string>
+ <key>styleName</key>
+ <string>lookup3-Regular</string>
+ <key>versionMajor</key>
+ <integer>1</integer>
+ <key>versionMinor</key>
+ <integer>0</integer>
+ <key>copyright</key>
+ <string></string>
+ <key>unitsPerEm</key>
+ <integer>1000</integer>
+ <key>ascender</key>
+ <integer>750</integer>
+ <key>descender</key>
+ <integer>-250</integer>
+ <key>italicAngle</key>
+ <real>0</real>
+ <key>note</key>
+ <string></string>
+ <key>openTypeHeadCreated</key>
+ <string>2011/03/22 13:46:27</string>
+ <key>openTypeHheaAscender</key>
+ <integer>750</integer>
+ <key>openTypeHheaDescender</key>
+ <integer>-250</integer>
+ <key>openTypeHheaLineGap</key>
+ <integer>9</integer>
+ <key>openTypeNameDesigner</key>
+ <string>Tal Leming with modifications by John Daggett</string>
+ <key>openTypeNameLicenseURL</key>
+ <string>http://scripts.sil.org/OFL</string>
+ <key>openTypeNameVersion</key>
+ <string>Version 1.000</string>
+ <key>openTypeNameUniqueID</key>
+ <string>1.000;TPSP;gsubtest-lookup3-Regular</string>
+ <key>openTypeOS2Panose</key>
+ <array>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ <integer>0</integer>
+ </array>
+ <key>openTypeOS2WidthClass</key>
+ <integer>5</integer>
+ <key>openTypeOS2WeightClass</key>
+ <integer>400</integer>
+ <key>openTypeOS2VendorID</key>
+ <string>None</string>
+ <key>openTypeOS2FamilyClass</key>
+ <array>
+ <integer>0</integer>
+ <integer>0</integer>
+ </array>
+ <key>openTypeOS2TypoAscender</key>
+ <integer>750</integer>
+ <key>openTypeOS2TypoDescender</key>
+ <integer>-250</integer>
+ <key>openTypeOS2TypoLineGap</key>
+ <integer>0</integer>
+ <key>openTypeOS2WinAscent</key>
+ <integer>1000</integer>
+ <key>openTypeOS2WinDescent</key>
+ <integer>0</integer>
+ <key>openTypeOS2SubscriptXSize</key>
+ <integer>650</integer>
+ <key>openTypeOS2SubscriptYSize</key>
+ <integer>600</integer>
+ <key>openTypeOS2SubscriptXOffset</key>
+ <integer>0</integer>
+ <key>openTypeOS2SubscriptYOffset</key>
+ <integer>75</integer>
+ <key>openTypeOS2SuperscriptXSize</key>
+ <integer>650</integer>
+ <key>openTypeOS2SuperscriptYSize</key>
+ <integer>600</integer>
+ <key>openTypeOS2SuperscriptXOffset</key>
+ <integer>0</integer>
+ <key>openTypeOS2SuperscriptYOffset</key>
+ <integer>350</integer>
+ <key>openTypeOS2StrikeoutSize</key>
+ <integer>50</integer>
+ <key>openTypeOS2StrikeoutPosition</key>
+ <integer>300</integer>
+ <key>openTypeOS2UnicodeRanges</key>
+ <array>
+ <integer>0</integer>
+ </array>
+ <key>openTypeOS2CodePageRanges</key>
+ <array>
+ <integer>0</integer>
+ <integer>29</integer>
+ </array>
+ <key>postscriptFontName</key>
+ <string>gsubtest-lookup3-Regular</string>
+ <key>postscriptFullName</key>
+ <string>gsubtest-lookup3</string>
+ <key>postscriptWeightName</key>
+ <string>Normal</string>
+ <key>postscriptUnderlineThickness</key>
+ <integer>50</integer>
+ <key>postscriptUnderlinePosition</key>
+ <integer>-50</integer>
+ </dict>
+</plist>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/F_.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/F_.glif
new file mode 100644
index 0000000000..3c8cf66a86
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/F_.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="F" format="1">
+ <advance width="2304"/>
+ <unicode hex="0046"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/M_W_L_1.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/M_W_L_1.alt1.glif
new file mode 100644
index 0000000000..c5f9e9ad3a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/M_W_L_1.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="MWL1.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E001"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/M_W_L_1.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/M_W_L_1.alt2.glif
new file mode 100644
index 0000000000..bc60547e42
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/M_W_L_1.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="MWL1.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E002"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/M_W_L_1.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/M_W_L_1.alt3.glif
new file mode 100644
index 0000000000..a97191cc99
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/M_W_L_1.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="MWL1.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E003"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/M_W_L_1.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/M_W_L_1.default.glif
new file mode 100644
index 0000000000..770681d619
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/M_W_L_1.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="MWL1.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E000"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/M_W_L_1.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/M_W_L_1.fail.glif
new file mode 100644
index 0000000000..837fd7c594
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/M_W_L_1.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="MWL1.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/M_W_L_1.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/M_W_L_1.pass.glif
new file mode 100644
index 0000000000..c66e3304ec
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/M_W_L_1.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="MWL1.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/N_U_M_2.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/N_U_M_2.alt1.glif
new file mode 100644
index 0000000000..61c6f52ab2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/N_U_M_2.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="NUM2.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E005"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/N_U_M_2.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/N_U_M_2.alt2.glif
new file mode 100644
index 0000000000..7f7e5f7a4b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/N_U_M_2.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="NUM2.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E006"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/N_U_M_2.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/N_U_M_2.alt3.glif
new file mode 100644
index 0000000000..2a0391ccc4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/N_U_M_2.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="NUM2.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E007"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/N_U_M_2.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/N_U_M_2.default.glif
new file mode 100644
index 0000000000..8c7d620daf
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/N_U_M_2.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="NUM2.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E004"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/N_U_M_2.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/N_U_M_2.fail.glif
new file mode 100644
index 0000000000..54fb36445c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/N_U_M_2.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="NUM2.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/N_U_M_2.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/N_U_M_2.pass.glif
new file mode 100644
index 0000000000..314311dfbe
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/N_U_M_2.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="NUM2.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_.glif
new file mode 100644
index 0000000000..51a62d1672
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="P" format="1">
+ <advance width="2299"/>
+ <unicode hex="0050"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_R_I_V_.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_R_I_V_.alt1.glif
new file mode 100644
index 0000000000..d1125f9502
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_R_I_V_.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="PRIV.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E009"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_R_I_V_.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_R_I_V_.alt2.glif
new file mode 100644
index 0000000000..bf5ff53557
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_R_I_V_.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="PRIV.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E00A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_R_I_V_.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_R_I_V_.alt3.glif
new file mode 100644
index 0000000000..b29d2c7f41
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_R_I_V_.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="PRIV.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E00B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_R_I_V_.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_R_I_V_.default.glif
new file mode 100644
index 0000000000..3c6263e19a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_R_I_V_.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="PRIV.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E008"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_R_I_V_.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_R_I_V_.fail.glif
new file mode 100644
index 0000000000..461ad08fbe
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_R_I_V_.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="PRIV.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_R_I_V_.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_R_I_V_.pass.glif
new file mode 100644
index 0000000000..1e598648a9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/P_R_I_V_.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="PRIV.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_3S_T_.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_3S_T_.alt1.glif
new file mode 100644
index 0000000000..5553e4de05
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_3S_T_.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="T3ST.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E00D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_3S_T_.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_3S_T_.alt2.glif
new file mode 100644
index 0000000000..b4762c2bd0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_3S_T_.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="T3ST.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E00E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_3S_T_.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_3S_T_.alt3.glif
new file mode 100644
index 0000000000..e6e5a9d053
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_3S_T_.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="T3ST.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E00F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_3S_T_.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_3S_T_.default.glif
new file mode 100644
index 0000000000..16beeda94b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_3S_T_.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="T3ST.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E00C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_3S_T_.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_3S_T_.fail.glif
new file mode 100644
index 0000000000..f6df1caafd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_3S_T_.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="T3ST.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_3S_T_.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_3S_T_.pass.glif
new file mode 100644
index 0000000000..d0f230bd7b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_3S_T_.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="T3ST.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_P_S_P_.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_P_S_P_.alt1.glif
new file mode 100644
index 0000000000..44aee22e05
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_P_S_P_.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="TPSP.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E011"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_P_S_P_.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_P_S_P_.alt2.glif
new file mode 100644
index 0000000000..19c915e44b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_P_S_P_.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="TPSP.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E012"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_P_S_P_.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_P_S_P_.alt3.glif
new file mode 100644
index 0000000000..0b68b456c8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_P_S_P_.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="TPSP.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E013"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_P_S_P_.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_P_S_P_.default.glif
new file mode 100644
index 0000000000..a5d9808a7d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_P_S_P_.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="TPSP.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E010"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_P_S_P_.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_P_S_P_.fail.glif
new file mode 100644
index 0000000000..a76b29a706
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_P_S_P_.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="TPSP.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_P_S_P_.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_P_S_P_.pass.glif
new file mode 100644
index 0000000000..b208749c30
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/T_P_S_P_.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="TPSP.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/_notdef.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/_notdef.glif
new file mode 100644
index 0000000000..7bee92597d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/_notdef.glif
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name=".notdef" format="1">
+ <advance width="750"/>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvf.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvf.alt1.glif
new file mode 100644
index 0000000000..8e4a685385
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvf.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="abvf.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E015"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvf.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvf.alt2.glif
new file mode 100644
index 0000000000..d60aaa684f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvf.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="abvf.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E016"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvf.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvf.alt3.glif
new file mode 100644
index 0000000000..3e7d48353d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvf.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="abvf.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E017"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvf.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvf.default.glif
new file mode 100644
index 0000000000..386a4a99fc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvf.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="abvf.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E014"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvf.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvf.fail.glif
new file mode 100644
index 0000000000..d5afb9e0d6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvf.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="abvf.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvf.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvf.pass.glif
new file mode 100644
index 0000000000..eed41fd60a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvf.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="abvf.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvm.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvm.alt1.glif
new file mode 100644
index 0000000000..6418399af7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvm.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="abvm.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E019"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvm.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvm.alt2.glif
new file mode 100644
index 0000000000..894fa0d938
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvm.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="abvm.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E01A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvm.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvm.alt3.glif
new file mode 100644
index 0000000000..245b2146df
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvm.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="abvm.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E01B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvm.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvm.default.glif
new file mode 100644
index 0000000000..539859a2fa
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvm.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="abvm.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E018"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvm.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvm.fail.glif
new file mode 100644
index 0000000000..d8e2042135
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvm.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="abvm.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvm.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvm.pass.glif
new file mode 100644
index 0000000000..c4d4998e08
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvm.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="abvm.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvs.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvs.alt1.glif
new file mode 100644
index 0000000000..9d370e5d8b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvs.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="abvs.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E01D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvs.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvs.alt2.glif
new file mode 100644
index 0000000000..32f0fda6f8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvs.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="abvs.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E01E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvs.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvs.alt3.glif
new file mode 100644
index 0000000000..ed47c708a1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvs.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="abvs.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E01F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvs.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvs.default.glif
new file mode 100644
index 0000000000..1593126ee4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvs.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="abvs.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E01C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvs.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvs.fail.glif
new file mode 100644
index 0000000000..ee94b7ff6a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvs.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="abvs.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvs.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvs.pass.glif
new file mode 100644
index 0000000000..5db7499ae6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/abvs.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="abvs.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/afrc.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/afrc.alt1.glif
new file mode 100644
index 0000000000..380da5ac69
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/afrc.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="afrc.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E021"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/afrc.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/afrc.alt2.glif
new file mode 100644
index 0000000000..afa680deac
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/afrc.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="afrc.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E022"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/afrc.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/afrc.alt3.glif
new file mode 100644
index 0000000000..a671b265b1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/afrc.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="afrc.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E023"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/afrc.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/afrc.default.glif
new file mode 100644
index 0000000000..ab6df94383
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/afrc.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="afrc.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E020"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/afrc.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/afrc.fail.glif
new file mode 100644
index 0000000000..44dc9bb316
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/afrc.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="afrc.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/afrc.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/afrc.pass.glif
new file mode 100644
index 0000000000..0094fe3bf0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/afrc.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="afrc.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/akhn.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/akhn.alt1.glif
new file mode 100644
index 0000000000..b92438b794
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/akhn.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="akhn.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E025"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/akhn.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/akhn.alt2.glif
new file mode 100644
index 0000000000..bbb4b1b434
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/akhn.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="akhn.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E026"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/akhn.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/akhn.alt3.glif
new file mode 100644
index 0000000000..111e0d97e3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/akhn.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="akhn.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E027"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/akhn.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/akhn.default.glif
new file mode 100644
index 0000000000..1eded88af3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/akhn.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="akhn.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E024"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/akhn.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/akhn.fail.glif
new file mode 100644
index 0000000000..8752d480c9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/akhn.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="akhn.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/akhn.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/akhn.pass.glif
new file mode 100644
index 0000000000..7273d53c44
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/akhn.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="akhn.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwf.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwf.alt1.glif
new file mode 100644
index 0000000000..7e3a785590
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwf.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="blwf.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E029"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwf.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwf.alt2.glif
new file mode 100644
index 0000000000..4af2294ccd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwf.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="blwf.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E02A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwf.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwf.alt3.glif
new file mode 100644
index 0000000000..3b929378b3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwf.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="blwf.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E02B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwf.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwf.default.glif
new file mode 100644
index 0000000000..d83009a62d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwf.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="blwf.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E028"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwf.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwf.fail.glif
new file mode 100644
index 0000000000..553fb174b7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwf.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="blwf.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwf.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwf.pass.glif
new file mode 100644
index 0000000000..cd6b8852b6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwf.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="blwf.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwm.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwm.alt1.glif
new file mode 100644
index 0000000000..1ea553e189
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwm.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="blwm.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E02D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwm.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwm.alt2.glif
new file mode 100644
index 0000000000..aa96ebfe95
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwm.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="blwm.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E02E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwm.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwm.alt3.glif
new file mode 100644
index 0000000000..f165a4839e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwm.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="blwm.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E02F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwm.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwm.default.glif
new file mode 100644
index 0000000000..40082a0d61
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwm.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="blwm.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E02C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwm.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwm.fail.glif
new file mode 100644
index 0000000000..526eb9e311
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwm.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="blwm.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwm.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwm.pass.glif
new file mode 100644
index 0000000000..c6e71760cb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blwm.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="blwm.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blws.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blws.alt1.glif
new file mode 100644
index 0000000000..747f23641b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blws.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="blws.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E031"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blws.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blws.alt2.glif
new file mode 100644
index 0000000000..c9ad618d4e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blws.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="blws.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E032"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blws.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blws.alt3.glif
new file mode 100644
index 0000000000..cbf4bb125d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blws.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="blws.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E033"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blws.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blws.default.glif
new file mode 100644
index 0000000000..c5de1ecf57
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blws.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="blws.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E030"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blws.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blws.fail.glif
new file mode 100644
index 0000000000..8ee1745d37
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blws.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="blws.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blws.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blws.pass.glif
new file mode 100644
index 0000000000..95fb81f097
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/blws.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="blws.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2pc.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2pc.alt1.glif
new file mode 100644
index 0000000000..29f66c0819
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2pc.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="c2pc.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E035"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2pc.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2pc.alt2.glif
new file mode 100644
index 0000000000..3f4c5657f5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2pc.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="c2pc.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E036"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2pc.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2pc.alt3.glif
new file mode 100644
index 0000000000..6aa262050a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2pc.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="c2pc.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E037"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2pc.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2pc.default.glif
new file mode 100644
index 0000000000..cfcbc42590
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2pc.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="c2pc.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E034"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2pc.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2pc.fail.glif
new file mode 100644
index 0000000000..31750cbf21
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2pc.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="c2pc.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2pc.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2pc.pass.glif
new file mode 100644
index 0000000000..bf946e9cb6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2pc.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="c2pc.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2sc.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2sc.alt1.glif
new file mode 100644
index 0000000000..df0c72f9af
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2sc.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="c2sc.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E039"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2sc.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2sc.alt2.glif
new file mode 100644
index 0000000000..6510b60ed8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2sc.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="c2sc.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E03A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2sc.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2sc.alt3.glif
new file mode 100644
index 0000000000..18bce0b2d9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2sc.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="c2sc.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E03B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2sc.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2sc.default.glif
new file mode 100644
index 0000000000..d6c72c32d3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2sc.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="c2sc.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E038"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2sc.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2sc.fail.glif
new file mode 100644
index 0000000000..52cd3dd270
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2sc.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="c2sc.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2sc.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2sc.pass.glif
new file mode 100644
index 0000000000..528e0f6e64
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/c2sc.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="c2sc.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/calt.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/calt.alt1.glif
new file mode 100644
index 0000000000..a8d2f0f2cb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/calt.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="calt.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E03D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/calt.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/calt.alt2.glif
new file mode 100644
index 0000000000..c1e367e6a9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/calt.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="calt.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E03E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/calt.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/calt.alt3.glif
new file mode 100644
index 0000000000..6ff6958e93
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/calt.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="calt.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E03F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/calt.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/calt.default.glif
new file mode 100644
index 0000000000..951ff5dba9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/calt.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="calt.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E03C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/calt.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/calt.fail.glif
new file mode 100644
index 0000000000..61755c6deb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/calt.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="calt.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/calt.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/calt.pass.glif
new file mode 100644
index 0000000000..658fd48795
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/calt.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="calt.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/case.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/case.alt1.glif
new file mode 100644
index 0000000000..907148d265
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/case.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="case.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E041"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/case.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/case.alt2.glif
new file mode 100644
index 0000000000..8f15bbb68b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/case.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="case.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E042"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/case.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/case.alt3.glif
new file mode 100644
index 0000000000..21cbe34af4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/case.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="case.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E043"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/case.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/case.default.glif
new file mode 100644
index 0000000000..c1ff383fd8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/case.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="case.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E040"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/case.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/case.fail.glif
new file mode 100644
index 0000000000..0b6501a5c6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/case.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="case.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/case.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/case.pass.glif
new file mode 100644
index 0000000000..dd17525e6d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/case.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="case.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ccmp.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ccmp.alt1.glif
new file mode 100644
index 0000000000..7d22ceb4aa
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ccmp.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ccmp.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E045"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ccmp.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ccmp.alt2.glif
new file mode 100644
index 0000000000..f413acb45b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ccmp.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ccmp.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E046"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ccmp.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ccmp.alt3.glif
new file mode 100644
index 0000000000..f7a5c7242f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ccmp.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ccmp.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E047"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ccmp.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ccmp.default.glif
new file mode 100644
index 0000000000..649ef67a78
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ccmp.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ccmp.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E044"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ccmp.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ccmp.fail.glif
new file mode 100644
index 0000000000..77f4003b66
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ccmp.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ccmp.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ccmp.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ccmp.pass.glif
new file mode 100644
index 0000000000..3c5c5f45e0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ccmp.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ccmp.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cfar.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cfar.alt1.glif
new file mode 100644
index 0000000000..924ef4a780
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cfar.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cfar.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E049"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cfar.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cfar.alt2.glif
new file mode 100644
index 0000000000..aeb56f58f0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cfar.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cfar.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E04A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cfar.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cfar.alt3.glif
new file mode 100644
index 0000000000..a6eb8d6fbd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cfar.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cfar.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E04B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cfar.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cfar.default.glif
new file mode 100644
index 0000000000..f2f071d6be
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cfar.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cfar.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E048"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cfar.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cfar.fail.glif
new file mode 100644
index 0000000000..2193bc689b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cfar.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cfar.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cfar.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cfar.pass.glif
new file mode 100644
index 0000000000..cfd4cd4656
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cfar.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cfar.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cjct.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cjct.alt1.glif
new file mode 100644
index 0000000000..d1ff9feb89
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cjct.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cjct.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E04D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cjct.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cjct.alt2.glif
new file mode 100644
index 0000000000..62cfe7c9ca
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cjct.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cjct.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E04E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cjct.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cjct.alt3.glif
new file mode 100644
index 0000000000..03c87f9498
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cjct.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cjct.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E04F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cjct.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cjct.default.glif
new file mode 100644
index 0000000000..bdfdc84dbf
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cjct.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cjct.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E04C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cjct.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cjct.fail.glif
new file mode 100644
index 0000000000..b9cc80ff5b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cjct.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cjct.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cjct.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cjct.pass.glif
new file mode 100644
index 0000000000..5bb5be883d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cjct.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cjct.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/clig.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/clig.alt1.glif
new file mode 100644
index 0000000000..9a56fd81b7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/clig.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="clig.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E051"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/clig.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/clig.alt2.glif
new file mode 100644
index 0000000000..c06770e8ce
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/clig.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="clig.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E052"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/clig.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/clig.alt3.glif
new file mode 100644
index 0000000000..13bda229c7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/clig.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="clig.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E053"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/clig.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/clig.default.glif
new file mode 100644
index 0000000000..7c5beee4f1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/clig.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="clig.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E050"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/clig.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/clig.fail.glif
new file mode 100644
index 0000000000..09569ba16f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/clig.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="clig.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/clig.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/clig.pass.glif
new file mode 100644
index 0000000000..52b24b2691
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/clig.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="clig.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/contents.plist b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/contents.plist
new file mode 100644
index 0000000000..042e08cc9b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/contents.plist
@@ -0,0 +1,2882 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+ <dict>
+ <key>.notdef</key>
+ <string>_notdef.glif</string>
+ <key>space</key>
+ <string>space.glif</string>
+ <key>F</key>
+ <string>F_.glif</string>
+ <key>P</key>
+ <string>P_.glif</string>
+ <key>MWL1.pass</key>
+ <string>M_W_L_1.pass.glif</string>
+ <key>MWL1.fail</key>
+ <string>M_W_L_1.fail.glif</string>
+ <key>MWL1.default</key>
+ <string>M_W_L_1.default.glif</string>
+ <key>MWL1.alt1</key>
+ <string>M_W_L_1.alt1.glif</string>
+ <key>MWL1.alt2</key>
+ <string>M_W_L_1.alt2.glif</string>
+ <key>MWL1.alt3</key>
+ <string>M_W_L_1.alt3.glif</string>
+ <key>NUM2.pass</key>
+ <string>N_U_M_2.pass.glif</string>
+ <key>NUM2.fail</key>
+ <string>N_U_M_2.fail.glif</string>
+ <key>NUM2.default</key>
+ <string>N_U_M_2.default.glif</string>
+ <key>NUM2.alt1</key>
+ <string>N_U_M_2.alt1.glif</string>
+ <key>NUM2.alt2</key>
+ <string>N_U_M_2.alt2.glif</string>
+ <key>NUM2.alt3</key>
+ <string>N_U_M_2.alt3.glif</string>
+ <key>PRIV.pass</key>
+ <string>P_R_I_V_.pass.glif</string>
+ <key>PRIV.fail</key>
+ <string>P_R_I_V_.fail.glif</string>
+ <key>PRIV.default</key>
+ <string>P_R_I_V_.default.glif</string>
+ <key>PRIV.alt1</key>
+ <string>P_R_I_V_.alt1.glif</string>
+ <key>PRIV.alt2</key>
+ <string>P_R_I_V_.alt2.glif</string>
+ <key>PRIV.alt3</key>
+ <string>P_R_I_V_.alt3.glif</string>
+ <key>T3ST.pass</key>
+ <string>T_3S_T_.pass.glif</string>
+ <key>T3ST.fail</key>
+ <string>T_3S_T_.fail.glif</string>
+ <key>T3ST.default</key>
+ <string>T_3S_T_.default.glif</string>
+ <key>T3ST.alt1</key>
+ <string>T_3S_T_.alt1.glif</string>
+ <key>T3ST.alt2</key>
+ <string>T_3S_T_.alt2.glif</string>
+ <key>T3ST.alt3</key>
+ <string>T_3S_T_.alt3.glif</string>
+ <key>TPSP.pass</key>
+ <string>T_P_S_P_.pass.glif</string>
+ <key>TPSP.fail</key>
+ <string>T_P_S_P_.fail.glif</string>
+ <key>TPSP.default</key>
+ <string>T_P_S_P_.default.glif</string>
+ <key>TPSP.alt1</key>
+ <string>T_P_S_P_.alt1.glif</string>
+ <key>TPSP.alt2</key>
+ <string>T_P_S_P_.alt2.glif</string>
+ <key>TPSP.alt3</key>
+ <string>T_P_S_P_.alt3.glif</string>
+ <key>abvf.pass</key>
+ <string>abvf.pass.glif</string>
+ <key>abvf.fail</key>
+ <string>abvf.fail.glif</string>
+ <key>abvf.default</key>
+ <string>abvf.default.glif</string>
+ <key>abvf.alt1</key>
+ <string>abvf.alt1.glif</string>
+ <key>abvf.alt2</key>
+ <string>abvf.alt2.glif</string>
+ <key>abvf.alt3</key>
+ <string>abvf.alt3.glif</string>
+ <key>abvm.pass</key>
+ <string>abvm.pass.glif</string>
+ <key>abvm.fail</key>
+ <string>abvm.fail.glif</string>
+ <key>abvm.default</key>
+ <string>abvm.default.glif</string>
+ <key>abvm.alt1</key>
+ <string>abvm.alt1.glif</string>
+ <key>abvm.alt2</key>
+ <string>abvm.alt2.glif</string>
+ <key>abvm.alt3</key>
+ <string>abvm.alt3.glif</string>
+ <key>abvs.pass</key>
+ <string>abvs.pass.glif</string>
+ <key>abvs.fail</key>
+ <string>abvs.fail.glif</string>
+ <key>abvs.default</key>
+ <string>abvs.default.glif</string>
+ <key>abvs.alt1</key>
+ <string>abvs.alt1.glif</string>
+ <key>abvs.alt2</key>
+ <string>abvs.alt2.glif</string>
+ <key>abvs.alt3</key>
+ <string>abvs.alt3.glif</string>
+ <key>afrc.pass</key>
+ <string>afrc.pass.glif</string>
+ <key>afrc.fail</key>
+ <string>afrc.fail.glif</string>
+ <key>afrc.default</key>
+ <string>afrc.default.glif</string>
+ <key>afrc.alt1</key>
+ <string>afrc.alt1.glif</string>
+ <key>afrc.alt2</key>
+ <string>afrc.alt2.glif</string>
+ <key>afrc.alt3</key>
+ <string>afrc.alt3.glif</string>
+ <key>akhn.pass</key>
+ <string>akhn.pass.glif</string>
+ <key>akhn.fail</key>
+ <string>akhn.fail.glif</string>
+ <key>akhn.default</key>
+ <string>akhn.default.glif</string>
+ <key>akhn.alt1</key>
+ <string>akhn.alt1.glif</string>
+ <key>akhn.alt2</key>
+ <string>akhn.alt2.glif</string>
+ <key>akhn.alt3</key>
+ <string>akhn.alt3.glif</string>
+ <key>blwf.pass</key>
+ <string>blwf.pass.glif</string>
+ <key>blwf.fail</key>
+ <string>blwf.fail.glif</string>
+ <key>blwf.default</key>
+ <string>blwf.default.glif</string>
+ <key>blwf.alt1</key>
+ <string>blwf.alt1.glif</string>
+ <key>blwf.alt2</key>
+ <string>blwf.alt2.glif</string>
+ <key>blwf.alt3</key>
+ <string>blwf.alt3.glif</string>
+ <key>blwm.pass</key>
+ <string>blwm.pass.glif</string>
+ <key>blwm.fail</key>
+ <string>blwm.fail.glif</string>
+ <key>blwm.default</key>
+ <string>blwm.default.glif</string>
+ <key>blwm.alt1</key>
+ <string>blwm.alt1.glif</string>
+ <key>blwm.alt2</key>
+ <string>blwm.alt2.glif</string>
+ <key>blwm.alt3</key>
+ <string>blwm.alt3.glif</string>
+ <key>blws.pass</key>
+ <string>blws.pass.glif</string>
+ <key>blws.fail</key>
+ <string>blws.fail.glif</string>
+ <key>blws.default</key>
+ <string>blws.default.glif</string>
+ <key>blws.alt1</key>
+ <string>blws.alt1.glif</string>
+ <key>blws.alt2</key>
+ <string>blws.alt2.glif</string>
+ <key>blws.alt3</key>
+ <string>blws.alt3.glif</string>
+ <key>c2pc.pass</key>
+ <string>c2pc.pass.glif</string>
+ <key>c2pc.fail</key>
+ <string>c2pc.fail.glif</string>
+ <key>c2pc.default</key>
+ <string>c2pc.default.glif</string>
+ <key>c2pc.alt1</key>
+ <string>c2pc.alt1.glif</string>
+ <key>c2pc.alt2</key>
+ <string>c2pc.alt2.glif</string>
+ <key>c2pc.alt3</key>
+ <string>c2pc.alt3.glif</string>
+ <key>c2sc.pass</key>
+ <string>c2sc.pass.glif</string>
+ <key>c2sc.fail</key>
+ <string>c2sc.fail.glif</string>
+ <key>c2sc.default</key>
+ <string>c2sc.default.glif</string>
+ <key>c2sc.alt1</key>
+ <string>c2sc.alt1.glif</string>
+ <key>c2sc.alt2</key>
+ <string>c2sc.alt2.glif</string>
+ <key>c2sc.alt3</key>
+ <string>c2sc.alt3.glif</string>
+ <key>calt.pass</key>
+ <string>calt.pass.glif</string>
+ <key>calt.fail</key>
+ <string>calt.fail.glif</string>
+ <key>calt.default</key>
+ <string>calt.default.glif</string>
+ <key>calt.alt1</key>
+ <string>calt.alt1.glif</string>
+ <key>calt.alt2</key>
+ <string>calt.alt2.glif</string>
+ <key>calt.alt3</key>
+ <string>calt.alt3.glif</string>
+ <key>case.pass</key>
+ <string>case.pass.glif</string>
+ <key>case.fail</key>
+ <string>case.fail.glif</string>
+ <key>case.default</key>
+ <string>case.default.glif</string>
+ <key>case.alt1</key>
+ <string>case.alt1.glif</string>
+ <key>case.alt2</key>
+ <string>case.alt2.glif</string>
+ <key>case.alt3</key>
+ <string>case.alt3.glif</string>
+ <key>ccmp.pass</key>
+ <string>ccmp.pass.glif</string>
+ <key>ccmp.fail</key>
+ <string>ccmp.fail.glif</string>
+ <key>ccmp.default</key>
+ <string>ccmp.default.glif</string>
+ <key>ccmp.alt1</key>
+ <string>ccmp.alt1.glif</string>
+ <key>ccmp.alt2</key>
+ <string>ccmp.alt2.glif</string>
+ <key>ccmp.alt3</key>
+ <string>ccmp.alt3.glif</string>
+ <key>cfar.pass</key>
+ <string>cfar.pass.glif</string>
+ <key>cfar.fail</key>
+ <string>cfar.fail.glif</string>
+ <key>cfar.default</key>
+ <string>cfar.default.glif</string>
+ <key>cfar.alt1</key>
+ <string>cfar.alt1.glif</string>
+ <key>cfar.alt2</key>
+ <string>cfar.alt2.glif</string>
+ <key>cfar.alt3</key>
+ <string>cfar.alt3.glif</string>
+ <key>cjct.pass</key>
+ <string>cjct.pass.glif</string>
+ <key>cjct.fail</key>
+ <string>cjct.fail.glif</string>
+ <key>cjct.default</key>
+ <string>cjct.default.glif</string>
+ <key>cjct.alt1</key>
+ <string>cjct.alt1.glif</string>
+ <key>cjct.alt2</key>
+ <string>cjct.alt2.glif</string>
+ <key>cjct.alt3</key>
+ <string>cjct.alt3.glif</string>
+ <key>clig.pass</key>
+ <string>clig.pass.glif</string>
+ <key>clig.fail</key>
+ <string>clig.fail.glif</string>
+ <key>clig.default</key>
+ <string>clig.default.glif</string>
+ <key>clig.alt1</key>
+ <string>clig.alt1.glif</string>
+ <key>clig.alt2</key>
+ <string>clig.alt2.glif</string>
+ <key>clig.alt3</key>
+ <string>clig.alt3.glif</string>
+ <key>cpct.pass</key>
+ <string>cpct.pass.glif</string>
+ <key>cpct.fail</key>
+ <string>cpct.fail.glif</string>
+ <key>cpct.default</key>
+ <string>cpct.default.glif</string>
+ <key>cpct.alt1</key>
+ <string>cpct.alt1.glif</string>
+ <key>cpct.alt2</key>
+ <string>cpct.alt2.glif</string>
+ <key>cpct.alt3</key>
+ <string>cpct.alt3.glif</string>
+ <key>cpsp.pass</key>
+ <string>cpsp.pass.glif</string>
+ <key>cpsp.fail</key>
+ <string>cpsp.fail.glif</string>
+ <key>cpsp.default</key>
+ <string>cpsp.default.glif</string>
+ <key>cpsp.alt1</key>
+ <string>cpsp.alt1.glif</string>
+ <key>cpsp.alt2</key>
+ <string>cpsp.alt2.glif</string>
+ <key>cpsp.alt3</key>
+ <string>cpsp.alt3.glif</string>
+ <key>cswh.pass</key>
+ <string>cswh.pass.glif</string>
+ <key>cswh.fail</key>
+ <string>cswh.fail.glif</string>
+ <key>cswh.default</key>
+ <string>cswh.default.glif</string>
+ <key>cswh.alt1</key>
+ <string>cswh.alt1.glif</string>
+ <key>cswh.alt2</key>
+ <string>cswh.alt2.glif</string>
+ <key>cswh.alt3</key>
+ <string>cswh.alt3.glif</string>
+ <key>curs.pass</key>
+ <string>curs.pass.glif</string>
+ <key>curs.fail</key>
+ <string>curs.fail.glif</string>
+ <key>curs.default</key>
+ <string>curs.default.glif</string>
+ <key>curs.alt1</key>
+ <string>curs.alt1.glif</string>
+ <key>curs.alt2</key>
+ <string>curs.alt2.glif</string>
+ <key>curs.alt3</key>
+ <string>curs.alt3.glif</string>
+ <key>cv00.pass</key>
+ <string>cv00.pass.glif</string>
+ <key>cv00.fail</key>
+ <string>cv00.fail.glif</string>
+ <key>cv00.default</key>
+ <string>cv00.default.glif</string>
+ <key>cv00.alt1</key>
+ <string>cv00.alt1.glif</string>
+ <key>cv00.alt2</key>
+ <string>cv00.alt2.glif</string>
+ <key>cv00.alt3</key>
+ <string>cv00.alt3.glif</string>
+ <key>cv01.pass</key>
+ <string>cv01.pass.glif</string>
+ <key>cv01.fail</key>
+ <string>cv01.fail.glif</string>
+ <key>cv01.default</key>
+ <string>cv01.default.glif</string>
+ <key>cv01.alt1</key>
+ <string>cv01.alt1.glif</string>
+ <key>cv01.alt2</key>
+ <string>cv01.alt2.glif</string>
+ <key>cv01.alt3</key>
+ <string>cv01.alt3.glif</string>
+ <key>cv02.pass</key>
+ <string>cv02.pass.glif</string>
+ <key>cv02.fail</key>
+ <string>cv02.fail.glif</string>
+ <key>cv02.default</key>
+ <string>cv02.default.glif</string>
+ <key>cv02.alt1</key>
+ <string>cv02.alt1.glif</string>
+ <key>cv02.alt2</key>
+ <string>cv02.alt2.glif</string>
+ <key>cv02.alt3</key>
+ <string>cv02.alt3.glif</string>
+ <key>cv03.pass</key>
+ <string>cv03.pass.glif</string>
+ <key>cv03.fail</key>
+ <string>cv03.fail.glif</string>
+ <key>cv03.default</key>
+ <string>cv03.default.glif</string>
+ <key>cv03.alt1</key>
+ <string>cv03.alt1.glif</string>
+ <key>cv03.alt2</key>
+ <string>cv03.alt2.glif</string>
+ <key>cv03.alt3</key>
+ <string>cv03.alt3.glif</string>
+ <key>cv04.pass</key>
+ <string>cv04.pass.glif</string>
+ <key>cv04.fail</key>
+ <string>cv04.fail.glif</string>
+ <key>cv04.default</key>
+ <string>cv04.default.glif</string>
+ <key>cv04.alt1</key>
+ <string>cv04.alt1.glif</string>
+ <key>cv04.alt2</key>
+ <string>cv04.alt2.glif</string>
+ <key>cv04.alt3</key>
+ <string>cv04.alt3.glif</string>
+ <key>cv05.pass</key>
+ <string>cv05.pass.glif</string>
+ <key>cv05.fail</key>
+ <string>cv05.fail.glif</string>
+ <key>cv05.default</key>
+ <string>cv05.default.glif</string>
+ <key>cv05.alt1</key>
+ <string>cv05.alt1.glif</string>
+ <key>cv05.alt2</key>
+ <string>cv05.alt2.glif</string>
+ <key>cv05.alt3</key>
+ <string>cv05.alt3.glif</string>
+ <key>cv06.pass</key>
+ <string>cv06.pass.glif</string>
+ <key>cv06.fail</key>
+ <string>cv06.fail.glif</string>
+ <key>cv06.default</key>
+ <string>cv06.default.glif</string>
+ <key>cv06.alt1</key>
+ <string>cv06.alt1.glif</string>
+ <key>cv06.alt2</key>
+ <string>cv06.alt2.glif</string>
+ <key>cv06.alt3</key>
+ <string>cv06.alt3.glif</string>
+ <key>cv07.pass</key>
+ <string>cv07.pass.glif</string>
+ <key>cv07.fail</key>
+ <string>cv07.fail.glif</string>
+ <key>cv07.default</key>
+ <string>cv07.default.glif</string>
+ <key>cv07.alt1</key>
+ <string>cv07.alt1.glif</string>
+ <key>cv07.alt2</key>
+ <string>cv07.alt2.glif</string>
+ <key>cv07.alt3</key>
+ <string>cv07.alt3.glif</string>
+ <key>cv08.pass</key>
+ <string>cv08.pass.glif</string>
+ <key>cv08.fail</key>
+ <string>cv08.fail.glif</string>
+ <key>cv08.default</key>
+ <string>cv08.default.glif</string>
+ <key>cv08.alt1</key>
+ <string>cv08.alt1.glif</string>
+ <key>cv08.alt2</key>
+ <string>cv08.alt2.glif</string>
+ <key>cv08.alt3</key>
+ <string>cv08.alt3.glif</string>
+ <key>cv09.pass</key>
+ <string>cv09.pass.glif</string>
+ <key>cv09.fail</key>
+ <string>cv09.fail.glif</string>
+ <key>cv09.default</key>
+ <string>cv09.default.glif</string>
+ <key>cv09.alt1</key>
+ <string>cv09.alt1.glif</string>
+ <key>cv09.alt2</key>
+ <string>cv09.alt2.glif</string>
+ <key>cv09.alt3</key>
+ <string>cv09.alt3.glif</string>
+ <key>cv10.pass</key>
+ <string>cv10.pass.glif</string>
+ <key>cv10.fail</key>
+ <string>cv10.fail.glif</string>
+ <key>cv10.default</key>
+ <string>cv10.default.glif</string>
+ <key>cv10.alt1</key>
+ <string>cv10.alt1.glif</string>
+ <key>cv10.alt2</key>
+ <string>cv10.alt2.glif</string>
+ <key>cv10.alt3</key>
+ <string>cv10.alt3.glif</string>
+ <key>cv11.pass</key>
+ <string>cv11.pass.glif</string>
+ <key>cv11.fail</key>
+ <string>cv11.fail.glif</string>
+ <key>cv11.default</key>
+ <string>cv11.default.glif</string>
+ <key>cv11.alt1</key>
+ <string>cv11.alt1.glif</string>
+ <key>cv11.alt2</key>
+ <string>cv11.alt2.glif</string>
+ <key>cv11.alt3</key>
+ <string>cv11.alt3.glif</string>
+ <key>cv12.pass</key>
+ <string>cv12.pass.glif</string>
+ <key>cv12.fail</key>
+ <string>cv12.fail.glif</string>
+ <key>cv12.default</key>
+ <string>cv12.default.glif</string>
+ <key>cv12.alt1</key>
+ <string>cv12.alt1.glif</string>
+ <key>cv12.alt2</key>
+ <string>cv12.alt2.glif</string>
+ <key>cv12.alt3</key>
+ <string>cv12.alt3.glif</string>
+ <key>cv13.pass</key>
+ <string>cv13.pass.glif</string>
+ <key>cv13.fail</key>
+ <string>cv13.fail.glif</string>
+ <key>cv13.default</key>
+ <string>cv13.default.glif</string>
+ <key>cv13.alt1</key>
+ <string>cv13.alt1.glif</string>
+ <key>cv13.alt2</key>
+ <string>cv13.alt2.glif</string>
+ <key>cv13.alt3</key>
+ <string>cv13.alt3.glif</string>
+ <key>cv14.pass</key>
+ <string>cv14.pass.glif</string>
+ <key>cv14.fail</key>
+ <string>cv14.fail.glif</string>
+ <key>cv14.default</key>
+ <string>cv14.default.glif</string>
+ <key>cv14.alt1</key>
+ <string>cv14.alt1.glif</string>
+ <key>cv14.alt2</key>
+ <string>cv14.alt2.glif</string>
+ <key>cv14.alt3</key>
+ <string>cv14.alt3.glif</string>
+ <key>cv15.pass</key>
+ <string>cv15.pass.glif</string>
+ <key>cv15.fail</key>
+ <string>cv15.fail.glif</string>
+ <key>cv15.default</key>
+ <string>cv15.default.glif</string>
+ <key>cv15.alt1</key>
+ <string>cv15.alt1.glif</string>
+ <key>cv15.alt2</key>
+ <string>cv15.alt2.glif</string>
+ <key>cv15.alt3</key>
+ <string>cv15.alt3.glif</string>
+ <key>cv16.pass</key>
+ <string>cv16.pass.glif</string>
+ <key>cv16.fail</key>
+ <string>cv16.fail.glif</string>
+ <key>cv16.default</key>
+ <string>cv16.default.glif</string>
+ <key>cv16.alt1</key>
+ <string>cv16.alt1.glif</string>
+ <key>cv16.alt2</key>
+ <string>cv16.alt2.glif</string>
+ <key>cv16.alt3</key>
+ <string>cv16.alt3.glif</string>
+ <key>cv17.pass</key>
+ <string>cv17.pass.glif</string>
+ <key>cv17.fail</key>
+ <string>cv17.fail.glif</string>
+ <key>cv17.default</key>
+ <string>cv17.default.glif</string>
+ <key>cv17.alt1</key>
+ <string>cv17.alt1.glif</string>
+ <key>cv17.alt2</key>
+ <string>cv17.alt2.glif</string>
+ <key>cv17.alt3</key>
+ <string>cv17.alt3.glif</string>
+ <key>cv18.pass</key>
+ <string>cv18.pass.glif</string>
+ <key>cv18.fail</key>
+ <string>cv18.fail.glif</string>
+ <key>cv18.default</key>
+ <string>cv18.default.glif</string>
+ <key>cv18.alt1</key>
+ <string>cv18.alt1.glif</string>
+ <key>cv18.alt2</key>
+ <string>cv18.alt2.glif</string>
+ <key>cv18.alt3</key>
+ <string>cv18.alt3.glif</string>
+ <key>cv19.pass</key>
+ <string>cv19.pass.glif</string>
+ <key>cv19.fail</key>
+ <string>cv19.fail.glif</string>
+ <key>cv19.default</key>
+ <string>cv19.default.glif</string>
+ <key>cv19.alt1</key>
+ <string>cv19.alt1.glif</string>
+ <key>cv19.alt2</key>
+ <string>cv19.alt2.glif</string>
+ <key>cv19.alt3</key>
+ <string>cv19.alt3.glif</string>
+ <key>cv20.pass</key>
+ <string>cv20.pass.glif</string>
+ <key>cv20.fail</key>
+ <string>cv20.fail.glif</string>
+ <key>cv20.default</key>
+ <string>cv20.default.glif</string>
+ <key>cv20.alt1</key>
+ <string>cv20.alt1.glif</string>
+ <key>cv20.alt2</key>
+ <string>cv20.alt2.glif</string>
+ <key>cv20.alt3</key>
+ <string>cv20.alt3.glif</string>
+ <key>cv21.pass</key>
+ <string>cv21.pass.glif</string>
+ <key>cv21.fail</key>
+ <string>cv21.fail.glif</string>
+ <key>cv21.default</key>
+ <string>cv21.default.glif</string>
+ <key>cv21.alt1</key>
+ <string>cv21.alt1.glif</string>
+ <key>cv21.alt2</key>
+ <string>cv21.alt2.glif</string>
+ <key>cv21.alt3</key>
+ <string>cv21.alt3.glif</string>
+ <key>cv22.pass</key>
+ <string>cv22.pass.glif</string>
+ <key>cv22.fail</key>
+ <string>cv22.fail.glif</string>
+ <key>cv22.default</key>
+ <string>cv22.default.glif</string>
+ <key>cv22.alt1</key>
+ <string>cv22.alt1.glif</string>
+ <key>cv22.alt2</key>
+ <string>cv22.alt2.glif</string>
+ <key>cv22.alt3</key>
+ <string>cv22.alt3.glif</string>
+ <key>cv23.pass</key>
+ <string>cv23.pass.glif</string>
+ <key>cv23.fail</key>
+ <string>cv23.fail.glif</string>
+ <key>cv23.default</key>
+ <string>cv23.default.glif</string>
+ <key>cv23.alt1</key>
+ <string>cv23.alt1.glif</string>
+ <key>cv23.alt2</key>
+ <string>cv23.alt2.glif</string>
+ <key>cv23.alt3</key>
+ <string>cv23.alt3.glif</string>
+ <key>cv24.pass</key>
+ <string>cv24.pass.glif</string>
+ <key>cv24.fail</key>
+ <string>cv24.fail.glif</string>
+ <key>cv24.default</key>
+ <string>cv24.default.glif</string>
+ <key>cv24.alt1</key>
+ <string>cv24.alt1.glif</string>
+ <key>cv24.alt2</key>
+ <string>cv24.alt2.glif</string>
+ <key>cv24.alt3</key>
+ <string>cv24.alt3.glif</string>
+ <key>cv25.pass</key>
+ <string>cv25.pass.glif</string>
+ <key>cv25.fail</key>
+ <string>cv25.fail.glif</string>
+ <key>cv25.default</key>
+ <string>cv25.default.glif</string>
+ <key>cv25.alt1</key>
+ <string>cv25.alt1.glif</string>
+ <key>cv25.alt2</key>
+ <string>cv25.alt2.glif</string>
+ <key>cv25.alt3</key>
+ <string>cv25.alt3.glif</string>
+ <key>cv26.pass</key>
+ <string>cv26.pass.glif</string>
+ <key>cv26.fail</key>
+ <string>cv26.fail.glif</string>
+ <key>cv26.default</key>
+ <string>cv26.default.glif</string>
+ <key>cv26.alt1</key>
+ <string>cv26.alt1.glif</string>
+ <key>cv26.alt2</key>
+ <string>cv26.alt2.glif</string>
+ <key>cv26.alt3</key>
+ <string>cv26.alt3.glif</string>
+ <key>cv27.pass</key>
+ <string>cv27.pass.glif</string>
+ <key>cv27.fail</key>
+ <string>cv27.fail.glif</string>
+ <key>cv27.default</key>
+ <string>cv27.default.glif</string>
+ <key>cv27.alt1</key>
+ <string>cv27.alt1.glif</string>
+ <key>cv27.alt2</key>
+ <string>cv27.alt2.glif</string>
+ <key>cv27.alt3</key>
+ <string>cv27.alt3.glif</string>
+ <key>cv28.pass</key>
+ <string>cv28.pass.glif</string>
+ <key>cv28.fail</key>
+ <string>cv28.fail.glif</string>
+ <key>cv28.default</key>
+ <string>cv28.default.glif</string>
+ <key>cv28.alt1</key>
+ <string>cv28.alt1.glif</string>
+ <key>cv28.alt2</key>
+ <string>cv28.alt2.glif</string>
+ <key>cv28.alt3</key>
+ <string>cv28.alt3.glif</string>
+ <key>cv29.pass</key>
+ <string>cv29.pass.glif</string>
+ <key>cv29.fail</key>
+ <string>cv29.fail.glif</string>
+ <key>cv29.default</key>
+ <string>cv29.default.glif</string>
+ <key>cv29.alt1</key>
+ <string>cv29.alt1.glif</string>
+ <key>cv29.alt2</key>
+ <string>cv29.alt2.glif</string>
+ <key>cv29.alt3</key>
+ <string>cv29.alt3.glif</string>
+ <key>cv30.pass</key>
+ <string>cv30.pass.glif</string>
+ <key>cv30.fail</key>
+ <string>cv30.fail.glif</string>
+ <key>cv30.default</key>
+ <string>cv30.default.glif</string>
+ <key>cv30.alt1</key>
+ <string>cv30.alt1.glif</string>
+ <key>cv30.alt2</key>
+ <string>cv30.alt2.glif</string>
+ <key>cv30.alt3</key>
+ <string>cv30.alt3.glif</string>
+ <key>cv31.pass</key>
+ <string>cv31.pass.glif</string>
+ <key>cv31.fail</key>
+ <string>cv31.fail.glif</string>
+ <key>cv31.default</key>
+ <string>cv31.default.glif</string>
+ <key>cv31.alt1</key>
+ <string>cv31.alt1.glif</string>
+ <key>cv31.alt2</key>
+ <string>cv31.alt2.glif</string>
+ <key>cv31.alt3</key>
+ <string>cv31.alt3.glif</string>
+ <key>cv32.pass</key>
+ <string>cv32.pass.glif</string>
+ <key>cv32.fail</key>
+ <string>cv32.fail.glif</string>
+ <key>cv32.default</key>
+ <string>cv32.default.glif</string>
+ <key>cv32.alt1</key>
+ <string>cv32.alt1.glif</string>
+ <key>cv32.alt2</key>
+ <string>cv32.alt2.glif</string>
+ <key>cv32.alt3</key>
+ <string>cv32.alt3.glif</string>
+ <key>cv33.pass</key>
+ <string>cv33.pass.glif</string>
+ <key>cv33.fail</key>
+ <string>cv33.fail.glif</string>
+ <key>cv33.default</key>
+ <string>cv33.default.glif</string>
+ <key>cv33.alt1</key>
+ <string>cv33.alt1.glif</string>
+ <key>cv33.alt2</key>
+ <string>cv33.alt2.glif</string>
+ <key>cv33.alt3</key>
+ <string>cv33.alt3.glif</string>
+ <key>cv34.pass</key>
+ <string>cv34.pass.glif</string>
+ <key>cv34.fail</key>
+ <string>cv34.fail.glif</string>
+ <key>cv34.default</key>
+ <string>cv34.default.glif</string>
+ <key>cv34.alt1</key>
+ <string>cv34.alt1.glif</string>
+ <key>cv34.alt2</key>
+ <string>cv34.alt2.glif</string>
+ <key>cv34.alt3</key>
+ <string>cv34.alt3.glif</string>
+ <key>cv35.pass</key>
+ <string>cv35.pass.glif</string>
+ <key>cv35.fail</key>
+ <string>cv35.fail.glif</string>
+ <key>cv35.default</key>
+ <string>cv35.default.glif</string>
+ <key>cv35.alt1</key>
+ <string>cv35.alt1.glif</string>
+ <key>cv35.alt2</key>
+ <string>cv35.alt2.glif</string>
+ <key>cv35.alt3</key>
+ <string>cv35.alt3.glif</string>
+ <key>cv36.pass</key>
+ <string>cv36.pass.glif</string>
+ <key>cv36.fail</key>
+ <string>cv36.fail.glif</string>
+ <key>cv36.default</key>
+ <string>cv36.default.glif</string>
+ <key>cv36.alt1</key>
+ <string>cv36.alt1.glif</string>
+ <key>cv36.alt2</key>
+ <string>cv36.alt2.glif</string>
+ <key>cv36.alt3</key>
+ <string>cv36.alt3.glif</string>
+ <key>cv37.pass</key>
+ <string>cv37.pass.glif</string>
+ <key>cv37.fail</key>
+ <string>cv37.fail.glif</string>
+ <key>cv37.default</key>
+ <string>cv37.default.glif</string>
+ <key>cv37.alt1</key>
+ <string>cv37.alt1.glif</string>
+ <key>cv37.alt2</key>
+ <string>cv37.alt2.glif</string>
+ <key>cv37.alt3</key>
+ <string>cv37.alt3.glif</string>
+ <key>cv38.pass</key>
+ <string>cv38.pass.glif</string>
+ <key>cv38.fail</key>
+ <string>cv38.fail.glif</string>
+ <key>cv38.default</key>
+ <string>cv38.default.glif</string>
+ <key>cv38.alt1</key>
+ <string>cv38.alt1.glif</string>
+ <key>cv38.alt2</key>
+ <string>cv38.alt2.glif</string>
+ <key>cv38.alt3</key>
+ <string>cv38.alt3.glif</string>
+ <key>cv39.pass</key>
+ <string>cv39.pass.glif</string>
+ <key>cv39.fail</key>
+ <string>cv39.fail.glif</string>
+ <key>cv39.default</key>
+ <string>cv39.default.glif</string>
+ <key>cv39.alt1</key>
+ <string>cv39.alt1.glif</string>
+ <key>cv39.alt2</key>
+ <string>cv39.alt2.glif</string>
+ <key>cv39.alt3</key>
+ <string>cv39.alt3.glif</string>
+ <key>cv40.pass</key>
+ <string>cv40.pass.glif</string>
+ <key>cv40.fail</key>
+ <string>cv40.fail.glif</string>
+ <key>cv40.default</key>
+ <string>cv40.default.glif</string>
+ <key>cv40.alt1</key>
+ <string>cv40.alt1.glif</string>
+ <key>cv40.alt2</key>
+ <string>cv40.alt2.glif</string>
+ <key>cv40.alt3</key>
+ <string>cv40.alt3.glif</string>
+ <key>cv41.pass</key>
+ <string>cv41.pass.glif</string>
+ <key>cv41.fail</key>
+ <string>cv41.fail.glif</string>
+ <key>cv41.default</key>
+ <string>cv41.default.glif</string>
+ <key>cv41.alt1</key>
+ <string>cv41.alt1.glif</string>
+ <key>cv41.alt2</key>
+ <string>cv41.alt2.glif</string>
+ <key>cv41.alt3</key>
+ <string>cv41.alt3.glif</string>
+ <key>cv42.pass</key>
+ <string>cv42.pass.glif</string>
+ <key>cv42.fail</key>
+ <string>cv42.fail.glif</string>
+ <key>cv42.default</key>
+ <string>cv42.default.glif</string>
+ <key>cv42.alt1</key>
+ <string>cv42.alt1.glif</string>
+ <key>cv42.alt2</key>
+ <string>cv42.alt2.glif</string>
+ <key>cv42.alt3</key>
+ <string>cv42.alt3.glif</string>
+ <key>cv43.pass</key>
+ <string>cv43.pass.glif</string>
+ <key>cv43.fail</key>
+ <string>cv43.fail.glif</string>
+ <key>cv43.default</key>
+ <string>cv43.default.glif</string>
+ <key>cv43.alt1</key>
+ <string>cv43.alt1.glif</string>
+ <key>cv43.alt2</key>
+ <string>cv43.alt2.glif</string>
+ <key>cv43.alt3</key>
+ <string>cv43.alt3.glif</string>
+ <key>cv44.pass</key>
+ <string>cv44.pass.glif</string>
+ <key>cv44.fail</key>
+ <string>cv44.fail.glif</string>
+ <key>cv44.default</key>
+ <string>cv44.default.glif</string>
+ <key>cv44.alt1</key>
+ <string>cv44.alt1.glif</string>
+ <key>cv44.alt2</key>
+ <string>cv44.alt2.glif</string>
+ <key>cv44.alt3</key>
+ <string>cv44.alt3.glif</string>
+ <key>cv45.pass</key>
+ <string>cv45.pass.glif</string>
+ <key>cv45.fail</key>
+ <string>cv45.fail.glif</string>
+ <key>cv45.default</key>
+ <string>cv45.default.glif</string>
+ <key>cv45.alt1</key>
+ <string>cv45.alt1.glif</string>
+ <key>cv45.alt2</key>
+ <string>cv45.alt2.glif</string>
+ <key>cv45.alt3</key>
+ <string>cv45.alt3.glif</string>
+ <key>cv46.pass</key>
+ <string>cv46.pass.glif</string>
+ <key>cv46.fail</key>
+ <string>cv46.fail.glif</string>
+ <key>cv46.default</key>
+ <string>cv46.default.glif</string>
+ <key>cv46.alt1</key>
+ <string>cv46.alt1.glif</string>
+ <key>cv46.alt2</key>
+ <string>cv46.alt2.glif</string>
+ <key>cv46.alt3</key>
+ <string>cv46.alt3.glif</string>
+ <key>cv47.pass</key>
+ <string>cv47.pass.glif</string>
+ <key>cv47.fail</key>
+ <string>cv47.fail.glif</string>
+ <key>cv47.default</key>
+ <string>cv47.default.glif</string>
+ <key>cv47.alt1</key>
+ <string>cv47.alt1.glif</string>
+ <key>cv47.alt2</key>
+ <string>cv47.alt2.glif</string>
+ <key>cv47.alt3</key>
+ <string>cv47.alt3.glif</string>
+ <key>cv48.pass</key>
+ <string>cv48.pass.glif</string>
+ <key>cv48.fail</key>
+ <string>cv48.fail.glif</string>
+ <key>cv48.default</key>
+ <string>cv48.default.glif</string>
+ <key>cv48.alt1</key>
+ <string>cv48.alt1.glif</string>
+ <key>cv48.alt2</key>
+ <string>cv48.alt2.glif</string>
+ <key>cv48.alt3</key>
+ <string>cv48.alt3.glif</string>
+ <key>cv49.pass</key>
+ <string>cv49.pass.glif</string>
+ <key>cv49.fail</key>
+ <string>cv49.fail.glif</string>
+ <key>cv49.default</key>
+ <string>cv49.default.glif</string>
+ <key>cv49.alt1</key>
+ <string>cv49.alt1.glif</string>
+ <key>cv49.alt2</key>
+ <string>cv49.alt2.glif</string>
+ <key>cv49.alt3</key>
+ <string>cv49.alt3.glif</string>
+ <key>cv50.pass</key>
+ <string>cv50.pass.glif</string>
+ <key>cv50.fail</key>
+ <string>cv50.fail.glif</string>
+ <key>cv50.default</key>
+ <string>cv50.default.glif</string>
+ <key>cv50.alt1</key>
+ <string>cv50.alt1.glif</string>
+ <key>cv50.alt2</key>
+ <string>cv50.alt2.glif</string>
+ <key>cv50.alt3</key>
+ <string>cv50.alt3.glif</string>
+ <key>cv51.pass</key>
+ <string>cv51.pass.glif</string>
+ <key>cv51.fail</key>
+ <string>cv51.fail.glif</string>
+ <key>cv51.default</key>
+ <string>cv51.default.glif</string>
+ <key>cv51.alt1</key>
+ <string>cv51.alt1.glif</string>
+ <key>cv51.alt2</key>
+ <string>cv51.alt2.glif</string>
+ <key>cv51.alt3</key>
+ <string>cv51.alt3.glif</string>
+ <key>cv52.pass</key>
+ <string>cv52.pass.glif</string>
+ <key>cv52.fail</key>
+ <string>cv52.fail.glif</string>
+ <key>cv52.default</key>
+ <string>cv52.default.glif</string>
+ <key>cv52.alt1</key>
+ <string>cv52.alt1.glif</string>
+ <key>cv52.alt2</key>
+ <string>cv52.alt2.glif</string>
+ <key>cv52.alt3</key>
+ <string>cv52.alt3.glif</string>
+ <key>cv53.pass</key>
+ <string>cv53.pass.glif</string>
+ <key>cv53.fail</key>
+ <string>cv53.fail.glif</string>
+ <key>cv53.default</key>
+ <string>cv53.default.glif</string>
+ <key>cv53.alt1</key>
+ <string>cv53.alt1.glif</string>
+ <key>cv53.alt2</key>
+ <string>cv53.alt2.glif</string>
+ <key>cv53.alt3</key>
+ <string>cv53.alt3.glif</string>
+ <key>cv54.pass</key>
+ <string>cv54.pass.glif</string>
+ <key>cv54.fail</key>
+ <string>cv54.fail.glif</string>
+ <key>cv54.default</key>
+ <string>cv54.default.glif</string>
+ <key>cv54.alt1</key>
+ <string>cv54.alt1.glif</string>
+ <key>cv54.alt2</key>
+ <string>cv54.alt2.glif</string>
+ <key>cv54.alt3</key>
+ <string>cv54.alt3.glif</string>
+ <key>cv55.pass</key>
+ <string>cv55.pass.glif</string>
+ <key>cv55.fail</key>
+ <string>cv55.fail.glif</string>
+ <key>cv55.default</key>
+ <string>cv55.default.glif</string>
+ <key>cv55.alt1</key>
+ <string>cv55.alt1.glif</string>
+ <key>cv55.alt2</key>
+ <string>cv55.alt2.glif</string>
+ <key>cv55.alt3</key>
+ <string>cv55.alt3.glif</string>
+ <key>cv56.pass</key>
+ <string>cv56.pass.glif</string>
+ <key>cv56.fail</key>
+ <string>cv56.fail.glif</string>
+ <key>cv56.default</key>
+ <string>cv56.default.glif</string>
+ <key>cv56.alt1</key>
+ <string>cv56.alt1.glif</string>
+ <key>cv56.alt2</key>
+ <string>cv56.alt2.glif</string>
+ <key>cv56.alt3</key>
+ <string>cv56.alt3.glif</string>
+ <key>cv57.pass</key>
+ <string>cv57.pass.glif</string>
+ <key>cv57.fail</key>
+ <string>cv57.fail.glif</string>
+ <key>cv57.default</key>
+ <string>cv57.default.glif</string>
+ <key>cv57.alt1</key>
+ <string>cv57.alt1.glif</string>
+ <key>cv57.alt2</key>
+ <string>cv57.alt2.glif</string>
+ <key>cv57.alt3</key>
+ <string>cv57.alt3.glif</string>
+ <key>cv58.pass</key>
+ <string>cv58.pass.glif</string>
+ <key>cv58.fail</key>
+ <string>cv58.fail.glif</string>
+ <key>cv58.default</key>
+ <string>cv58.default.glif</string>
+ <key>cv58.alt1</key>
+ <string>cv58.alt1.glif</string>
+ <key>cv58.alt2</key>
+ <string>cv58.alt2.glif</string>
+ <key>cv58.alt3</key>
+ <string>cv58.alt3.glif</string>
+ <key>cv59.pass</key>
+ <string>cv59.pass.glif</string>
+ <key>cv59.fail</key>
+ <string>cv59.fail.glif</string>
+ <key>cv59.default</key>
+ <string>cv59.default.glif</string>
+ <key>cv59.alt1</key>
+ <string>cv59.alt1.glif</string>
+ <key>cv59.alt2</key>
+ <string>cv59.alt2.glif</string>
+ <key>cv59.alt3</key>
+ <string>cv59.alt3.glif</string>
+ <key>cv60.pass</key>
+ <string>cv60.pass.glif</string>
+ <key>cv60.fail</key>
+ <string>cv60.fail.glif</string>
+ <key>cv60.default</key>
+ <string>cv60.default.glif</string>
+ <key>cv60.alt1</key>
+ <string>cv60.alt1.glif</string>
+ <key>cv60.alt2</key>
+ <string>cv60.alt2.glif</string>
+ <key>cv60.alt3</key>
+ <string>cv60.alt3.glif</string>
+ <key>cv61.pass</key>
+ <string>cv61.pass.glif</string>
+ <key>cv61.fail</key>
+ <string>cv61.fail.glif</string>
+ <key>cv61.default</key>
+ <string>cv61.default.glif</string>
+ <key>cv61.alt1</key>
+ <string>cv61.alt1.glif</string>
+ <key>cv61.alt2</key>
+ <string>cv61.alt2.glif</string>
+ <key>cv61.alt3</key>
+ <string>cv61.alt3.glif</string>
+ <key>cv62.pass</key>
+ <string>cv62.pass.glif</string>
+ <key>cv62.fail</key>
+ <string>cv62.fail.glif</string>
+ <key>cv62.default</key>
+ <string>cv62.default.glif</string>
+ <key>cv62.alt1</key>
+ <string>cv62.alt1.glif</string>
+ <key>cv62.alt2</key>
+ <string>cv62.alt2.glif</string>
+ <key>cv62.alt3</key>
+ <string>cv62.alt3.glif</string>
+ <key>cv63.pass</key>
+ <string>cv63.pass.glif</string>
+ <key>cv63.fail</key>
+ <string>cv63.fail.glif</string>
+ <key>cv63.default</key>
+ <string>cv63.default.glif</string>
+ <key>cv63.alt1</key>
+ <string>cv63.alt1.glif</string>
+ <key>cv63.alt2</key>
+ <string>cv63.alt2.glif</string>
+ <key>cv63.alt3</key>
+ <string>cv63.alt3.glif</string>
+ <key>cv64.pass</key>
+ <string>cv64.pass.glif</string>
+ <key>cv64.fail</key>
+ <string>cv64.fail.glif</string>
+ <key>cv64.default</key>
+ <string>cv64.default.glif</string>
+ <key>cv64.alt1</key>
+ <string>cv64.alt1.glif</string>
+ <key>cv64.alt2</key>
+ <string>cv64.alt2.glif</string>
+ <key>cv64.alt3</key>
+ <string>cv64.alt3.glif</string>
+ <key>cv65.pass</key>
+ <string>cv65.pass.glif</string>
+ <key>cv65.fail</key>
+ <string>cv65.fail.glif</string>
+ <key>cv65.default</key>
+ <string>cv65.default.glif</string>
+ <key>cv65.alt1</key>
+ <string>cv65.alt1.glif</string>
+ <key>cv65.alt2</key>
+ <string>cv65.alt2.glif</string>
+ <key>cv65.alt3</key>
+ <string>cv65.alt3.glif</string>
+ <key>cv66.pass</key>
+ <string>cv66.pass.glif</string>
+ <key>cv66.fail</key>
+ <string>cv66.fail.glif</string>
+ <key>cv66.default</key>
+ <string>cv66.default.glif</string>
+ <key>cv66.alt1</key>
+ <string>cv66.alt1.glif</string>
+ <key>cv66.alt2</key>
+ <string>cv66.alt2.glif</string>
+ <key>cv66.alt3</key>
+ <string>cv66.alt3.glif</string>
+ <key>cv67.pass</key>
+ <string>cv67.pass.glif</string>
+ <key>cv67.fail</key>
+ <string>cv67.fail.glif</string>
+ <key>cv67.default</key>
+ <string>cv67.default.glif</string>
+ <key>cv67.alt1</key>
+ <string>cv67.alt1.glif</string>
+ <key>cv67.alt2</key>
+ <string>cv67.alt2.glif</string>
+ <key>cv67.alt3</key>
+ <string>cv67.alt3.glif</string>
+ <key>cv68.pass</key>
+ <string>cv68.pass.glif</string>
+ <key>cv68.fail</key>
+ <string>cv68.fail.glif</string>
+ <key>cv68.default</key>
+ <string>cv68.default.glif</string>
+ <key>cv68.alt1</key>
+ <string>cv68.alt1.glif</string>
+ <key>cv68.alt2</key>
+ <string>cv68.alt2.glif</string>
+ <key>cv68.alt3</key>
+ <string>cv68.alt3.glif</string>
+ <key>cv69.pass</key>
+ <string>cv69.pass.glif</string>
+ <key>cv69.fail</key>
+ <string>cv69.fail.glif</string>
+ <key>cv69.default</key>
+ <string>cv69.default.glif</string>
+ <key>cv69.alt1</key>
+ <string>cv69.alt1.glif</string>
+ <key>cv69.alt2</key>
+ <string>cv69.alt2.glif</string>
+ <key>cv69.alt3</key>
+ <string>cv69.alt3.glif</string>
+ <key>cv70.pass</key>
+ <string>cv70.pass.glif</string>
+ <key>cv70.fail</key>
+ <string>cv70.fail.glif</string>
+ <key>cv70.default</key>
+ <string>cv70.default.glif</string>
+ <key>cv70.alt1</key>
+ <string>cv70.alt1.glif</string>
+ <key>cv70.alt2</key>
+ <string>cv70.alt2.glif</string>
+ <key>cv70.alt3</key>
+ <string>cv70.alt3.glif</string>
+ <key>cv71.pass</key>
+ <string>cv71.pass.glif</string>
+ <key>cv71.fail</key>
+ <string>cv71.fail.glif</string>
+ <key>cv71.default</key>
+ <string>cv71.default.glif</string>
+ <key>cv71.alt1</key>
+ <string>cv71.alt1.glif</string>
+ <key>cv71.alt2</key>
+ <string>cv71.alt2.glif</string>
+ <key>cv71.alt3</key>
+ <string>cv71.alt3.glif</string>
+ <key>cv72.pass</key>
+ <string>cv72.pass.glif</string>
+ <key>cv72.fail</key>
+ <string>cv72.fail.glif</string>
+ <key>cv72.default</key>
+ <string>cv72.default.glif</string>
+ <key>cv72.alt1</key>
+ <string>cv72.alt1.glif</string>
+ <key>cv72.alt2</key>
+ <string>cv72.alt2.glif</string>
+ <key>cv72.alt3</key>
+ <string>cv72.alt3.glif</string>
+ <key>cv73.pass</key>
+ <string>cv73.pass.glif</string>
+ <key>cv73.fail</key>
+ <string>cv73.fail.glif</string>
+ <key>cv73.default</key>
+ <string>cv73.default.glif</string>
+ <key>cv73.alt1</key>
+ <string>cv73.alt1.glif</string>
+ <key>cv73.alt2</key>
+ <string>cv73.alt2.glif</string>
+ <key>cv73.alt3</key>
+ <string>cv73.alt3.glif</string>
+ <key>cv74.pass</key>
+ <string>cv74.pass.glif</string>
+ <key>cv74.fail</key>
+ <string>cv74.fail.glif</string>
+ <key>cv74.default</key>
+ <string>cv74.default.glif</string>
+ <key>cv74.alt1</key>
+ <string>cv74.alt1.glif</string>
+ <key>cv74.alt2</key>
+ <string>cv74.alt2.glif</string>
+ <key>cv74.alt3</key>
+ <string>cv74.alt3.glif</string>
+ <key>cv75.pass</key>
+ <string>cv75.pass.glif</string>
+ <key>cv75.fail</key>
+ <string>cv75.fail.glif</string>
+ <key>cv75.default</key>
+ <string>cv75.default.glif</string>
+ <key>cv75.alt1</key>
+ <string>cv75.alt1.glif</string>
+ <key>cv75.alt2</key>
+ <string>cv75.alt2.glif</string>
+ <key>cv75.alt3</key>
+ <string>cv75.alt3.glif</string>
+ <key>cv76.pass</key>
+ <string>cv76.pass.glif</string>
+ <key>cv76.fail</key>
+ <string>cv76.fail.glif</string>
+ <key>cv76.default</key>
+ <string>cv76.default.glif</string>
+ <key>cv76.alt1</key>
+ <string>cv76.alt1.glif</string>
+ <key>cv76.alt2</key>
+ <string>cv76.alt2.glif</string>
+ <key>cv76.alt3</key>
+ <string>cv76.alt3.glif</string>
+ <key>cv77.pass</key>
+ <string>cv77.pass.glif</string>
+ <key>cv77.fail</key>
+ <string>cv77.fail.glif</string>
+ <key>cv77.default</key>
+ <string>cv77.default.glif</string>
+ <key>cv77.alt1</key>
+ <string>cv77.alt1.glif</string>
+ <key>cv77.alt2</key>
+ <string>cv77.alt2.glif</string>
+ <key>cv77.alt3</key>
+ <string>cv77.alt3.glif</string>
+ <key>cv78.pass</key>
+ <string>cv78.pass.glif</string>
+ <key>cv78.fail</key>
+ <string>cv78.fail.glif</string>
+ <key>cv78.default</key>
+ <string>cv78.default.glif</string>
+ <key>cv78.alt1</key>
+ <string>cv78.alt1.glif</string>
+ <key>cv78.alt2</key>
+ <string>cv78.alt2.glif</string>
+ <key>cv78.alt3</key>
+ <string>cv78.alt3.glif</string>
+ <key>cv79.pass</key>
+ <string>cv79.pass.glif</string>
+ <key>cv79.fail</key>
+ <string>cv79.fail.glif</string>
+ <key>cv79.default</key>
+ <string>cv79.default.glif</string>
+ <key>cv79.alt1</key>
+ <string>cv79.alt1.glif</string>
+ <key>cv79.alt2</key>
+ <string>cv79.alt2.glif</string>
+ <key>cv79.alt3</key>
+ <string>cv79.alt3.glif</string>
+ <key>cv80.pass</key>
+ <string>cv80.pass.glif</string>
+ <key>cv80.fail</key>
+ <string>cv80.fail.glif</string>
+ <key>cv80.default</key>
+ <string>cv80.default.glif</string>
+ <key>cv80.alt1</key>
+ <string>cv80.alt1.glif</string>
+ <key>cv80.alt2</key>
+ <string>cv80.alt2.glif</string>
+ <key>cv80.alt3</key>
+ <string>cv80.alt3.glif</string>
+ <key>cv81.pass</key>
+ <string>cv81.pass.glif</string>
+ <key>cv81.fail</key>
+ <string>cv81.fail.glif</string>
+ <key>cv81.default</key>
+ <string>cv81.default.glif</string>
+ <key>cv81.alt1</key>
+ <string>cv81.alt1.glif</string>
+ <key>cv81.alt2</key>
+ <string>cv81.alt2.glif</string>
+ <key>cv81.alt3</key>
+ <string>cv81.alt3.glif</string>
+ <key>cv82.pass</key>
+ <string>cv82.pass.glif</string>
+ <key>cv82.fail</key>
+ <string>cv82.fail.glif</string>
+ <key>cv82.default</key>
+ <string>cv82.default.glif</string>
+ <key>cv82.alt1</key>
+ <string>cv82.alt1.glif</string>
+ <key>cv82.alt2</key>
+ <string>cv82.alt2.glif</string>
+ <key>cv82.alt3</key>
+ <string>cv82.alt3.glif</string>
+ <key>cv83.pass</key>
+ <string>cv83.pass.glif</string>
+ <key>cv83.fail</key>
+ <string>cv83.fail.glif</string>
+ <key>cv83.default</key>
+ <string>cv83.default.glif</string>
+ <key>cv83.alt1</key>
+ <string>cv83.alt1.glif</string>
+ <key>cv83.alt2</key>
+ <string>cv83.alt2.glif</string>
+ <key>cv83.alt3</key>
+ <string>cv83.alt3.glif</string>
+ <key>cv84.pass</key>
+ <string>cv84.pass.glif</string>
+ <key>cv84.fail</key>
+ <string>cv84.fail.glif</string>
+ <key>cv84.default</key>
+ <string>cv84.default.glif</string>
+ <key>cv84.alt1</key>
+ <string>cv84.alt1.glif</string>
+ <key>cv84.alt2</key>
+ <string>cv84.alt2.glif</string>
+ <key>cv84.alt3</key>
+ <string>cv84.alt3.glif</string>
+ <key>cv85.pass</key>
+ <string>cv85.pass.glif</string>
+ <key>cv85.fail</key>
+ <string>cv85.fail.glif</string>
+ <key>cv85.default</key>
+ <string>cv85.default.glif</string>
+ <key>cv85.alt1</key>
+ <string>cv85.alt1.glif</string>
+ <key>cv85.alt2</key>
+ <string>cv85.alt2.glif</string>
+ <key>cv85.alt3</key>
+ <string>cv85.alt3.glif</string>
+ <key>cv86.pass</key>
+ <string>cv86.pass.glif</string>
+ <key>cv86.fail</key>
+ <string>cv86.fail.glif</string>
+ <key>cv86.default</key>
+ <string>cv86.default.glif</string>
+ <key>cv86.alt1</key>
+ <string>cv86.alt1.glif</string>
+ <key>cv86.alt2</key>
+ <string>cv86.alt2.glif</string>
+ <key>cv86.alt3</key>
+ <string>cv86.alt3.glif</string>
+ <key>cv87.pass</key>
+ <string>cv87.pass.glif</string>
+ <key>cv87.fail</key>
+ <string>cv87.fail.glif</string>
+ <key>cv87.default</key>
+ <string>cv87.default.glif</string>
+ <key>cv87.alt1</key>
+ <string>cv87.alt1.glif</string>
+ <key>cv87.alt2</key>
+ <string>cv87.alt2.glif</string>
+ <key>cv87.alt3</key>
+ <string>cv87.alt3.glif</string>
+ <key>cv88.pass</key>
+ <string>cv88.pass.glif</string>
+ <key>cv88.fail</key>
+ <string>cv88.fail.glif</string>
+ <key>cv88.default</key>
+ <string>cv88.default.glif</string>
+ <key>cv88.alt1</key>
+ <string>cv88.alt1.glif</string>
+ <key>cv88.alt2</key>
+ <string>cv88.alt2.glif</string>
+ <key>cv88.alt3</key>
+ <string>cv88.alt3.glif</string>
+ <key>cv89.pass</key>
+ <string>cv89.pass.glif</string>
+ <key>cv89.fail</key>
+ <string>cv89.fail.glif</string>
+ <key>cv89.default</key>
+ <string>cv89.default.glif</string>
+ <key>cv89.alt1</key>
+ <string>cv89.alt1.glif</string>
+ <key>cv89.alt2</key>
+ <string>cv89.alt2.glif</string>
+ <key>cv89.alt3</key>
+ <string>cv89.alt3.glif</string>
+ <key>cv90.pass</key>
+ <string>cv90.pass.glif</string>
+ <key>cv90.fail</key>
+ <string>cv90.fail.glif</string>
+ <key>cv90.default</key>
+ <string>cv90.default.glif</string>
+ <key>cv90.alt1</key>
+ <string>cv90.alt1.glif</string>
+ <key>cv90.alt2</key>
+ <string>cv90.alt2.glif</string>
+ <key>cv90.alt3</key>
+ <string>cv90.alt3.glif</string>
+ <key>cv91.pass</key>
+ <string>cv91.pass.glif</string>
+ <key>cv91.fail</key>
+ <string>cv91.fail.glif</string>
+ <key>cv91.default</key>
+ <string>cv91.default.glif</string>
+ <key>cv91.alt1</key>
+ <string>cv91.alt1.glif</string>
+ <key>cv91.alt2</key>
+ <string>cv91.alt2.glif</string>
+ <key>cv91.alt3</key>
+ <string>cv91.alt3.glif</string>
+ <key>cv92.pass</key>
+ <string>cv92.pass.glif</string>
+ <key>cv92.fail</key>
+ <string>cv92.fail.glif</string>
+ <key>cv92.default</key>
+ <string>cv92.default.glif</string>
+ <key>cv92.alt1</key>
+ <string>cv92.alt1.glif</string>
+ <key>cv92.alt2</key>
+ <string>cv92.alt2.glif</string>
+ <key>cv92.alt3</key>
+ <string>cv92.alt3.glif</string>
+ <key>cv93.pass</key>
+ <string>cv93.pass.glif</string>
+ <key>cv93.fail</key>
+ <string>cv93.fail.glif</string>
+ <key>cv93.default</key>
+ <string>cv93.default.glif</string>
+ <key>cv93.alt1</key>
+ <string>cv93.alt1.glif</string>
+ <key>cv93.alt2</key>
+ <string>cv93.alt2.glif</string>
+ <key>cv93.alt3</key>
+ <string>cv93.alt3.glif</string>
+ <key>cv94.pass</key>
+ <string>cv94.pass.glif</string>
+ <key>cv94.fail</key>
+ <string>cv94.fail.glif</string>
+ <key>cv94.default</key>
+ <string>cv94.default.glif</string>
+ <key>cv94.alt1</key>
+ <string>cv94.alt1.glif</string>
+ <key>cv94.alt2</key>
+ <string>cv94.alt2.glif</string>
+ <key>cv94.alt3</key>
+ <string>cv94.alt3.glif</string>
+ <key>cv95.pass</key>
+ <string>cv95.pass.glif</string>
+ <key>cv95.fail</key>
+ <string>cv95.fail.glif</string>
+ <key>cv95.default</key>
+ <string>cv95.default.glif</string>
+ <key>cv95.alt1</key>
+ <string>cv95.alt1.glif</string>
+ <key>cv95.alt2</key>
+ <string>cv95.alt2.glif</string>
+ <key>cv95.alt3</key>
+ <string>cv95.alt3.glif</string>
+ <key>cv96.pass</key>
+ <string>cv96.pass.glif</string>
+ <key>cv96.fail</key>
+ <string>cv96.fail.glif</string>
+ <key>cv96.default</key>
+ <string>cv96.default.glif</string>
+ <key>cv96.alt1</key>
+ <string>cv96.alt1.glif</string>
+ <key>cv96.alt2</key>
+ <string>cv96.alt2.glif</string>
+ <key>cv96.alt3</key>
+ <string>cv96.alt3.glif</string>
+ <key>cv97.pass</key>
+ <string>cv97.pass.glif</string>
+ <key>cv97.fail</key>
+ <string>cv97.fail.glif</string>
+ <key>cv97.default</key>
+ <string>cv97.default.glif</string>
+ <key>cv97.alt1</key>
+ <string>cv97.alt1.glif</string>
+ <key>cv97.alt2</key>
+ <string>cv97.alt2.glif</string>
+ <key>cv97.alt3</key>
+ <string>cv97.alt3.glif</string>
+ <key>cv98.pass</key>
+ <string>cv98.pass.glif</string>
+ <key>cv98.fail</key>
+ <string>cv98.fail.glif</string>
+ <key>cv98.default</key>
+ <string>cv98.default.glif</string>
+ <key>cv98.alt1</key>
+ <string>cv98.alt1.glif</string>
+ <key>cv98.alt2</key>
+ <string>cv98.alt2.glif</string>
+ <key>cv98.alt3</key>
+ <string>cv98.alt3.glif</string>
+ <key>cv99.pass</key>
+ <string>cv99.pass.glif</string>
+ <key>cv99.fail</key>
+ <string>cv99.fail.glif</string>
+ <key>cv99.default</key>
+ <string>cv99.default.glif</string>
+ <key>cv99.alt1</key>
+ <string>cv99.alt1.glif</string>
+ <key>cv99.alt2</key>
+ <string>cv99.alt2.glif</string>
+ <key>cv99.alt3</key>
+ <string>cv99.alt3.glif</string>
+ <key>dist.pass</key>
+ <string>dist.pass.glif</string>
+ <key>dist.fail</key>
+ <string>dist.fail.glif</string>
+ <key>dist.default</key>
+ <string>dist.default.glif</string>
+ <key>dist.alt1</key>
+ <string>dist.alt1.glif</string>
+ <key>dist.alt2</key>
+ <string>dist.alt2.glif</string>
+ <key>dist.alt3</key>
+ <string>dist.alt3.glif</string>
+ <key>dlig.pass</key>
+ <string>dlig.pass.glif</string>
+ <key>dlig.fail</key>
+ <string>dlig.fail.glif</string>
+ <key>dlig.default</key>
+ <string>dlig.default.glif</string>
+ <key>dlig.alt1</key>
+ <string>dlig.alt1.glif</string>
+ <key>dlig.alt2</key>
+ <string>dlig.alt2.glif</string>
+ <key>dlig.alt3</key>
+ <string>dlig.alt3.glif</string>
+ <key>dnom.pass</key>
+ <string>dnom.pass.glif</string>
+ <key>dnom.fail</key>
+ <string>dnom.fail.glif</string>
+ <key>dnom.default</key>
+ <string>dnom.default.glif</string>
+ <key>dnom.alt1</key>
+ <string>dnom.alt1.glif</string>
+ <key>dnom.alt2</key>
+ <string>dnom.alt2.glif</string>
+ <key>dnom.alt3</key>
+ <string>dnom.alt3.glif</string>
+ <key>expt.pass</key>
+ <string>expt.pass.glif</string>
+ <key>expt.fail</key>
+ <string>expt.fail.glif</string>
+ <key>expt.default</key>
+ <string>expt.default.glif</string>
+ <key>expt.alt1</key>
+ <string>expt.alt1.glif</string>
+ <key>expt.alt2</key>
+ <string>expt.alt2.glif</string>
+ <key>expt.alt3</key>
+ <string>expt.alt3.glif</string>
+ <key>falt.pass</key>
+ <string>falt.pass.glif</string>
+ <key>falt.fail</key>
+ <string>falt.fail.glif</string>
+ <key>falt.default</key>
+ <string>falt.default.glif</string>
+ <key>falt.alt1</key>
+ <string>falt.alt1.glif</string>
+ <key>falt.alt2</key>
+ <string>falt.alt2.glif</string>
+ <key>falt.alt3</key>
+ <string>falt.alt3.glif</string>
+ <key>fin2.pass</key>
+ <string>fin2.pass.glif</string>
+ <key>fin2.fail</key>
+ <string>fin2.fail.glif</string>
+ <key>fin2.default</key>
+ <string>fin2.default.glif</string>
+ <key>fin2.alt1</key>
+ <string>fin2.alt1.glif</string>
+ <key>fin2.alt2</key>
+ <string>fin2.alt2.glif</string>
+ <key>fin2.alt3</key>
+ <string>fin2.alt3.glif</string>
+ <key>fin3.pass</key>
+ <string>fin3.pass.glif</string>
+ <key>fin3.fail</key>
+ <string>fin3.fail.glif</string>
+ <key>fin3.default</key>
+ <string>fin3.default.glif</string>
+ <key>fin3.alt1</key>
+ <string>fin3.alt1.glif</string>
+ <key>fin3.alt2</key>
+ <string>fin3.alt2.glif</string>
+ <key>fin3.alt3</key>
+ <string>fin3.alt3.glif</string>
+ <key>fina.pass</key>
+ <string>fina.pass.glif</string>
+ <key>fina.fail</key>
+ <string>fina.fail.glif</string>
+ <key>fina.default</key>
+ <string>fina.default.glif</string>
+ <key>fina.alt1</key>
+ <string>fina.alt1.glif</string>
+ <key>fina.alt2</key>
+ <string>fina.alt2.glif</string>
+ <key>fina.alt3</key>
+ <string>fina.alt3.glif</string>
+ <key>frac.pass</key>
+ <string>frac.pass.glif</string>
+ <key>frac.fail</key>
+ <string>frac.fail.glif</string>
+ <key>frac.default</key>
+ <string>frac.default.glif</string>
+ <key>frac.alt1</key>
+ <string>frac.alt1.glif</string>
+ <key>frac.alt2</key>
+ <string>frac.alt2.glif</string>
+ <key>frac.alt3</key>
+ <string>frac.alt3.glif</string>
+ <key>fwid.pass</key>
+ <string>fwid.pass.glif</string>
+ <key>fwid.fail</key>
+ <string>fwid.fail.glif</string>
+ <key>fwid.default</key>
+ <string>fwid.default.glif</string>
+ <key>fwid.alt1</key>
+ <string>fwid.alt1.glif</string>
+ <key>fwid.alt2</key>
+ <string>fwid.alt2.glif</string>
+ <key>fwid.alt3</key>
+ <string>fwid.alt3.glif</string>
+ <key>half.pass</key>
+ <string>half.pass.glif</string>
+ <key>half.fail</key>
+ <string>half.fail.glif</string>
+ <key>half.default</key>
+ <string>half.default.glif</string>
+ <key>half.alt1</key>
+ <string>half.alt1.glif</string>
+ <key>half.alt2</key>
+ <string>half.alt2.glif</string>
+ <key>half.alt3</key>
+ <string>half.alt3.glif</string>
+ <key>haln.pass</key>
+ <string>haln.pass.glif</string>
+ <key>haln.fail</key>
+ <string>haln.fail.glif</string>
+ <key>haln.default</key>
+ <string>haln.default.glif</string>
+ <key>haln.alt1</key>
+ <string>haln.alt1.glif</string>
+ <key>haln.alt2</key>
+ <string>haln.alt2.glif</string>
+ <key>haln.alt3</key>
+ <string>haln.alt3.glif</string>
+ <key>halt.pass</key>
+ <string>halt.pass.glif</string>
+ <key>halt.fail</key>
+ <string>halt.fail.glif</string>
+ <key>halt.default</key>
+ <string>halt.default.glif</string>
+ <key>halt.alt1</key>
+ <string>halt.alt1.glif</string>
+ <key>halt.alt2</key>
+ <string>halt.alt2.glif</string>
+ <key>halt.alt3</key>
+ <string>halt.alt3.glif</string>
+ <key>hist.pass</key>
+ <string>hist.pass.glif</string>
+ <key>hist.fail</key>
+ <string>hist.fail.glif</string>
+ <key>hist.default</key>
+ <string>hist.default.glif</string>
+ <key>hist.alt1</key>
+ <string>hist.alt1.glif</string>
+ <key>hist.alt2</key>
+ <string>hist.alt2.glif</string>
+ <key>hist.alt3</key>
+ <string>hist.alt3.glif</string>
+ <key>hkna.pass</key>
+ <string>hkna.pass.glif</string>
+ <key>hkna.fail</key>
+ <string>hkna.fail.glif</string>
+ <key>hkna.default</key>
+ <string>hkna.default.glif</string>
+ <key>hkna.alt1</key>
+ <string>hkna.alt1.glif</string>
+ <key>hkna.alt2</key>
+ <string>hkna.alt2.glif</string>
+ <key>hkna.alt3</key>
+ <string>hkna.alt3.glif</string>
+ <key>hlig.pass</key>
+ <string>hlig.pass.glif</string>
+ <key>hlig.fail</key>
+ <string>hlig.fail.glif</string>
+ <key>hlig.default</key>
+ <string>hlig.default.glif</string>
+ <key>hlig.alt1</key>
+ <string>hlig.alt1.glif</string>
+ <key>hlig.alt2</key>
+ <string>hlig.alt2.glif</string>
+ <key>hlig.alt3</key>
+ <string>hlig.alt3.glif</string>
+ <key>hngl.pass</key>
+ <string>hngl.pass.glif</string>
+ <key>hngl.fail</key>
+ <string>hngl.fail.glif</string>
+ <key>hngl.default</key>
+ <string>hngl.default.glif</string>
+ <key>hngl.alt1</key>
+ <string>hngl.alt1.glif</string>
+ <key>hngl.alt2</key>
+ <string>hngl.alt2.glif</string>
+ <key>hngl.alt3</key>
+ <string>hngl.alt3.glif</string>
+ <key>hojo.pass</key>
+ <string>hojo.pass.glif</string>
+ <key>hojo.fail</key>
+ <string>hojo.fail.glif</string>
+ <key>hojo.default</key>
+ <string>hojo.default.glif</string>
+ <key>hojo.alt1</key>
+ <string>hojo.alt1.glif</string>
+ <key>hojo.alt2</key>
+ <string>hojo.alt2.glif</string>
+ <key>hojo.alt3</key>
+ <string>hojo.alt3.glif</string>
+ <key>hwid.pass</key>
+ <string>hwid.pass.glif</string>
+ <key>hwid.fail</key>
+ <string>hwid.fail.glif</string>
+ <key>hwid.default</key>
+ <string>hwid.default.glif</string>
+ <key>hwid.alt1</key>
+ <string>hwid.alt1.glif</string>
+ <key>hwid.alt2</key>
+ <string>hwid.alt2.glif</string>
+ <key>hwid.alt3</key>
+ <string>hwid.alt3.glif</string>
+ <key>init.pass</key>
+ <string>init.pass.glif</string>
+ <key>init.fail</key>
+ <string>init.fail.glif</string>
+ <key>init.default</key>
+ <string>init.default.glif</string>
+ <key>init.alt1</key>
+ <string>init.alt1.glif</string>
+ <key>init.alt2</key>
+ <string>init.alt2.glif</string>
+ <key>init.alt3</key>
+ <string>init.alt3.glif</string>
+ <key>isol.pass</key>
+ <string>isol.pass.glif</string>
+ <key>isol.fail</key>
+ <string>isol.fail.glif</string>
+ <key>isol.default</key>
+ <string>isol.default.glif</string>
+ <key>isol.alt1</key>
+ <string>isol.alt1.glif</string>
+ <key>isol.alt2</key>
+ <string>isol.alt2.glif</string>
+ <key>isol.alt3</key>
+ <string>isol.alt3.glif</string>
+ <key>ital.pass</key>
+ <string>ital.pass.glif</string>
+ <key>ital.fail</key>
+ <string>ital.fail.glif</string>
+ <key>ital.default</key>
+ <string>ital.default.glif</string>
+ <key>ital.alt1</key>
+ <string>ital.alt1.glif</string>
+ <key>ital.alt2</key>
+ <string>ital.alt2.glif</string>
+ <key>ital.alt3</key>
+ <string>ital.alt3.glif</string>
+ <key>jalt.pass</key>
+ <string>jalt.pass.glif</string>
+ <key>jalt.fail</key>
+ <string>jalt.fail.glif</string>
+ <key>jalt.default</key>
+ <string>jalt.default.glif</string>
+ <key>jalt.alt1</key>
+ <string>jalt.alt1.glif</string>
+ <key>jalt.alt2</key>
+ <string>jalt.alt2.glif</string>
+ <key>jalt.alt3</key>
+ <string>jalt.alt3.glif</string>
+ <key>jp04.pass</key>
+ <string>jp04.pass.glif</string>
+ <key>jp04.fail</key>
+ <string>jp04.fail.glif</string>
+ <key>jp04.default</key>
+ <string>jp04.default.glif</string>
+ <key>jp04.alt1</key>
+ <string>jp04.alt1.glif</string>
+ <key>jp04.alt2</key>
+ <string>jp04.alt2.glif</string>
+ <key>jp04.alt3</key>
+ <string>jp04.alt3.glif</string>
+ <key>jp78.pass</key>
+ <string>jp78.pass.glif</string>
+ <key>jp78.fail</key>
+ <string>jp78.fail.glif</string>
+ <key>jp78.default</key>
+ <string>jp78.default.glif</string>
+ <key>jp78.alt1</key>
+ <string>jp78.alt1.glif</string>
+ <key>jp78.alt2</key>
+ <string>jp78.alt2.glif</string>
+ <key>jp78.alt3</key>
+ <string>jp78.alt3.glif</string>
+ <key>jp83.pass</key>
+ <string>jp83.pass.glif</string>
+ <key>jp83.fail</key>
+ <string>jp83.fail.glif</string>
+ <key>jp83.default</key>
+ <string>jp83.default.glif</string>
+ <key>jp83.alt1</key>
+ <string>jp83.alt1.glif</string>
+ <key>jp83.alt2</key>
+ <string>jp83.alt2.glif</string>
+ <key>jp83.alt3</key>
+ <string>jp83.alt3.glif</string>
+ <key>jp90.pass</key>
+ <string>jp90.pass.glif</string>
+ <key>jp90.fail</key>
+ <string>jp90.fail.glif</string>
+ <key>jp90.default</key>
+ <string>jp90.default.glif</string>
+ <key>jp90.alt1</key>
+ <string>jp90.alt1.glif</string>
+ <key>jp90.alt2</key>
+ <string>jp90.alt2.glif</string>
+ <key>jp90.alt3</key>
+ <string>jp90.alt3.glif</string>
+ <key>kern.pass</key>
+ <string>kern.pass.glif</string>
+ <key>kern.fail</key>
+ <string>kern.fail.glif</string>
+ <key>kern.default</key>
+ <string>kern.default.glif</string>
+ <key>kern.alt1</key>
+ <string>kern.alt1.glif</string>
+ <key>kern.alt2</key>
+ <string>kern.alt2.glif</string>
+ <key>kern.alt3</key>
+ <string>kern.alt3.glif</string>
+ <key>lfbd.pass</key>
+ <string>lfbd.pass.glif</string>
+ <key>lfbd.fail</key>
+ <string>lfbd.fail.glif</string>
+ <key>lfbd.default</key>
+ <string>lfbd.default.glif</string>
+ <key>lfbd.alt1</key>
+ <string>lfbd.alt1.glif</string>
+ <key>lfbd.alt2</key>
+ <string>lfbd.alt2.glif</string>
+ <key>lfbd.alt3</key>
+ <string>lfbd.alt3.glif</string>
+ <key>liga.pass</key>
+ <string>liga.pass.glif</string>
+ <key>liga.fail</key>
+ <string>liga.fail.glif</string>
+ <key>liga.default</key>
+ <string>liga.default.glif</string>
+ <key>liga.alt1</key>
+ <string>liga.alt1.glif</string>
+ <key>liga.alt2</key>
+ <string>liga.alt2.glif</string>
+ <key>liga.alt3</key>
+ <string>liga.alt3.glif</string>
+ <key>ljmo.pass</key>
+ <string>ljmo.pass.glif</string>
+ <key>ljmo.fail</key>
+ <string>ljmo.fail.glif</string>
+ <key>ljmo.default</key>
+ <string>ljmo.default.glif</string>
+ <key>ljmo.alt1</key>
+ <string>ljmo.alt1.glif</string>
+ <key>ljmo.alt2</key>
+ <string>ljmo.alt2.glif</string>
+ <key>ljmo.alt3</key>
+ <string>ljmo.alt3.glif</string>
+ <key>lnum.pass</key>
+ <string>lnum.pass.glif</string>
+ <key>lnum.fail</key>
+ <string>lnum.fail.glif</string>
+ <key>lnum.default</key>
+ <string>lnum.default.glif</string>
+ <key>lnum.alt1</key>
+ <string>lnum.alt1.glif</string>
+ <key>lnum.alt2</key>
+ <string>lnum.alt2.glif</string>
+ <key>lnum.alt3</key>
+ <string>lnum.alt3.glif</string>
+ <key>locl.pass</key>
+ <string>locl.pass.glif</string>
+ <key>locl.fail</key>
+ <string>locl.fail.glif</string>
+ <key>locl.default</key>
+ <string>locl.default.glif</string>
+ <key>locl.alt1</key>
+ <string>locl.alt1.glif</string>
+ <key>locl.alt2</key>
+ <string>locl.alt2.glif</string>
+ <key>locl.alt3</key>
+ <string>locl.alt3.glif</string>
+ <key>ltra.pass</key>
+ <string>ltra.pass.glif</string>
+ <key>ltra.fail</key>
+ <string>ltra.fail.glif</string>
+ <key>ltra.default</key>
+ <string>ltra.default.glif</string>
+ <key>ltra.alt1</key>
+ <string>ltra.alt1.glif</string>
+ <key>ltra.alt2</key>
+ <string>ltra.alt2.glif</string>
+ <key>ltra.alt3</key>
+ <string>ltra.alt3.glif</string>
+ <key>ltrm.pass</key>
+ <string>ltrm.pass.glif</string>
+ <key>ltrm.fail</key>
+ <string>ltrm.fail.glif</string>
+ <key>ltrm.default</key>
+ <string>ltrm.default.glif</string>
+ <key>ltrm.alt1</key>
+ <string>ltrm.alt1.glif</string>
+ <key>ltrm.alt2</key>
+ <string>ltrm.alt2.glif</string>
+ <key>ltrm.alt3</key>
+ <string>ltrm.alt3.glif</string>
+ <key>mark.pass</key>
+ <string>mark.pass.glif</string>
+ <key>mark.fail</key>
+ <string>mark.fail.glif</string>
+ <key>mark.default</key>
+ <string>mark.default.glif</string>
+ <key>mark.alt1</key>
+ <string>mark.alt1.glif</string>
+ <key>mark.alt2</key>
+ <string>mark.alt2.glif</string>
+ <key>mark.alt3</key>
+ <string>mark.alt3.glif</string>
+ <key>med2.pass</key>
+ <string>med2.pass.glif</string>
+ <key>med2.fail</key>
+ <string>med2.fail.glif</string>
+ <key>med2.default</key>
+ <string>med2.default.glif</string>
+ <key>med2.alt1</key>
+ <string>med2.alt1.glif</string>
+ <key>med2.alt2</key>
+ <string>med2.alt2.glif</string>
+ <key>med2.alt3</key>
+ <string>med2.alt3.glif</string>
+ <key>medi.pass</key>
+ <string>medi.pass.glif</string>
+ <key>medi.fail</key>
+ <string>medi.fail.glif</string>
+ <key>medi.default</key>
+ <string>medi.default.glif</string>
+ <key>medi.alt1</key>
+ <string>medi.alt1.glif</string>
+ <key>medi.alt2</key>
+ <string>medi.alt2.glif</string>
+ <key>medi.alt3</key>
+ <string>medi.alt3.glif</string>
+ <key>mgrk.pass</key>
+ <string>mgrk.pass.glif</string>
+ <key>mgrk.fail</key>
+ <string>mgrk.fail.glif</string>
+ <key>mgrk.default</key>
+ <string>mgrk.default.glif</string>
+ <key>mgrk.alt1</key>
+ <string>mgrk.alt1.glif</string>
+ <key>mgrk.alt2</key>
+ <string>mgrk.alt2.glif</string>
+ <key>mgrk.alt3</key>
+ <string>mgrk.alt3.glif</string>
+ <key>mkmk.pass</key>
+ <string>mkmk.pass.glif</string>
+ <key>mkmk.fail</key>
+ <string>mkmk.fail.glif</string>
+ <key>mkmk.default</key>
+ <string>mkmk.default.glif</string>
+ <key>mkmk.alt1</key>
+ <string>mkmk.alt1.glif</string>
+ <key>mkmk.alt2</key>
+ <string>mkmk.alt2.glif</string>
+ <key>mkmk.alt3</key>
+ <string>mkmk.alt3.glif</string>
+ <key>mset.pass</key>
+ <string>mset.pass.glif</string>
+ <key>mset.fail</key>
+ <string>mset.fail.glif</string>
+ <key>mset.default</key>
+ <string>mset.default.glif</string>
+ <key>mset.alt1</key>
+ <string>mset.alt1.glif</string>
+ <key>mset.alt2</key>
+ <string>mset.alt2.glif</string>
+ <key>mset.alt3</key>
+ <string>mset.alt3.glif</string>
+ <key>nalt.pass</key>
+ <string>nalt.pass.glif</string>
+ <key>nalt.fail</key>
+ <string>nalt.fail.glif</string>
+ <key>nalt.default</key>
+ <string>nalt.default.glif</string>
+ <key>nalt.alt1</key>
+ <string>nalt.alt1.glif</string>
+ <key>nalt.alt2</key>
+ <string>nalt.alt2.glif</string>
+ <key>nalt.alt3</key>
+ <string>nalt.alt3.glif</string>
+ <key>nlck.pass</key>
+ <string>nlck.pass.glif</string>
+ <key>nlck.fail</key>
+ <string>nlck.fail.glif</string>
+ <key>nlck.default</key>
+ <string>nlck.default.glif</string>
+ <key>nlck.alt1</key>
+ <string>nlck.alt1.glif</string>
+ <key>nlck.alt2</key>
+ <string>nlck.alt2.glif</string>
+ <key>nlck.alt3</key>
+ <string>nlck.alt3.glif</string>
+ <key>nukt.pass</key>
+ <string>nukt.pass.glif</string>
+ <key>nukt.fail</key>
+ <string>nukt.fail.glif</string>
+ <key>nukt.default</key>
+ <string>nukt.default.glif</string>
+ <key>nukt.alt1</key>
+ <string>nukt.alt1.glif</string>
+ <key>nukt.alt2</key>
+ <string>nukt.alt2.glif</string>
+ <key>nukt.alt3</key>
+ <string>nukt.alt3.glif</string>
+ <key>numr.pass</key>
+ <string>numr.pass.glif</string>
+ <key>numr.fail</key>
+ <string>numr.fail.glif</string>
+ <key>numr.default</key>
+ <string>numr.default.glif</string>
+ <key>numr.alt1</key>
+ <string>numr.alt1.glif</string>
+ <key>numr.alt2</key>
+ <string>numr.alt2.glif</string>
+ <key>numr.alt3</key>
+ <string>numr.alt3.glif</string>
+ <key>onum.pass</key>
+ <string>onum.pass.glif</string>
+ <key>onum.fail</key>
+ <string>onum.fail.glif</string>
+ <key>onum.default</key>
+ <string>onum.default.glif</string>
+ <key>onum.alt1</key>
+ <string>onum.alt1.glif</string>
+ <key>onum.alt2</key>
+ <string>onum.alt2.glif</string>
+ <key>onum.alt3</key>
+ <string>onum.alt3.glif</string>
+ <key>opbd.pass</key>
+ <string>opbd.pass.glif</string>
+ <key>opbd.fail</key>
+ <string>opbd.fail.glif</string>
+ <key>opbd.default</key>
+ <string>opbd.default.glif</string>
+ <key>opbd.alt1</key>
+ <string>opbd.alt1.glif</string>
+ <key>opbd.alt2</key>
+ <string>opbd.alt2.glif</string>
+ <key>opbd.alt3</key>
+ <string>opbd.alt3.glif</string>
+ <key>ordn.pass</key>
+ <string>ordn.pass.glif</string>
+ <key>ordn.fail</key>
+ <string>ordn.fail.glif</string>
+ <key>ordn.default</key>
+ <string>ordn.default.glif</string>
+ <key>ordn.alt1</key>
+ <string>ordn.alt1.glif</string>
+ <key>ordn.alt2</key>
+ <string>ordn.alt2.glif</string>
+ <key>ordn.alt3</key>
+ <string>ordn.alt3.glif</string>
+ <key>ornm.pass</key>
+ <string>ornm.pass.glif</string>
+ <key>ornm.fail</key>
+ <string>ornm.fail.glif</string>
+ <key>ornm.default</key>
+ <string>ornm.default.glif</string>
+ <key>ornm.alt1</key>
+ <string>ornm.alt1.glif</string>
+ <key>ornm.alt2</key>
+ <string>ornm.alt2.glif</string>
+ <key>ornm.alt3</key>
+ <string>ornm.alt3.glif</string>
+ <key>palt.pass</key>
+ <string>palt.pass.glif</string>
+ <key>palt.fail</key>
+ <string>palt.fail.glif</string>
+ <key>palt.default</key>
+ <string>palt.default.glif</string>
+ <key>palt.alt1</key>
+ <string>palt.alt1.glif</string>
+ <key>palt.alt2</key>
+ <string>palt.alt2.glif</string>
+ <key>palt.alt3</key>
+ <string>palt.alt3.glif</string>
+ <key>pcap.pass</key>
+ <string>pcap.pass.glif</string>
+ <key>pcap.fail</key>
+ <string>pcap.fail.glif</string>
+ <key>pcap.default</key>
+ <string>pcap.default.glif</string>
+ <key>pcap.alt1</key>
+ <string>pcap.alt1.glif</string>
+ <key>pcap.alt2</key>
+ <string>pcap.alt2.glif</string>
+ <key>pcap.alt3</key>
+ <string>pcap.alt3.glif</string>
+ <key>pkna.pass</key>
+ <string>pkna.pass.glif</string>
+ <key>pkna.fail</key>
+ <string>pkna.fail.glif</string>
+ <key>pkna.default</key>
+ <string>pkna.default.glif</string>
+ <key>pkna.alt1</key>
+ <string>pkna.alt1.glif</string>
+ <key>pkna.alt2</key>
+ <string>pkna.alt2.glif</string>
+ <key>pkna.alt3</key>
+ <string>pkna.alt3.glif</string>
+ <key>pnum.pass</key>
+ <string>pnum.pass.glif</string>
+ <key>pnum.fail</key>
+ <string>pnum.fail.glif</string>
+ <key>pnum.default</key>
+ <string>pnum.default.glif</string>
+ <key>pnum.alt1</key>
+ <string>pnum.alt1.glif</string>
+ <key>pnum.alt2</key>
+ <string>pnum.alt2.glif</string>
+ <key>pnum.alt3</key>
+ <string>pnum.alt3.glif</string>
+ <key>pref.pass</key>
+ <string>pref.pass.glif</string>
+ <key>pref.fail</key>
+ <string>pref.fail.glif</string>
+ <key>pref.default</key>
+ <string>pref.default.glif</string>
+ <key>pref.alt1</key>
+ <string>pref.alt1.glif</string>
+ <key>pref.alt2</key>
+ <string>pref.alt2.glif</string>
+ <key>pref.alt3</key>
+ <string>pref.alt3.glif</string>
+ <key>pres.pass</key>
+ <string>pres.pass.glif</string>
+ <key>pres.fail</key>
+ <string>pres.fail.glif</string>
+ <key>pres.default</key>
+ <string>pres.default.glif</string>
+ <key>pres.alt1</key>
+ <string>pres.alt1.glif</string>
+ <key>pres.alt2</key>
+ <string>pres.alt2.glif</string>
+ <key>pres.alt3</key>
+ <string>pres.alt3.glif</string>
+ <key>pstf.pass</key>
+ <string>pstf.pass.glif</string>
+ <key>pstf.fail</key>
+ <string>pstf.fail.glif</string>
+ <key>pstf.default</key>
+ <string>pstf.default.glif</string>
+ <key>pstf.alt1</key>
+ <string>pstf.alt1.glif</string>
+ <key>pstf.alt2</key>
+ <string>pstf.alt2.glif</string>
+ <key>pstf.alt3</key>
+ <string>pstf.alt3.glif</string>
+ <key>psts.pass</key>
+ <string>psts.pass.glif</string>
+ <key>psts.fail</key>
+ <string>psts.fail.glif</string>
+ <key>psts.default</key>
+ <string>psts.default.glif</string>
+ <key>psts.alt1</key>
+ <string>psts.alt1.glif</string>
+ <key>psts.alt2</key>
+ <string>psts.alt2.glif</string>
+ <key>psts.alt3</key>
+ <string>psts.alt3.glif</string>
+ <key>pwid.pass</key>
+ <string>pwid.pass.glif</string>
+ <key>pwid.fail</key>
+ <string>pwid.fail.glif</string>
+ <key>pwid.default</key>
+ <string>pwid.default.glif</string>
+ <key>pwid.alt1</key>
+ <string>pwid.alt1.glif</string>
+ <key>pwid.alt2</key>
+ <string>pwid.alt2.glif</string>
+ <key>pwid.alt3</key>
+ <string>pwid.alt3.glif</string>
+ <key>qwid.pass</key>
+ <string>qwid.pass.glif</string>
+ <key>qwid.fail</key>
+ <string>qwid.fail.glif</string>
+ <key>qwid.default</key>
+ <string>qwid.default.glif</string>
+ <key>qwid.alt1</key>
+ <string>qwid.alt1.glif</string>
+ <key>qwid.alt2</key>
+ <string>qwid.alt2.glif</string>
+ <key>qwid.alt3</key>
+ <string>qwid.alt3.glif</string>
+ <key>rand.pass</key>
+ <string>rand.pass.glif</string>
+ <key>rand.fail</key>
+ <string>rand.fail.glif</string>
+ <key>rand.default</key>
+ <string>rand.default.glif</string>
+ <key>rand.alt1</key>
+ <string>rand.alt1.glif</string>
+ <key>rand.alt2</key>
+ <string>rand.alt2.glif</string>
+ <key>rand.alt3</key>
+ <string>rand.alt3.glif</string>
+ <key>rkrf.pass</key>
+ <string>rkrf.pass.glif</string>
+ <key>rkrf.fail</key>
+ <string>rkrf.fail.glif</string>
+ <key>rkrf.default</key>
+ <string>rkrf.default.glif</string>
+ <key>rkrf.alt1</key>
+ <string>rkrf.alt1.glif</string>
+ <key>rkrf.alt2</key>
+ <string>rkrf.alt2.glif</string>
+ <key>rkrf.alt3</key>
+ <string>rkrf.alt3.glif</string>
+ <key>rlig.pass</key>
+ <string>rlig.pass.glif</string>
+ <key>rlig.fail</key>
+ <string>rlig.fail.glif</string>
+ <key>rlig.default</key>
+ <string>rlig.default.glif</string>
+ <key>rlig.alt1</key>
+ <string>rlig.alt1.glif</string>
+ <key>rlig.alt2</key>
+ <string>rlig.alt2.glif</string>
+ <key>rlig.alt3</key>
+ <string>rlig.alt3.glif</string>
+ <key>rphf.pass</key>
+ <string>rphf.pass.glif</string>
+ <key>rphf.fail</key>
+ <string>rphf.fail.glif</string>
+ <key>rphf.default</key>
+ <string>rphf.default.glif</string>
+ <key>rphf.alt1</key>
+ <string>rphf.alt1.glif</string>
+ <key>rphf.alt2</key>
+ <string>rphf.alt2.glif</string>
+ <key>rphf.alt3</key>
+ <string>rphf.alt3.glif</string>
+ <key>rtbd.pass</key>
+ <string>rtbd.pass.glif</string>
+ <key>rtbd.fail</key>
+ <string>rtbd.fail.glif</string>
+ <key>rtbd.default</key>
+ <string>rtbd.default.glif</string>
+ <key>rtbd.alt1</key>
+ <string>rtbd.alt1.glif</string>
+ <key>rtbd.alt2</key>
+ <string>rtbd.alt2.glif</string>
+ <key>rtbd.alt3</key>
+ <string>rtbd.alt3.glif</string>
+ <key>rtla.pass</key>
+ <string>rtla.pass.glif</string>
+ <key>rtla.fail</key>
+ <string>rtla.fail.glif</string>
+ <key>rtla.default</key>
+ <string>rtla.default.glif</string>
+ <key>rtla.alt1</key>
+ <string>rtla.alt1.glif</string>
+ <key>rtla.alt2</key>
+ <string>rtla.alt2.glif</string>
+ <key>rtla.alt3</key>
+ <string>rtla.alt3.glif</string>
+ <key>rtlm.pass</key>
+ <string>rtlm.pass.glif</string>
+ <key>rtlm.fail</key>
+ <string>rtlm.fail.glif</string>
+ <key>rtlm.default</key>
+ <string>rtlm.default.glif</string>
+ <key>rtlm.alt1</key>
+ <string>rtlm.alt1.glif</string>
+ <key>rtlm.alt2</key>
+ <string>rtlm.alt2.glif</string>
+ <key>rtlm.alt3</key>
+ <string>rtlm.alt3.glif</string>
+ <key>ruby.pass</key>
+ <string>ruby.pass.glif</string>
+ <key>ruby.fail</key>
+ <string>ruby.fail.glif</string>
+ <key>ruby.default</key>
+ <string>ruby.default.glif</string>
+ <key>ruby.alt1</key>
+ <string>ruby.alt1.glif</string>
+ <key>ruby.alt2</key>
+ <string>ruby.alt2.glif</string>
+ <key>ruby.alt3</key>
+ <string>ruby.alt3.glif</string>
+ <key>salt.pass</key>
+ <string>salt.pass.glif</string>
+ <key>salt.fail</key>
+ <string>salt.fail.glif</string>
+ <key>salt.default</key>
+ <string>salt.default.glif</string>
+ <key>salt.alt1</key>
+ <string>salt.alt1.glif</string>
+ <key>salt.alt2</key>
+ <string>salt.alt2.glif</string>
+ <key>salt.alt3</key>
+ <string>salt.alt3.glif</string>
+ <key>sinf.pass</key>
+ <string>sinf.pass.glif</string>
+ <key>sinf.fail</key>
+ <string>sinf.fail.glif</string>
+ <key>sinf.default</key>
+ <string>sinf.default.glif</string>
+ <key>sinf.alt1</key>
+ <string>sinf.alt1.glif</string>
+ <key>sinf.alt2</key>
+ <string>sinf.alt2.glif</string>
+ <key>sinf.alt3</key>
+ <string>sinf.alt3.glif</string>
+ <key>size.pass</key>
+ <string>size.pass.glif</string>
+ <key>size.fail</key>
+ <string>size.fail.glif</string>
+ <key>size.default</key>
+ <string>size.default.glif</string>
+ <key>size.alt1</key>
+ <string>size.alt1.glif</string>
+ <key>size.alt2</key>
+ <string>size.alt2.glif</string>
+ <key>size.alt3</key>
+ <string>size.alt3.glif</string>
+ <key>smcp.pass</key>
+ <string>smcp.pass.glif</string>
+ <key>smcp.fail</key>
+ <string>smcp.fail.glif</string>
+ <key>smcp.default</key>
+ <string>smcp.default.glif</string>
+ <key>smcp.alt1</key>
+ <string>smcp.alt1.glif</string>
+ <key>smcp.alt2</key>
+ <string>smcp.alt2.glif</string>
+ <key>smcp.alt3</key>
+ <string>smcp.alt3.glif</string>
+ <key>smpl.pass</key>
+ <string>smpl.pass.glif</string>
+ <key>smpl.fail</key>
+ <string>smpl.fail.glif</string>
+ <key>smpl.default</key>
+ <string>smpl.default.glif</string>
+ <key>smpl.alt1</key>
+ <string>smpl.alt1.glif</string>
+ <key>smpl.alt2</key>
+ <string>smpl.alt2.glif</string>
+ <key>smpl.alt3</key>
+ <string>smpl.alt3.glif</string>
+ <key>ss00.pass</key>
+ <string>ss00.pass.glif</string>
+ <key>ss00.fail</key>
+ <string>ss00.fail.glif</string>
+ <key>ss00.default</key>
+ <string>ss00.default.glif</string>
+ <key>ss00.alt1</key>
+ <string>ss00.alt1.glif</string>
+ <key>ss00.alt2</key>
+ <string>ss00.alt2.glif</string>
+ <key>ss00.alt3</key>
+ <string>ss00.alt3.glif</string>
+ <key>ss01.pass</key>
+ <string>ss01.pass.glif</string>
+ <key>ss01.fail</key>
+ <string>ss01.fail.glif</string>
+ <key>ss01.default</key>
+ <string>ss01.default.glif</string>
+ <key>ss01.alt1</key>
+ <string>ss01.alt1.glif</string>
+ <key>ss01.alt2</key>
+ <string>ss01.alt2.glif</string>
+ <key>ss01.alt3</key>
+ <string>ss01.alt3.glif</string>
+ <key>ss02.pass</key>
+ <string>ss02.pass.glif</string>
+ <key>ss02.fail</key>
+ <string>ss02.fail.glif</string>
+ <key>ss02.default</key>
+ <string>ss02.default.glif</string>
+ <key>ss02.alt1</key>
+ <string>ss02.alt1.glif</string>
+ <key>ss02.alt2</key>
+ <string>ss02.alt2.glif</string>
+ <key>ss02.alt3</key>
+ <string>ss02.alt3.glif</string>
+ <key>ss03.pass</key>
+ <string>ss03.pass.glif</string>
+ <key>ss03.fail</key>
+ <string>ss03.fail.glif</string>
+ <key>ss03.default</key>
+ <string>ss03.default.glif</string>
+ <key>ss03.alt1</key>
+ <string>ss03.alt1.glif</string>
+ <key>ss03.alt2</key>
+ <string>ss03.alt2.glif</string>
+ <key>ss03.alt3</key>
+ <string>ss03.alt3.glif</string>
+ <key>ss04.pass</key>
+ <string>ss04.pass.glif</string>
+ <key>ss04.fail</key>
+ <string>ss04.fail.glif</string>
+ <key>ss04.default</key>
+ <string>ss04.default.glif</string>
+ <key>ss04.alt1</key>
+ <string>ss04.alt1.glif</string>
+ <key>ss04.alt2</key>
+ <string>ss04.alt2.glif</string>
+ <key>ss04.alt3</key>
+ <string>ss04.alt3.glif</string>
+ <key>ss05.pass</key>
+ <string>ss05.pass.glif</string>
+ <key>ss05.fail</key>
+ <string>ss05.fail.glif</string>
+ <key>ss05.default</key>
+ <string>ss05.default.glif</string>
+ <key>ss05.alt1</key>
+ <string>ss05.alt1.glif</string>
+ <key>ss05.alt2</key>
+ <string>ss05.alt2.glif</string>
+ <key>ss05.alt3</key>
+ <string>ss05.alt3.glif</string>
+ <key>ss06.pass</key>
+ <string>ss06.pass.glif</string>
+ <key>ss06.fail</key>
+ <string>ss06.fail.glif</string>
+ <key>ss06.default</key>
+ <string>ss06.default.glif</string>
+ <key>ss06.alt1</key>
+ <string>ss06.alt1.glif</string>
+ <key>ss06.alt2</key>
+ <string>ss06.alt2.glif</string>
+ <key>ss06.alt3</key>
+ <string>ss06.alt3.glif</string>
+ <key>ss07.pass</key>
+ <string>ss07.pass.glif</string>
+ <key>ss07.fail</key>
+ <string>ss07.fail.glif</string>
+ <key>ss07.default</key>
+ <string>ss07.default.glif</string>
+ <key>ss07.alt1</key>
+ <string>ss07.alt1.glif</string>
+ <key>ss07.alt2</key>
+ <string>ss07.alt2.glif</string>
+ <key>ss07.alt3</key>
+ <string>ss07.alt3.glif</string>
+ <key>ss08.pass</key>
+ <string>ss08.pass.glif</string>
+ <key>ss08.fail</key>
+ <string>ss08.fail.glif</string>
+ <key>ss08.default</key>
+ <string>ss08.default.glif</string>
+ <key>ss08.alt1</key>
+ <string>ss08.alt1.glif</string>
+ <key>ss08.alt2</key>
+ <string>ss08.alt2.glif</string>
+ <key>ss08.alt3</key>
+ <string>ss08.alt3.glif</string>
+ <key>ss09.pass</key>
+ <string>ss09.pass.glif</string>
+ <key>ss09.fail</key>
+ <string>ss09.fail.glif</string>
+ <key>ss09.default</key>
+ <string>ss09.default.glif</string>
+ <key>ss09.alt1</key>
+ <string>ss09.alt1.glif</string>
+ <key>ss09.alt2</key>
+ <string>ss09.alt2.glif</string>
+ <key>ss09.alt3</key>
+ <string>ss09.alt3.glif</string>
+ <key>ss10.pass</key>
+ <string>ss10.pass.glif</string>
+ <key>ss10.fail</key>
+ <string>ss10.fail.glif</string>
+ <key>ss10.default</key>
+ <string>ss10.default.glif</string>
+ <key>ss10.alt1</key>
+ <string>ss10.alt1.glif</string>
+ <key>ss10.alt2</key>
+ <string>ss10.alt2.glif</string>
+ <key>ss10.alt3</key>
+ <string>ss10.alt3.glif</string>
+ <key>ss11.pass</key>
+ <string>ss11.pass.glif</string>
+ <key>ss11.fail</key>
+ <string>ss11.fail.glif</string>
+ <key>ss11.default</key>
+ <string>ss11.default.glif</string>
+ <key>ss11.alt1</key>
+ <string>ss11.alt1.glif</string>
+ <key>ss11.alt2</key>
+ <string>ss11.alt2.glif</string>
+ <key>ss11.alt3</key>
+ <string>ss11.alt3.glif</string>
+ <key>ss12.pass</key>
+ <string>ss12.pass.glif</string>
+ <key>ss12.fail</key>
+ <string>ss12.fail.glif</string>
+ <key>ss12.default</key>
+ <string>ss12.default.glif</string>
+ <key>ss12.alt1</key>
+ <string>ss12.alt1.glif</string>
+ <key>ss12.alt2</key>
+ <string>ss12.alt2.glif</string>
+ <key>ss12.alt3</key>
+ <string>ss12.alt3.glif</string>
+ <key>ss13.pass</key>
+ <string>ss13.pass.glif</string>
+ <key>ss13.fail</key>
+ <string>ss13.fail.glif</string>
+ <key>ss13.default</key>
+ <string>ss13.default.glif</string>
+ <key>ss13.alt1</key>
+ <string>ss13.alt1.glif</string>
+ <key>ss13.alt2</key>
+ <string>ss13.alt2.glif</string>
+ <key>ss13.alt3</key>
+ <string>ss13.alt3.glif</string>
+ <key>ss14.pass</key>
+ <string>ss14.pass.glif</string>
+ <key>ss14.fail</key>
+ <string>ss14.fail.glif</string>
+ <key>ss14.default</key>
+ <string>ss14.default.glif</string>
+ <key>ss14.alt1</key>
+ <string>ss14.alt1.glif</string>
+ <key>ss14.alt2</key>
+ <string>ss14.alt2.glif</string>
+ <key>ss14.alt3</key>
+ <string>ss14.alt3.glif</string>
+ <key>ss15.pass</key>
+ <string>ss15.pass.glif</string>
+ <key>ss15.fail</key>
+ <string>ss15.fail.glif</string>
+ <key>ss15.default</key>
+ <string>ss15.default.glif</string>
+ <key>ss15.alt1</key>
+ <string>ss15.alt1.glif</string>
+ <key>ss15.alt2</key>
+ <string>ss15.alt2.glif</string>
+ <key>ss15.alt3</key>
+ <string>ss15.alt3.glif</string>
+ <key>ss16.pass</key>
+ <string>ss16.pass.glif</string>
+ <key>ss16.fail</key>
+ <string>ss16.fail.glif</string>
+ <key>ss16.default</key>
+ <string>ss16.default.glif</string>
+ <key>ss16.alt1</key>
+ <string>ss16.alt1.glif</string>
+ <key>ss16.alt2</key>
+ <string>ss16.alt2.glif</string>
+ <key>ss16.alt3</key>
+ <string>ss16.alt3.glif</string>
+ <key>ss17.pass</key>
+ <string>ss17.pass.glif</string>
+ <key>ss17.fail</key>
+ <string>ss17.fail.glif</string>
+ <key>ss17.default</key>
+ <string>ss17.default.glif</string>
+ <key>ss17.alt1</key>
+ <string>ss17.alt1.glif</string>
+ <key>ss17.alt2</key>
+ <string>ss17.alt2.glif</string>
+ <key>ss17.alt3</key>
+ <string>ss17.alt3.glif</string>
+ <key>ss18.pass</key>
+ <string>ss18.pass.glif</string>
+ <key>ss18.fail</key>
+ <string>ss18.fail.glif</string>
+ <key>ss18.default</key>
+ <string>ss18.default.glif</string>
+ <key>ss18.alt1</key>
+ <string>ss18.alt1.glif</string>
+ <key>ss18.alt2</key>
+ <string>ss18.alt2.glif</string>
+ <key>ss18.alt3</key>
+ <string>ss18.alt3.glif</string>
+ <key>ss19.pass</key>
+ <string>ss19.pass.glif</string>
+ <key>ss19.fail</key>
+ <string>ss19.fail.glif</string>
+ <key>ss19.default</key>
+ <string>ss19.default.glif</string>
+ <key>ss19.alt1</key>
+ <string>ss19.alt1.glif</string>
+ <key>ss19.alt2</key>
+ <string>ss19.alt2.glif</string>
+ <key>ss19.alt3</key>
+ <string>ss19.alt3.glif</string>
+ <key>ss20.pass</key>
+ <string>ss20.pass.glif</string>
+ <key>ss20.fail</key>
+ <string>ss20.fail.glif</string>
+ <key>ss20.default</key>
+ <string>ss20.default.glif</string>
+ <key>ss20.alt1</key>
+ <string>ss20.alt1.glif</string>
+ <key>ss20.alt2</key>
+ <string>ss20.alt2.glif</string>
+ <key>ss20.alt3</key>
+ <string>ss20.alt3.glif</string>
+ <key>ss21.pass</key>
+ <string>ss21.pass.glif</string>
+ <key>ss21.fail</key>
+ <string>ss21.fail.glif</string>
+ <key>ss21.default</key>
+ <string>ss21.default.glif</string>
+ <key>ss21.alt1</key>
+ <string>ss21.alt1.glif</string>
+ <key>ss21.alt2</key>
+ <string>ss21.alt2.glif</string>
+ <key>ss21.alt3</key>
+ <string>ss21.alt3.glif</string>
+ <key>subs.pass</key>
+ <string>subs.pass.glif</string>
+ <key>subs.fail</key>
+ <string>subs.fail.glif</string>
+ <key>subs.default</key>
+ <string>subs.default.glif</string>
+ <key>subs.alt1</key>
+ <string>subs.alt1.glif</string>
+ <key>subs.alt2</key>
+ <string>subs.alt2.glif</string>
+ <key>subs.alt3</key>
+ <string>subs.alt3.glif</string>
+ <key>sups.pass</key>
+ <string>sups.pass.glif</string>
+ <key>sups.fail</key>
+ <string>sups.fail.glif</string>
+ <key>sups.default</key>
+ <string>sups.default.glif</string>
+ <key>sups.alt1</key>
+ <string>sups.alt1.glif</string>
+ <key>sups.alt2</key>
+ <string>sups.alt2.glif</string>
+ <key>sups.alt3</key>
+ <string>sups.alt3.glif</string>
+ <key>swsh.pass</key>
+ <string>swsh.pass.glif</string>
+ <key>swsh.fail</key>
+ <string>swsh.fail.glif</string>
+ <key>swsh.default</key>
+ <string>swsh.default.glif</string>
+ <key>swsh.alt1</key>
+ <string>swsh.alt1.glif</string>
+ <key>swsh.alt2</key>
+ <string>swsh.alt2.glif</string>
+ <key>swsh.alt3</key>
+ <string>swsh.alt3.glif</string>
+ <key>titl.pass</key>
+ <string>titl.pass.glif</string>
+ <key>titl.fail</key>
+ <string>titl.fail.glif</string>
+ <key>titl.default</key>
+ <string>titl.default.glif</string>
+ <key>titl.alt1</key>
+ <string>titl.alt1.glif</string>
+ <key>titl.alt2</key>
+ <string>titl.alt2.glif</string>
+ <key>titl.alt3</key>
+ <string>titl.alt3.glif</string>
+ <key>tjmo.pass</key>
+ <string>tjmo.pass.glif</string>
+ <key>tjmo.fail</key>
+ <string>tjmo.fail.glif</string>
+ <key>tjmo.default</key>
+ <string>tjmo.default.glif</string>
+ <key>tjmo.alt1</key>
+ <string>tjmo.alt1.glif</string>
+ <key>tjmo.alt2</key>
+ <string>tjmo.alt2.glif</string>
+ <key>tjmo.alt3</key>
+ <string>tjmo.alt3.glif</string>
+ <key>tnam.pass</key>
+ <string>tnam.pass.glif</string>
+ <key>tnam.fail</key>
+ <string>tnam.fail.glif</string>
+ <key>tnam.default</key>
+ <string>tnam.default.glif</string>
+ <key>tnam.alt1</key>
+ <string>tnam.alt1.glif</string>
+ <key>tnam.alt2</key>
+ <string>tnam.alt2.glif</string>
+ <key>tnam.alt3</key>
+ <string>tnam.alt3.glif</string>
+ <key>tnum.pass</key>
+ <string>tnum.pass.glif</string>
+ <key>tnum.fail</key>
+ <string>tnum.fail.glif</string>
+ <key>tnum.default</key>
+ <string>tnum.default.glif</string>
+ <key>tnum.alt1</key>
+ <string>tnum.alt1.glif</string>
+ <key>tnum.alt2</key>
+ <string>tnum.alt2.glif</string>
+ <key>tnum.alt3</key>
+ <string>tnum.alt3.glif</string>
+ <key>trad.pass</key>
+ <string>trad.pass.glif</string>
+ <key>trad.fail</key>
+ <string>trad.fail.glif</string>
+ <key>trad.default</key>
+ <string>trad.default.glif</string>
+ <key>trad.alt1</key>
+ <string>trad.alt1.glif</string>
+ <key>trad.alt2</key>
+ <string>trad.alt2.glif</string>
+ <key>trad.alt3</key>
+ <string>trad.alt3.glif</string>
+ <key>twid.pass</key>
+ <string>twid.pass.glif</string>
+ <key>twid.fail</key>
+ <string>twid.fail.glif</string>
+ <key>twid.default</key>
+ <string>twid.default.glif</string>
+ <key>twid.alt1</key>
+ <string>twid.alt1.glif</string>
+ <key>twid.alt2</key>
+ <string>twid.alt2.glif</string>
+ <key>twid.alt3</key>
+ <string>twid.alt3.glif</string>
+ <key>unic.pass</key>
+ <string>unic.pass.glif</string>
+ <key>unic.fail</key>
+ <string>unic.fail.glif</string>
+ <key>unic.default</key>
+ <string>unic.default.glif</string>
+ <key>unic.alt1</key>
+ <string>unic.alt1.glif</string>
+ <key>unic.alt2</key>
+ <string>unic.alt2.glif</string>
+ <key>unic.alt3</key>
+ <string>unic.alt3.glif</string>
+ <key>valt.pass</key>
+ <string>valt.pass.glif</string>
+ <key>valt.fail</key>
+ <string>valt.fail.glif</string>
+ <key>valt.default</key>
+ <string>valt.default.glif</string>
+ <key>valt.alt1</key>
+ <string>valt.alt1.glif</string>
+ <key>valt.alt2</key>
+ <string>valt.alt2.glif</string>
+ <key>valt.alt3</key>
+ <string>valt.alt3.glif</string>
+ <key>vatu.pass</key>
+ <string>vatu.pass.glif</string>
+ <key>vatu.fail</key>
+ <string>vatu.fail.glif</string>
+ <key>vatu.default</key>
+ <string>vatu.default.glif</string>
+ <key>vatu.alt1</key>
+ <string>vatu.alt1.glif</string>
+ <key>vatu.alt2</key>
+ <string>vatu.alt2.glif</string>
+ <key>vatu.alt3</key>
+ <string>vatu.alt3.glif</string>
+ <key>vert.pass</key>
+ <string>vert.pass.glif</string>
+ <key>vert.fail</key>
+ <string>vert.fail.glif</string>
+ <key>vert.default</key>
+ <string>vert.default.glif</string>
+ <key>vert.alt1</key>
+ <string>vert.alt1.glif</string>
+ <key>vert.alt2</key>
+ <string>vert.alt2.glif</string>
+ <key>vert.alt3</key>
+ <string>vert.alt3.glif</string>
+ <key>vhal.pass</key>
+ <string>vhal.pass.glif</string>
+ <key>vhal.fail</key>
+ <string>vhal.fail.glif</string>
+ <key>vhal.default</key>
+ <string>vhal.default.glif</string>
+ <key>vhal.alt1</key>
+ <string>vhal.alt1.glif</string>
+ <key>vhal.alt2</key>
+ <string>vhal.alt2.glif</string>
+ <key>vhal.alt3</key>
+ <string>vhal.alt3.glif</string>
+ <key>vjmo.pass</key>
+ <string>vjmo.pass.glif</string>
+ <key>vjmo.fail</key>
+ <string>vjmo.fail.glif</string>
+ <key>vjmo.default</key>
+ <string>vjmo.default.glif</string>
+ <key>vjmo.alt1</key>
+ <string>vjmo.alt1.glif</string>
+ <key>vjmo.alt2</key>
+ <string>vjmo.alt2.glif</string>
+ <key>vjmo.alt3</key>
+ <string>vjmo.alt3.glif</string>
+ <key>vkna.pass</key>
+ <string>vkna.pass.glif</string>
+ <key>vkna.fail</key>
+ <string>vkna.fail.glif</string>
+ <key>vkna.default</key>
+ <string>vkna.default.glif</string>
+ <key>vkna.alt1</key>
+ <string>vkna.alt1.glif</string>
+ <key>vkna.alt2</key>
+ <string>vkna.alt2.glif</string>
+ <key>vkna.alt3</key>
+ <string>vkna.alt3.glif</string>
+ <key>vkrn.pass</key>
+ <string>vkrn.pass.glif</string>
+ <key>vkrn.fail</key>
+ <string>vkrn.fail.glif</string>
+ <key>vkrn.default</key>
+ <string>vkrn.default.glif</string>
+ <key>vkrn.alt1</key>
+ <string>vkrn.alt1.glif</string>
+ <key>vkrn.alt2</key>
+ <string>vkrn.alt2.glif</string>
+ <key>vkrn.alt3</key>
+ <string>vkrn.alt3.glif</string>
+ <key>vpal.pass</key>
+ <string>vpal.pass.glif</string>
+ <key>vpal.fail</key>
+ <string>vpal.fail.glif</string>
+ <key>vpal.default</key>
+ <string>vpal.default.glif</string>
+ <key>vpal.alt1</key>
+ <string>vpal.alt1.glif</string>
+ <key>vpal.alt2</key>
+ <string>vpal.alt2.glif</string>
+ <key>vpal.alt3</key>
+ <string>vpal.alt3.glif</string>
+ <key>vrt2.pass</key>
+ <string>vrt2.pass.glif</string>
+ <key>vrt2.fail</key>
+ <string>vrt2.fail.glif</string>
+ <key>vrt2.default</key>
+ <string>vrt2.default.glif</string>
+ <key>vrt2.alt1</key>
+ <string>vrt2.alt1.glif</string>
+ <key>vrt2.alt2</key>
+ <string>vrt2.alt2.glif</string>
+ <key>vrt2.alt3</key>
+ <string>vrt2.alt3.glif</string>
+ <key>zero.pass</key>
+ <string>zero.pass.glif</string>
+ <key>zero.fail</key>
+ <string>zero.fail.glif</string>
+ <key>zero.default</key>
+ <string>zero.default.glif</string>
+ <key>zero.alt1</key>
+ <string>zero.alt1.glif</string>
+ <key>zero.alt2</key>
+ <string>zero.alt2.glif</string>
+ <key>zero.alt3</key>
+ <string>zero.alt3.glif</string>
+ </dict>
+</plist>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpct.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpct.alt1.glif
new file mode 100644
index 0000000000..4436050424
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpct.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cpct.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E055"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpct.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpct.alt2.glif
new file mode 100644
index 0000000000..e1a4f3817d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpct.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cpct.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E056"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpct.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpct.alt3.glif
new file mode 100644
index 0000000000..f3ced4b556
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpct.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cpct.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E057"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpct.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpct.default.glif
new file mode 100644
index 0000000000..0e26c25cab
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpct.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cpct.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E054"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpct.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpct.fail.glif
new file mode 100644
index 0000000000..acf6b5a34c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpct.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cpct.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpct.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpct.pass.glif
new file mode 100644
index 0000000000..befbff1459
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpct.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cpct.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpsp.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpsp.alt1.glif
new file mode 100644
index 0000000000..59f052978d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpsp.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cpsp.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E059"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpsp.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpsp.alt2.glif
new file mode 100644
index 0000000000..1fb93e2738
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpsp.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cpsp.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E05A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpsp.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpsp.alt3.glif
new file mode 100644
index 0000000000..4bc2c10e8b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpsp.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cpsp.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E05B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpsp.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpsp.default.glif
new file mode 100644
index 0000000000..1041f2960f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpsp.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cpsp.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E058"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpsp.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpsp.fail.glif
new file mode 100644
index 0000000000..9d252175fb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpsp.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cpsp.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpsp.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpsp.pass.glif
new file mode 100644
index 0000000000..845874a148
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cpsp.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cpsp.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cswh.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cswh.alt1.glif
new file mode 100644
index 0000000000..2800e20dd8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cswh.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cswh.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E05D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cswh.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cswh.alt2.glif
new file mode 100644
index 0000000000..3b31be09dd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cswh.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cswh.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E05E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cswh.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cswh.alt3.glif
new file mode 100644
index 0000000000..2a837c45fc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cswh.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cswh.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E05F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cswh.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cswh.default.glif
new file mode 100644
index 0000000000..ea6df5ea36
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cswh.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cswh.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E05C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cswh.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cswh.fail.glif
new file mode 100644
index 0000000000..04321b2b3a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cswh.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cswh.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cswh.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cswh.pass.glif
new file mode 100644
index 0000000000..62b9d2fc63
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cswh.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cswh.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/curs.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/curs.alt1.glif
new file mode 100644
index 0000000000..1af193e04c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/curs.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="curs.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E061"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/curs.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/curs.alt2.glif
new file mode 100644
index 0000000000..af8a7141d8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/curs.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="curs.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E062"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/curs.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/curs.alt3.glif
new file mode 100644
index 0000000000..965008d401
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/curs.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="curs.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E063"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/curs.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/curs.default.glif
new file mode 100644
index 0000000000..6834af1b9b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/curs.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="curs.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E060"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/curs.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/curs.fail.glif
new file mode 100644
index 0000000000..a933248196
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/curs.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="curs.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/curs.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/curs.pass.glif
new file mode 100644
index 0000000000..af80e56a16
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/curs.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="curs.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv00.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv00.alt1.glif
new file mode 100644
index 0000000000..d7bbca4e2b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv00.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv00.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E065"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv00.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv00.alt2.glif
new file mode 100644
index 0000000000..84e1a3b2f6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv00.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv00.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E066"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv00.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv00.alt3.glif
new file mode 100644
index 0000000000..acc29b16cc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv00.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv00.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E067"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv00.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv00.default.glif
new file mode 100644
index 0000000000..80fc5a0af6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv00.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv00.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E064"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv00.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv00.fail.glif
new file mode 100644
index 0000000000..8fa2b7bafd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv00.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv00.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv00.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv00.pass.glif
new file mode 100644
index 0000000000..f224cd9ae8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv00.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv00.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv01.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv01.alt1.glif
new file mode 100644
index 0000000000..4956fd3d9c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv01.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv01.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E069"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv01.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv01.alt2.glif
new file mode 100644
index 0000000000..ae1c3eca2a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv01.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv01.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E06A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv01.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv01.alt3.glif
new file mode 100644
index 0000000000..3009002112
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv01.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv01.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E06B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv01.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv01.default.glif
new file mode 100644
index 0000000000..f79b0a6ad4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv01.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv01.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E068"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv01.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv01.fail.glif
new file mode 100644
index 0000000000..7364079dc9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv01.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv01.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv01.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv01.pass.glif
new file mode 100644
index 0000000000..71dcddb557
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv01.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv01.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv02.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv02.alt1.glif
new file mode 100644
index 0000000000..5bad7bf389
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv02.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv02.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E06D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv02.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv02.alt2.glif
new file mode 100644
index 0000000000..2e34fd851a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv02.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv02.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E06E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv02.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv02.alt3.glif
new file mode 100644
index 0000000000..49876f208c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv02.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv02.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E06F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv02.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv02.default.glif
new file mode 100644
index 0000000000..244cb07eb4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv02.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv02.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E06C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv02.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv02.fail.glif
new file mode 100644
index 0000000000..3a63fd209d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv02.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv02.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv02.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv02.pass.glif
new file mode 100644
index 0000000000..a3032e5628
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv02.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv02.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv03.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv03.alt1.glif
new file mode 100644
index 0000000000..44fb478775
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv03.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv03.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E071"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv03.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv03.alt2.glif
new file mode 100644
index 0000000000..22e66a358e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv03.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv03.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E072"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv03.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv03.alt3.glif
new file mode 100644
index 0000000000..af97485754
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv03.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv03.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E073"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv03.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv03.default.glif
new file mode 100644
index 0000000000..5d52000c9a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv03.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv03.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E070"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv03.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv03.fail.glif
new file mode 100644
index 0000000000..3fc897ee7c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv03.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv03.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv03.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv03.pass.glif
new file mode 100644
index 0000000000..e4a7b2eeee
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv03.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv03.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv04.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv04.alt1.glif
new file mode 100644
index 0000000000..71586f053e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv04.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv04.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E075"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv04.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv04.alt2.glif
new file mode 100644
index 0000000000..8e2802b9fb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv04.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv04.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E076"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv04.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv04.alt3.glif
new file mode 100644
index 0000000000..47b7a13fb6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv04.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv04.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E077"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv04.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv04.default.glif
new file mode 100644
index 0000000000..dd673146c0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv04.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv04.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E074"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv04.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv04.fail.glif
new file mode 100644
index 0000000000..fd70b52f08
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv04.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv04.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv04.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv04.pass.glif
new file mode 100644
index 0000000000..a14a7534fa
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv04.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv04.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv05.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv05.alt1.glif
new file mode 100644
index 0000000000..1f11fb7ffd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv05.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv05.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E079"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv05.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv05.alt2.glif
new file mode 100644
index 0000000000..cf919bb818
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv05.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv05.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E07A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv05.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv05.alt3.glif
new file mode 100644
index 0000000000..1585d96887
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv05.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv05.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E07B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv05.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv05.default.glif
new file mode 100644
index 0000000000..0d6e567c11
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv05.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv05.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E078"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv05.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv05.fail.glif
new file mode 100644
index 0000000000..6770430b39
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv05.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv05.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv05.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv05.pass.glif
new file mode 100644
index 0000000000..b269f05bac
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv05.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv05.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv06.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv06.alt1.glif
new file mode 100644
index 0000000000..938466d659
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv06.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv06.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E07D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv06.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv06.alt2.glif
new file mode 100644
index 0000000000..a426732e00
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv06.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv06.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E07E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv06.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv06.alt3.glif
new file mode 100644
index 0000000000..132bfa7676
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv06.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv06.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E07F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv06.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv06.default.glif
new file mode 100644
index 0000000000..cd26a7ec18
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv06.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv06.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E07C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv06.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv06.fail.glif
new file mode 100644
index 0000000000..c8b97d52f6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv06.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv06.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv06.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv06.pass.glif
new file mode 100644
index 0000000000..fb3276bfae
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv06.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv06.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv07.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv07.alt1.glif
new file mode 100644
index 0000000000..4e96453a27
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv07.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv07.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E081"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv07.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv07.alt2.glif
new file mode 100644
index 0000000000..91d5778998
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv07.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv07.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E082"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv07.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv07.alt3.glif
new file mode 100644
index 0000000000..baeb6239d5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv07.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv07.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E083"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv07.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv07.default.glif
new file mode 100644
index 0000000000..fe57830f64
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv07.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv07.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E080"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv07.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv07.fail.glif
new file mode 100644
index 0000000000..2c9074b880
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv07.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv07.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv07.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv07.pass.glif
new file mode 100644
index 0000000000..e9e384154c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv07.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv07.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv08.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv08.alt1.glif
new file mode 100644
index 0000000000..ca5c6a47b4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv08.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv08.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E085"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv08.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv08.alt2.glif
new file mode 100644
index 0000000000..074a1a1996
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv08.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv08.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E086"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv08.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv08.alt3.glif
new file mode 100644
index 0000000000..840edb8726
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv08.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv08.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E087"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv08.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv08.default.glif
new file mode 100644
index 0000000000..350e9cc497
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv08.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv08.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E084"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv08.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv08.fail.glif
new file mode 100644
index 0000000000..49eb44694e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv08.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv08.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv08.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv08.pass.glif
new file mode 100644
index 0000000000..ad98832638
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv08.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv08.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv09.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv09.alt1.glif
new file mode 100644
index 0000000000..486aefc02f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv09.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv09.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E089"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv09.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv09.alt2.glif
new file mode 100644
index 0000000000..90e881758a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv09.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv09.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E08A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv09.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv09.alt3.glif
new file mode 100644
index 0000000000..98d75b15f0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv09.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv09.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E08B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv09.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv09.default.glif
new file mode 100644
index 0000000000..0de50b1555
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv09.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv09.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E088"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv09.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv09.fail.glif
new file mode 100644
index 0000000000..76eff775b1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv09.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv09.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv09.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv09.pass.glif
new file mode 100644
index 0000000000..d07ffd994c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv09.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv09.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv10.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv10.alt1.glif
new file mode 100644
index 0000000000..c9098077b9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv10.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv10.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E08D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv10.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv10.alt2.glif
new file mode 100644
index 0000000000..57be5c048f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv10.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv10.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E08E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv10.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv10.alt3.glif
new file mode 100644
index 0000000000..326d289954
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv10.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv10.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E08F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv10.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv10.default.glif
new file mode 100644
index 0000000000..5ff0334b05
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv10.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv10.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E08C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv10.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv10.fail.glif
new file mode 100644
index 0000000000..ebdf59051b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv10.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv10.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv10.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv10.pass.glif
new file mode 100644
index 0000000000..5e9df76375
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv10.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv10.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv11.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv11.alt1.glif
new file mode 100644
index 0000000000..d295b0b150
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv11.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv11.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E091"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv11.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv11.alt2.glif
new file mode 100644
index 0000000000..871b28fdcb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv11.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv11.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E092"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv11.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv11.alt3.glif
new file mode 100644
index 0000000000..8b57cc87ad
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv11.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv11.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E093"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv11.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv11.default.glif
new file mode 100644
index 0000000000..95481cc225
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv11.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv11.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E090"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv11.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv11.fail.glif
new file mode 100644
index 0000000000..359be5b995
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv11.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv11.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv11.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv11.pass.glif
new file mode 100644
index 0000000000..4fa4cfef1f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv11.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv11.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv12.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv12.alt1.glif
new file mode 100644
index 0000000000..51005b6c9c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv12.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv12.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E095"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv12.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv12.alt2.glif
new file mode 100644
index 0000000000..ed92836079
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv12.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv12.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E096"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv12.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv12.alt3.glif
new file mode 100644
index 0000000000..bcc9e7097d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv12.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv12.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E097"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv12.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv12.default.glif
new file mode 100644
index 0000000000..741a191a10
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv12.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv12.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E094"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv12.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv12.fail.glif
new file mode 100644
index 0000000000..b5c8316b93
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv12.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv12.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv12.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv12.pass.glif
new file mode 100644
index 0000000000..0b308d5edc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv12.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv12.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv13.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv13.alt1.glif
new file mode 100644
index 0000000000..f0988965fc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv13.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv13.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E099"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv13.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv13.alt2.glif
new file mode 100644
index 0000000000..29e23b10d1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv13.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv13.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E09A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv13.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv13.alt3.glif
new file mode 100644
index 0000000000..77ad51cfd1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv13.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv13.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E09B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv13.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv13.default.glif
new file mode 100644
index 0000000000..bd4e63e346
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv13.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv13.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E098"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv13.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv13.fail.glif
new file mode 100644
index 0000000000..d69a0e6e41
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv13.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv13.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv13.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv13.pass.glif
new file mode 100644
index 0000000000..5a2f7ae7e2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv13.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv13.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv14.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv14.alt1.glif
new file mode 100644
index 0000000000..800281d0ff
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv14.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv14.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E09D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv14.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv14.alt2.glif
new file mode 100644
index 0000000000..4ec3bf095c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv14.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv14.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E09E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv14.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv14.alt3.glif
new file mode 100644
index 0000000000..2d140ed598
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv14.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv14.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E09F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv14.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv14.default.glif
new file mode 100644
index 0000000000..62614d67d3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv14.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv14.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E09C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv14.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv14.fail.glif
new file mode 100644
index 0000000000..31c76a3ce5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv14.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv14.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv14.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv14.pass.glif
new file mode 100644
index 0000000000..8e0ef5a9ae
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv14.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv14.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv15.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv15.alt1.glif
new file mode 100644
index 0000000000..4ca3481626
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv15.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv15.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0A1"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv15.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv15.alt2.glif
new file mode 100644
index 0000000000..7065660273
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv15.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv15.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0A2"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv15.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv15.alt3.glif
new file mode 100644
index 0000000000..c154a4b796
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv15.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv15.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0A3"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv15.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv15.default.glif
new file mode 100644
index 0000000000..2292c5fb62
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv15.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv15.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E0A0"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv15.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv15.fail.glif
new file mode 100644
index 0000000000..d1a0d88f99
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv15.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv15.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv15.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv15.pass.glif
new file mode 100644
index 0000000000..9ebdad59a4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv15.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv15.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv16.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv16.alt1.glif
new file mode 100644
index 0000000000..90c058ce23
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv16.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv16.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0A5"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv16.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv16.alt2.glif
new file mode 100644
index 0000000000..491b22037c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv16.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv16.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0A6"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv16.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv16.alt3.glif
new file mode 100644
index 0000000000..a2fdefdf9e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv16.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv16.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0A7"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv16.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv16.default.glif
new file mode 100644
index 0000000000..e2ea1a9ed8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv16.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv16.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E0A4"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv16.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv16.fail.glif
new file mode 100644
index 0000000000..e29ef6c721
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv16.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv16.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv16.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv16.pass.glif
new file mode 100644
index 0000000000..5efd4ab611
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv16.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv16.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv17.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv17.alt1.glif
new file mode 100644
index 0000000000..a3008d8b6e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv17.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv17.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0A9"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv17.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv17.alt2.glif
new file mode 100644
index 0000000000..5ebf625eea
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv17.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv17.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0AA"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv17.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv17.alt3.glif
new file mode 100644
index 0000000000..f5a40a551e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv17.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv17.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0AB"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv17.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv17.default.glif
new file mode 100644
index 0000000000..7add0f5b83
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv17.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv17.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E0A8"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv17.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv17.fail.glif
new file mode 100644
index 0000000000..ef4583acc6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv17.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv17.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv17.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv17.pass.glif
new file mode 100644
index 0000000000..2c8e1c871c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv17.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv17.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv18.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv18.alt1.glif
new file mode 100644
index 0000000000..f8af3cb5bf
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv18.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv18.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0AD"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv18.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv18.alt2.glif
new file mode 100644
index 0000000000..499c200d86
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv18.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv18.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0AE"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv18.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv18.alt3.glif
new file mode 100644
index 0000000000..eba542f95d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv18.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv18.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0AF"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv18.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv18.default.glif
new file mode 100644
index 0000000000..ab20bcb6ac
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv18.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv18.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E0AC"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv18.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv18.fail.glif
new file mode 100644
index 0000000000..dfa7613fe9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv18.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv18.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv18.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv18.pass.glif
new file mode 100644
index 0000000000..69ceda5496
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv18.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv18.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv19.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv19.alt1.glif
new file mode 100644
index 0000000000..96428d5703
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv19.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv19.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0B1"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv19.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv19.alt2.glif
new file mode 100644
index 0000000000..9eafe46a07
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv19.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv19.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0B2"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv19.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv19.alt3.glif
new file mode 100644
index 0000000000..2c604e5f53
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv19.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv19.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0B3"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv19.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv19.default.glif
new file mode 100644
index 0000000000..5e0103a852
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv19.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv19.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E0B0"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv19.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv19.fail.glif
new file mode 100644
index 0000000000..845192bd8e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv19.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv19.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv19.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv19.pass.glif
new file mode 100644
index 0000000000..0c8f47271e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv19.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv19.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv20.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv20.alt1.glif
new file mode 100644
index 0000000000..a4c8095cfc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv20.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv20.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0B5"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv20.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv20.alt2.glif
new file mode 100644
index 0000000000..5486cc901c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv20.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv20.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0B6"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv20.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv20.alt3.glif
new file mode 100644
index 0000000000..43ab6c6e2e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv20.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv20.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0B7"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv20.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv20.default.glif
new file mode 100644
index 0000000000..bab0635106
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv20.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv20.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E0B4"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv20.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv20.fail.glif
new file mode 100644
index 0000000000..a1e8338e2b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv20.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv20.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv20.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv20.pass.glif
new file mode 100644
index 0000000000..05b93df1be
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv20.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv20.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv21.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv21.alt1.glif
new file mode 100644
index 0000000000..c3ec741a06
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv21.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv21.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0B9"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv21.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv21.alt2.glif
new file mode 100644
index 0000000000..3c6d29c46f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv21.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv21.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0BA"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv21.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv21.alt3.glif
new file mode 100644
index 0000000000..0ab1fef073
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv21.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv21.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0BB"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv21.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv21.default.glif
new file mode 100644
index 0000000000..9c23e840cf
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv21.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv21.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E0B8"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv21.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv21.fail.glif
new file mode 100644
index 0000000000..acea67aead
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv21.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv21.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv21.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv21.pass.glif
new file mode 100644
index 0000000000..99a51529ce
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv21.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv21.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv22.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv22.alt1.glif
new file mode 100644
index 0000000000..2b0f21f13b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv22.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv22.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0BD"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv22.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv22.alt2.glif
new file mode 100644
index 0000000000..3cb9565d0d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv22.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv22.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0BE"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv22.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv22.alt3.glif
new file mode 100644
index 0000000000..212288a480
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv22.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv22.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0BF"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv22.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv22.default.glif
new file mode 100644
index 0000000000..478f5528a5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv22.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv22.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E0BC"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv22.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv22.fail.glif
new file mode 100644
index 0000000000..d8d40e5c88
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv22.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv22.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv22.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv22.pass.glif
new file mode 100644
index 0000000000..62e71e3388
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv22.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv22.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv23.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv23.alt1.glif
new file mode 100644
index 0000000000..6d39b16467
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv23.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv23.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0C1"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv23.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv23.alt2.glif
new file mode 100644
index 0000000000..d40502b277
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv23.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv23.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0C2"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv23.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv23.alt3.glif
new file mode 100644
index 0000000000..ef98a1311e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv23.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv23.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0C3"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv23.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv23.default.glif
new file mode 100644
index 0000000000..4f97c17d22
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv23.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv23.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E0C0"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv23.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv23.fail.glif
new file mode 100644
index 0000000000..1e89ce40e6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv23.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv23.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv23.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv23.pass.glif
new file mode 100644
index 0000000000..7ee7861ce7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv23.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv23.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv24.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv24.alt1.glif
new file mode 100644
index 0000000000..73e48085f6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv24.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv24.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0C5"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv24.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv24.alt2.glif
new file mode 100644
index 0000000000..c2da6d3654
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv24.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv24.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0C6"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv24.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv24.alt3.glif
new file mode 100644
index 0000000000..0a3c766533
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv24.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv24.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0C7"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv24.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv24.default.glif
new file mode 100644
index 0000000000..fa75fee96c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv24.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv24.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E0C4"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv24.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv24.fail.glif
new file mode 100644
index 0000000000..77b18ed861
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv24.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv24.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv24.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv24.pass.glif
new file mode 100644
index 0000000000..70e4f9d952
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv24.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv24.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv25.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv25.alt1.glif
new file mode 100644
index 0000000000..23f8fb40f1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv25.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv25.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0C9"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv25.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv25.alt2.glif
new file mode 100644
index 0000000000..4f9ea6d2f9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv25.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv25.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0CA"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv25.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv25.alt3.glif
new file mode 100644
index 0000000000..58f9e850a1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv25.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv25.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0CB"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv25.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv25.default.glif
new file mode 100644
index 0000000000..16aff42e72
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv25.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv25.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E0C8"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv25.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv25.fail.glif
new file mode 100644
index 0000000000..b0692310a8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv25.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv25.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv25.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv25.pass.glif
new file mode 100644
index 0000000000..71d2662092
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv25.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv25.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv26.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv26.alt1.glif
new file mode 100644
index 0000000000..b2c96361b5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv26.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv26.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0CD"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv26.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv26.alt2.glif
new file mode 100644
index 0000000000..16da517032
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv26.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv26.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0CE"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv26.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv26.alt3.glif
new file mode 100644
index 0000000000..e2c754c542
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv26.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv26.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0CF"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv26.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv26.default.glif
new file mode 100644
index 0000000000..1b7eae87d0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv26.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv26.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E0CC"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv26.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv26.fail.glif
new file mode 100644
index 0000000000..13164870cf
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv26.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv26.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv26.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv26.pass.glif
new file mode 100644
index 0000000000..d7e2037af0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv26.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv26.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv27.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv27.alt1.glif
new file mode 100644
index 0000000000..faa9dad0e8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv27.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv27.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0D1"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv27.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv27.alt2.glif
new file mode 100644
index 0000000000..84ddfd2bd1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv27.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv27.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0D2"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv27.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv27.alt3.glif
new file mode 100644
index 0000000000..6054576209
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv27.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv27.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0D3"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv27.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv27.default.glif
new file mode 100644
index 0000000000..e09d7a9695
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv27.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv27.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E0D0"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv27.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv27.fail.glif
new file mode 100644
index 0000000000..10524eeb1c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv27.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv27.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv27.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv27.pass.glif
new file mode 100644
index 0000000000..754fc4ba29
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv27.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv27.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv28.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv28.alt1.glif
new file mode 100644
index 0000000000..d13711c63a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv28.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv28.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0D5"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv28.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv28.alt2.glif
new file mode 100644
index 0000000000..05b69972a4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv28.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv28.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0D6"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv28.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv28.alt3.glif
new file mode 100644
index 0000000000..52edd02f17
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv28.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv28.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0D7"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv28.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv28.default.glif
new file mode 100644
index 0000000000..06d631be01
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv28.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv28.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E0D4"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv28.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv28.fail.glif
new file mode 100644
index 0000000000..3e863dc42e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv28.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv28.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv28.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv28.pass.glif
new file mode 100644
index 0000000000..d527734272
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv28.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv28.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv29.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv29.alt1.glif
new file mode 100644
index 0000000000..86bc4932bc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv29.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv29.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0D9"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv29.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv29.alt2.glif
new file mode 100644
index 0000000000..b82f9e0620
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv29.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv29.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0DA"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv29.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv29.alt3.glif
new file mode 100644
index 0000000000..a6a11ee389
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv29.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv29.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0DB"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv29.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv29.default.glif
new file mode 100644
index 0000000000..340e5fca27
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv29.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv29.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E0D8"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv29.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv29.fail.glif
new file mode 100644
index 0000000000..65fc39c3a2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv29.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv29.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv29.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv29.pass.glif
new file mode 100644
index 0000000000..9b1109ac43
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv29.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv29.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv30.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv30.alt1.glif
new file mode 100644
index 0000000000..3c487092b4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv30.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv30.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0DD"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv30.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv30.alt2.glif
new file mode 100644
index 0000000000..b3fe8afb49
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv30.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv30.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0DE"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv30.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv30.alt3.glif
new file mode 100644
index 0000000000..37998f02fa
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv30.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv30.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0DF"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv30.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv30.default.glif
new file mode 100644
index 0000000000..48f9e5cbcb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv30.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv30.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E0DC"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv30.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv30.fail.glif
new file mode 100644
index 0000000000..dc7ab695f6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv30.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv30.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv30.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv30.pass.glif
new file mode 100644
index 0000000000..48eff7845a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv30.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv30.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv31.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv31.alt1.glif
new file mode 100644
index 0000000000..908ccf3a49
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv31.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv31.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0E1"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv31.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv31.alt2.glif
new file mode 100644
index 0000000000..3b733fcedb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv31.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv31.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0E2"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv31.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv31.alt3.glif
new file mode 100644
index 0000000000..7c612ff84d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv31.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv31.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0E3"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv31.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv31.default.glif
new file mode 100644
index 0000000000..27014521ec
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv31.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv31.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E0E0"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv31.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv31.fail.glif
new file mode 100644
index 0000000000..30daf53f44
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv31.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv31.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv31.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv31.pass.glif
new file mode 100644
index 0000000000..6226f299e3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv31.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv31.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv32.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv32.alt1.glif
new file mode 100644
index 0000000000..6cb66bf8fc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv32.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv32.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0E5"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv32.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv32.alt2.glif
new file mode 100644
index 0000000000..4f311113fd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv32.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv32.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0E6"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv32.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv32.alt3.glif
new file mode 100644
index 0000000000..6945c6b92f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv32.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv32.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0E7"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv32.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv32.default.glif
new file mode 100644
index 0000000000..a61356fb28
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv32.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv32.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E0E4"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv32.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv32.fail.glif
new file mode 100644
index 0000000000..ef778c577f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv32.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv32.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv32.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv32.pass.glif
new file mode 100644
index 0000000000..3d9a218ad1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv32.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv32.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv33.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv33.alt1.glif
new file mode 100644
index 0000000000..44914524f5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv33.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv33.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0E9"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv33.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv33.alt2.glif
new file mode 100644
index 0000000000..05a2d3e89c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv33.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv33.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0EA"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv33.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv33.alt3.glif
new file mode 100644
index 0000000000..570f6e9bd0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv33.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv33.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0EB"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv33.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv33.default.glif
new file mode 100644
index 0000000000..984c174a25
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv33.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv33.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E0E8"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv33.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv33.fail.glif
new file mode 100644
index 0000000000..1d7886dd27
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv33.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv33.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv33.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv33.pass.glif
new file mode 100644
index 0000000000..4b837565c7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv33.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv33.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv34.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv34.alt1.glif
new file mode 100644
index 0000000000..5003e623ac
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv34.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv34.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0ED"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv34.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv34.alt2.glif
new file mode 100644
index 0000000000..40c602ebce
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv34.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv34.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0EE"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv34.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv34.alt3.glif
new file mode 100644
index 0000000000..2f4ab5a45e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv34.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv34.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0EF"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv34.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv34.default.glif
new file mode 100644
index 0000000000..0589c99975
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv34.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv34.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E0EC"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv34.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv34.fail.glif
new file mode 100644
index 0000000000..3991a3ccb6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv34.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv34.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv34.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv34.pass.glif
new file mode 100644
index 0000000000..08b42b805a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv34.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv34.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv35.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv35.alt1.glif
new file mode 100644
index 0000000000..0b74eb1dc0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv35.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv35.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0F1"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv35.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv35.alt2.glif
new file mode 100644
index 0000000000..a168426eb9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv35.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv35.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0F2"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv35.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv35.alt3.glif
new file mode 100644
index 0000000000..5a439ccbd9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv35.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv35.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0F3"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv35.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv35.default.glif
new file mode 100644
index 0000000000..1bdd5305eb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv35.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv35.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E0F0"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv35.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv35.fail.glif
new file mode 100644
index 0000000000..21f8ebf63f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv35.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv35.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv35.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv35.pass.glif
new file mode 100644
index 0000000000..fb5ebe36f7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv35.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv35.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv36.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv36.alt1.glif
new file mode 100644
index 0000000000..e24dd24373
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv36.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv36.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0F5"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv36.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv36.alt2.glif
new file mode 100644
index 0000000000..748608e7f0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv36.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv36.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0F6"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv36.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv36.alt3.glif
new file mode 100644
index 0000000000..ef6c8400cd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv36.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv36.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0F7"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv36.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv36.default.glif
new file mode 100644
index 0000000000..94c4766450
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv36.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv36.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E0F4"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv36.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv36.fail.glif
new file mode 100644
index 0000000000..2c8ef2f87f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv36.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv36.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv36.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv36.pass.glif
new file mode 100644
index 0000000000..ba3f4ebb4f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv36.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv36.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv37.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv37.alt1.glif
new file mode 100644
index 0000000000..48a0fd03cc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv37.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv37.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0F9"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv37.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv37.alt2.glif
new file mode 100644
index 0000000000..dd688e9325
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv37.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv37.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0FA"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv37.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv37.alt3.glif
new file mode 100644
index 0000000000..5af3ebfdf2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv37.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv37.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0FB"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv37.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv37.default.glif
new file mode 100644
index 0000000000..629dc60962
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv37.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv37.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E0F8"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv37.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv37.fail.glif
new file mode 100644
index 0000000000..7040dd5936
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv37.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv37.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv37.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv37.pass.glif
new file mode 100644
index 0000000000..fb27a4f7c2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv37.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv37.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv38.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv38.alt1.glif
new file mode 100644
index 0000000000..d4eea10a2a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv38.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv38.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0FD"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv38.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv38.alt2.glif
new file mode 100644
index 0000000000..b0c8a69e44
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv38.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv38.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0FE"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv38.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv38.alt3.glif
new file mode 100644
index 0000000000..509d19e7a8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv38.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv38.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E0FF"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv38.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv38.default.glif
new file mode 100644
index 0000000000..3b6927fe50
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv38.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv38.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E0FC"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv38.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv38.fail.glif
new file mode 100644
index 0000000000..2166c464e7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv38.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv38.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv38.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv38.pass.glif
new file mode 100644
index 0000000000..c441c62020
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv38.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv38.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv39.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv39.alt1.glif
new file mode 100644
index 0000000000..81ae972e9c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv39.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv39.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E101"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv39.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv39.alt2.glif
new file mode 100644
index 0000000000..0773b2991d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv39.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv39.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E102"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv39.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv39.alt3.glif
new file mode 100644
index 0000000000..3555a38eff
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv39.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv39.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E103"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv39.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv39.default.glif
new file mode 100644
index 0000000000..128a94c21c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv39.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv39.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E100"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv39.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv39.fail.glif
new file mode 100644
index 0000000000..e4ed01f79c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv39.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv39.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv39.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv39.pass.glif
new file mode 100644
index 0000000000..c9c764c64c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv39.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv39.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv40.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv40.alt1.glif
new file mode 100644
index 0000000000..8c3ec022f8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv40.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv40.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E105"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv40.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv40.alt2.glif
new file mode 100644
index 0000000000..aadb4a824e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv40.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv40.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E106"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv40.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv40.alt3.glif
new file mode 100644
index 0000000000..81ed9f2dcf
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv40.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv40.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E107"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv40.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv40.default.glif
new file mode 100644
index 0000000000..4c0c91f3c3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv40.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv40.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E104"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv40.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv40.fail.glif
new file mode 100644
index 0000000000..7fe9d27106
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv40.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv40.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv40.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv40.pass.glif
new file mode 100644
index 0000000000..805bdea010
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv40.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv40.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv41.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv41.alt1.glif
new file mode 100644
index 0000000000..7b2c2a3147
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv41.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv41.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E109"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv41.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv41.alt2.glif
new file mode 100644
index 0000000000..6747198bea
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv41.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv41.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E10A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv41.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv41.alt3.glif
new file mode 100644
index 0000000000..a3b83a26c4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv41.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv41.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E10B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv41.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv41.default.glif
new file mode 100644
index 0000000000..b8c8d15c5a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv41.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv41.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E108"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv41.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv41.fail.glif
new file mode 100644
index 0000000000..cfa06cdc4d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv41.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv41.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv41.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv41.pass.glif
new file mode 100644
index 0000000000..a829ccb70d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv41.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv41.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv42.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv42.alt1.glif
new file mode 100644
index 0000000000..4beccdeab2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv42.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv42.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E10D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv42.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv42.alt2.glif
new file mode 100644
index 0000000000..e452b558e1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv42.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv42.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E10E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv42.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv42.alt3.glif
new file mode 100644
index 0000000000..a177be3a7c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv42.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv42.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E10F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv42.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv42.default.glif
new file mode 100644
index 0000000000..38cdc5112d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv42.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv42.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E10C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv42.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv42.fail.glif
new file mode 100644
index 0000000000..91d118b4d5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv42.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv42.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv42.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv42.pass.glif
new file mode 100644
index 0000000000..0d39f29a41
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv42.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv42.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv43.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv43.alt1.glif
new file mode 100644
index 0000000000..8a7b158b7a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv43.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv43.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E111"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv43.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv43.alt2.glif
new file mode 100644
index 0000000000..151f15c54b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv43.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv43.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E112"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv43.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv43.alt3.glif
new file mode 100644
index 0000000000..7ce815a36c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv43.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv43.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E113"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv43.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv43.default.glif
new file mode 100644
index 0000000000..2628ba1c62
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv43.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv43.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E110"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv43.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv43.fail.glif
new file mode 100644
index 0000000000..5a0f78eeca
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv43.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv43.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv43.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv43.pass.glif
new file mode 100644
index 0000000000..7a3be575cd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv43.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv43.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv44.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv44.alt1.glif
new file mode 100644
index 0000000000..6ef13aa094
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv44.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv44.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E115"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv44.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv44.alt2.glif
new file mode 100644
index 0000000000..10dd3fd5d6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv44.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv44.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E116"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv44.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv44.alt3.glif
new file mode 100644
index 0000000000..fcc0bfa756
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv44.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv44.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E117"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv44.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv44.default.glif
new file mode 100644
index 0000000000..b014807486
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv44.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv44.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E114"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv44.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv44.fail.glif
new file mode 100644
index 0000000000..c77aeb423a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv44.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv44.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv44.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv44.pass.glif
new file mode 100644
index 0000000000..0988072711
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv44.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv44.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv45.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv45.alt1.glif
new file mode 100644
index 0000000000..4d7a1e4193
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv45.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv45.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E119"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv45.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv45.alt2.glif
new file mode 100644
index 0000000000..2523a50188
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv45.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv45.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E11A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv45.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv45.alt3.glif
new file mode 100644
index 0000000000..a37c2cc84e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv45.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv45.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E11B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv45.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv45.default.glif
new file mode 100644
index 0000000000..36c4896a21
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv45.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv45.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E118"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv45.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv45.fail.glif
new file mode 100644
index 0000000000..96b7b2708f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv45.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv45.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv45.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv45.pass.glif
new file mode 100644
index 0000000000..4a732d62b8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv45.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv45.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv46.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv46.alt1.glif
new file mode 100644
index 0000000000..ae07848b39
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv46.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv46.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E11D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv46.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv46.alt2.glif
new file mode 100644
index 0000000000..3aeec19ef2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv46.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv46.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E11E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv46.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv46.alt3.glif
new file mode 100644
index 0000000000..5b1ac3ef26
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv46.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv46.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E11F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv46.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv46.default.glif
new file mode 100644
index 0000000000..34b1dbcf04
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv46.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv46.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E11C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv46.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv46.fail.glif
new file mode 100644
index 0000000000..f0394f31c2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv46.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv46.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv46.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv46.pass.glif
new file mode 100644
index 0000000000..a29e865fb5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv46.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv46.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv47.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv47.alt1.glif
new file mode 100644
index 0000000000..fc0fa47cd8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv47.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv47.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E121"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv47.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv47.alt2.glif
new file mode 100644
index 0000000000..a9b014a3bb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv47.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv47.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E122"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv47.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv47.alt3.glif
new file mode 100644
index 0000000000..a96581cff6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv47.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv47.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E123"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv47.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv47.default.glif
new file mode 100644
index 0000000000..532bcf44f3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv47.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv47.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E120"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv47.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv47.fail.glif
new file mode 100644
index 0000000000..a62703905d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv47.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv47.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv47.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv47.pass.glif
new file mode 100644
index 0000000000..ee1f0dab29
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv47.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv47.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv48.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv48.alt1.glif
new file mode 100644
index 0000000000..a44b7ed993
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv48.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv48.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E125"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv48.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv48.alt2.glif
new file mode 100644
index 0000000000..55a028e8a7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv48.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv48.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E126"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv48.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv48.alt3.glif
new file mode 100644
index 0000000000..8edd7a1338
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv48.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv48.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E127"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv48.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv48.default.glif
new file mode 100644
index 0000000000..2f5fe9cab0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv48.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv48.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E124"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv48.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv48.fail.glif
new file mode 100644
index 0000000000..390de4c4bb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv48.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv48.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv48.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv48.pass.glif
new file mode 100644
index 0000000000..7fac8d0e9c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv48.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv48.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv49.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv49.alt1.glif
new file mode 100644
index 0000000000..a7b44d452f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv49.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv49.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E129"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv49.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv49.alt2.glif
new file mode 100644
index 0000000000..4ee3424168
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv49.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv49.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E12A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv49.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv49.alt3.glif
new file mode 100644
index 0000000000..6d59af4bd5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv49.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv49.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E12B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv49.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv49.default.glif
new file mode 100644
index 0000000000..5a875941fb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv49.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv49.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E128"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv49.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv49.fail.glif
new file mode 100644
index 0000000000..b737bc7fc2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv49.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv49.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv49.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv49.pass.glif
new file mode 100644
index 0000000000..4a0b02215f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv49.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv49.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv50.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv50.alt1.glif
new file mode 100644
index 0000000000..23ed1af7d7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv50.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv50.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E12D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv50.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv50.alt2.glif
new file mode 100644
index 0000000000..9f0067b5dc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv50.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv50.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E12E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv50.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv50.alt3.glif
new file mode 100644
index 0000000000..55ba4fe86c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv50.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv50.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E12F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv50.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv50.default.glif
new file mode 100644
index 0000000000..3690b67d0b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv50.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv50.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E12C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv50.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv50.fail.glif
new file mode 100644
index 0000000000..f7c618568f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv50.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv50.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv50.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv50.pass.glif
new file mode 100644
index 0000000000..20c4527659
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv50.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv50.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv51.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv51.alt1.glif
new file mode 100644
index 0000000000..1d2b9e42c1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv51.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv51.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E131"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv51.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv51.alt2.glif
new file mode 100644
index 0000000000..10550b47bc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv51.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv51.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E132"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv51.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv51.alt3.glif
new file mode 100644
index 0000000000..3894ca6756
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv51.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv51.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E133"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv51.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv51.default.glif
new file mode 100644
index 0000000000..7f2c8f9a79
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv51.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv51.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E130"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv51.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv51.fail.glif
new file mode 100644
index 0000000000..02b6e7e297
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv51.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv51.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv51.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv51.pass.glif
new file mode 100644
index 0000000000..d67322c52d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv51.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv51.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv52.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv52.alt1.glif
new file mode 100644
index 0000000000..343a41a3a6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv52.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv52.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E135"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv52.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv52.alt2.glif
new file mode 100644
index 0000000000..87d4a50707
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv52.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv52.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E136"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv52.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv52.alt3.glif
new file mode 100644
index 0000000000..1f37685a2c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv52.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv52.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E137"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv52.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv52.default.glif
new file mode 100644
index 0000000000..dcb4c3dc6e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv52.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv52.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E134"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv52.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv52.fail.glif
new file mode 100644
index 0000000000..371747f2ba
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv52.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv52.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv52.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv52.pass.glif
new file mode 100644
index 0000000000..e2aa6568ae
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv52.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv52.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv53.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv53.alt1.glif
new file mode 100644
index 0000000000..57a13dbe04
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv53.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv53.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E139"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv53.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv53.alt2.glif
new file mode 100644
index 0000000000..caa83510f6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv53.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv53.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E13A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv53.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv53.alt3.glif
new file mode 100644
index 0000000000..46530769e7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv53.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv53.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E13B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv53.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv53.default.glif
new file mode 100644
index 0000000000..b56172998e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv53.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv53.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E138"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv53.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv53.fail.glif
new file mode 100644
index 0000000000..f64d405c09
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv53.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv53.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv53.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv53.pass.glif
new file mode 100644
index 0000000000..be23d7be11
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv53.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv53.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv54.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv54.alt1.glif
new file mode 100644
index 0000000000..50462e8478
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv54.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv54.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E13D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv54.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv54.alt2.glif
new file mode 100644
index 0000000000..c2b366c957
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv54.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv54.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E13E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv54.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv54.alt3.glif
new file mode 100644
index 0000000000..bc660eecb0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv54.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv54.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E13F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv54.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv54.default.glif
new file mode 100644
index 0000000000..47441f1002
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv54.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv54.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E13C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv54.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv54.fail.glif
new file mode 100644
index 0000000000..9f57d2fd80
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv54.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv54.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv54.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv54.pass.glif
new file mode 100644
index 0000000000..923c8199fb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv54.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv54.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv55.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv55.alt1.glif
new file mode 100644
index 0000000000..63ad08b00a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv55.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv55.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E141"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv55.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv55.alt2.glif
new file mode 100644
index 0000000000..814cb4eae9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv55.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv55.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E142"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv55.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv55.alt3.glif
new file mode 100644
index 0000000000..68b4ab024a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv55.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv55.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E143"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv55.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv55.default.glif
new file mode 100644
index 0000000000..18a48f85f0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv55.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv55.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E140"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv55.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv55.fail.glif
new file mode 100644
index 0000000000..1a19f28ad8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv55.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv55.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv55.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv55.pass.glif
new file mode 100644
index 0000000000..15c7478cf9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv55.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv55.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv56.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv56.alt1.glif
new file mode 100644
index 0000000000..c5c7449d05
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv56.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv56.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E145"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv56.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv56.alt2.glif
new file mode 100644
index 0000000000..54aae31497
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv56.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv56.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E146"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv56.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv56.alt3.glif
new file mode 100644
index 0000000000..c35bfc9868
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv56.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv56.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E147"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv56.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv56.default.glif
new file mode 100644
index 0000000000..e368039143
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv56.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv56.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E144"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv56.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv56.fail.glif
new file mode 100644
index 0000000000..3e980af3b5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv56.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv56.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv56.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv56.pass.glif
new file mode 100644
index 0000000000..dd99613b1e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv56.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv56.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv57.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv57.alt1.glif
new file mode 100644
index 0000000000..44e0b8cf49
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv57.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv57.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E149"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv57.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv57.alt2.glif
new file mode 100644
index 0000000000..9719be0f3e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv57.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv57.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E14A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv57.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv57.alt3.glif
new file mode 100644
index 0000000000..65af1c5a8f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv57.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv57.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E14B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv57.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv57.default.glif
new file mode 100644
index 0000000000..c3ce4199c2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv57.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv57.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E148"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv57.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv57.fail.glif
new file mode 100644
index 0000000000..cb55e52280
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv57.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv57.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv57.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv57.pass.glif
new file mode 100644
index 0000000000..8647779273
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv57.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv57.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv58.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv58.alt1.glif
new file mode 100644
index 0000000000..5a7ad30c1e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv58.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv58.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E14D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv58.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv58.alt2.glif
new file mode 100644
index 0000000000..e0bdf0de53
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv58.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv58.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E14E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv58.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv58.alt3.glif
new file mode 100644
index 0000000000..78f83cac8a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv58.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv58.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E14F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv58.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv58.default.glif
new file mode 100644
index 0000000000..30c409b974
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv58.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv58.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E14C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv58.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv58.fail.glif
new file mode 100644
index 0000000000..200a20ffe5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv58.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv58.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv58.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv58.pass.glif
new file mode 100644
index 0000000000..61c626f75e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv58.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv58.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv59.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv59.alt1.glif
new file mode 100644
index 0000000000..94269d24ab
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv59.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv59.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E151"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv59.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv59.alt2.glif
new file mode 100644
index 0000000000..efc68c683f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv59.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv59.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E152"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv59.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv59.alt3.glif
new file mode 100644
index 0000000000..d7fc707894
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv59.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv59.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E153"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv59.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv59.default.glif
new file mode 100644
index 0000000000..0df50470c0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv59.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv59.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E150"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv59.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv59.fail.glif
new file mode 100644
index 0000000000..2d8736e8d6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv59.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv59.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv59.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv59.pass.glif
new file mode 100644
index 0000000000..28293fa0c4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv59.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv59.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv60.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv60.alt1.glif
new file mode 100644
index 0000000000..ba8d438401
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv60.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv60.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E155"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv60.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv60.alt2.glif
new file mode 100644
index 0000000000..9b567955f6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv60.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv60.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E156"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv60.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv60.alt3.glif
new file mode 100644
index 0000000000..08cc737cae
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv60.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv60.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E157"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv60.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv60.default.glif
new file mode 100644
index 0000000000..455bf2cb0e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv60.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv60.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E154"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv60.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv60.fail.glif
new file mode 100644
index 0000000000..0fc16e8eab
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv60.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv60.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv60.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv60.pass.glif
new file mode 100644
index 0000000000..bd8ecfaf8b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv60.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv60.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv61.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv61.alt1.glif
new file mode 100644
index 0000000000..97f973ada4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv61.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv61.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E159"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv61.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv61.alt2.glif
new file mode 100644
index 0000000000..4a70ec9236
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv61.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv61.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E15A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv61.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv61.alt3.glif
new file mode 100644
index 0000000000..003e0603f1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv61.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv61.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E15B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv61.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv61.default.glif
new file mode 100644
index 0000000000..10522e379a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv61.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv61.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E158"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv61.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv61.fail.glif
new file mode 100644
index 0000000000..7793ded463
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv61.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv61.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv61.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv61.pass.glif
new file mode 100644
index 0000000000..cf014e39d2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv61.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv61.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv62.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv62.alt1.glif
new file mode 100644
index 0000000000..f81e419d7b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv62.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv62.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E15D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv62.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv62.alt2.glif
new file mode 100644
index 0000000000..33cfc32ae8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv62.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv62.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E15E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv62.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv62.alt3.glif
new file mode 100644
index 0000000000..ddf3027b4a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv62.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv62.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E15F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv62.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv62.default.glif
new file mode 100644
index 0000000000..f394c3ccfc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv62.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv62.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E15C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv62.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv62.fail.glif
new file mode 100644
index 0000000000..30ddd847f6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv62.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv62.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv62.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv62.pass.glif
new file mode 100644
index 0000000000..1539f9c37d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv62.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv62.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv63.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv63.alt1.glif
new file mode 100644
index 0000000000..d1221c8b73
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv63.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv63.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E161"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv63.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv63.alt2.glif
new file mode 100644
index 0000000000..6b0c357195
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv63.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv63.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E162"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv63.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv63.alt3.glif
new file mode 100644
index 0000000000..63c692ebd7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv63.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv63.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E163"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv63.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv63.default.glif
new file mode 100644
index 0000000000..161a664d8a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv63.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv63.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E160"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv63.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv63.fail.glif
new file mode 100644
index 0000000000..776e032ed6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv63.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv63.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv63.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv63.pass.glif
new file mode 100644
index 0000000000..c195bd3e55
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv63.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv63.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv64.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv64.alt1.glif
new file mode 100644
index 0000000000..e17b11e219
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv64.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv64.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E165"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv64.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv64.alt2.glif
new file mode 100644
index 0000000000..39c57f71fa
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv64.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv64.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E166"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv64.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv64.alt3.glif
new file mode 100644
index 0000000000..606e2cf852
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv64.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv64.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E167"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv64.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv64.default.glif
new file mode 100644
index 0000000000..9db34896f1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv64.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv64.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E164"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv64.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv64.fail.glif
new file mode 100644
index 0000000000..375469e272
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv64.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv64.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv64.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv64.pass.glif
new file mode 100644
index 0000000000..c757e65272
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv64.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv64.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv65.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv65.alt1.glif
new file mode 100644
index 0000000000..6f8808fe60
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv65.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv65.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E169"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv65.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv65.alt2.glif
new file mode 100644
index 0000000000..6dc675b3d4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv65.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv65.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E16A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv65.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv65.alt3.glif
new file mode 100644
index 0000000000..252ba5f2e1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv65.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv65.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E16B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv65.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv65.default.glif
new file mode 100644
index 0000000000..97e89a8c67
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv65.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv65.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E168"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv65.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv65.fail.glif
new file mode 100644
index 0000000000..fec0051804
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv65.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv65.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv65.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv65.pass.glif
new file mode 100644
index 0000000000..5277045602
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv65.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv65.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv66.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv66.alt1.glif
new file mode 100644
index 0000000000..38a833bca6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv66.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv66.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E16D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv66.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv66.alt2.glif
new file mode 100644
index 0000000000..07e461ed8b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv66.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv66.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E16E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv66.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv66.alt3.glif
new file mode 100644
index 0000000000..0c2752ede1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv66.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv66.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E16F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv66.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv66.default.glif
new file mode 100644
index 0000000000..31cb78484e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv66.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv66.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E16C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv66.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv66.fail.glif
new file mode 100644
index 0000000000..91497ace13
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv66.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv66.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv66.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv66.pass.glif
new file mode 100644
index 0000000000..ee0af1c93b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv66.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv66.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv67.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv67.alt1.glif
new file mode 100644
index 0000000000..affd0d1252
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv67.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv67.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E171"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv67.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv67.alt2.glif
new file mode 100644
index 0000000000..c0805410e5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv67.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv67.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E172"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv67.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv67.alt3.glif
new file mode 100644
index 0000000000..5a72e63b4f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv67.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv67.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E173"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv67.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv67.default.glif
new file mode 100644
index 0000000000..a864dfe3ca
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv67.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv67.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E170"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv67.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv67.fail.glif
new file mode 100644
index 0000000000..23eb6186ff
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv67.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv67.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv67.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv67.pass.glif
new file mode 100644
index 0000000000..96938f9961
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv67.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv67.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv68.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv68.alt1.glif
new file mode 100644
index 0000000000..57175566bd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv68.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv68.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E175"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv68.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv68.alt2.glif
new file mode 100644
index 0000000000..5302f08e61
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv68.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv68.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E176"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv68.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv68.alt3.glif
new file mode 100644
index 0000000000..b63dbbdb80
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv68.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv68.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E177"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv68.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv68.default.glif
new file mode 100644
index 0000000000..d3cb0b90d0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv68.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv68.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E174"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv68.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv68.fail.glif
new file mode 100644
index 0000000000..29c8d631f2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv68.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv68.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv68.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv68.pass.glif
new file mode 100644
index 0000000000..024c4167a7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv68.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv68.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv69.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv69.alt1.glif
new file mode 100644
index 0000000000..b8576105a8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv69.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv69.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E179"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv69.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv69.alt2.glif
new file mode 100644
index 0000000000..b457849fd8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv69.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv69.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E17A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv69.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv69.alt3.glif
new file mode 100644
index 0000000000..43fc341bba
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv69.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv69.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E17B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv69.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv69.default.glif
new file mode 100644
index 0000000000..e3ca281ec0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv69.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv69.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E178"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv69.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv69.fail.glif
new file mode 100644
index 0000000000..3200c6ae38
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv69.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv69.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv69.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv69.pass.glif
new file mode 100644
index 0000000000..871752b037
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv69.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv69.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv70.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv70.alt1.glif
new file mode 100644
index 0000000000..737a9186cd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv70.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv70.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E17D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv70.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv70.alt2.glif
new file mode 100644
index 0000000000..a659a0bf6d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv70.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv70.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E17E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv70.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv70.alt3.glif
new file mode 100644
index 0000000000..c4be4ec7a4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv70.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv70.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E17F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv70.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv70.default.glif
new file mode 100644
index 0000000000..4014addddd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv70.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv70.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E17C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv70.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv70.fail.glif
new file mode 100644
index 0000000000..27ccf117fb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv70.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv70.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv70.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv70.pass.glif
new file mode 100644
index 0000000000..be9bbc4bdc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv70.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv70.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv71.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv71.alt1.glif
new file mode 100644
index 0000000000..5932b2c053
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv71.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv71.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E181"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv71.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv71.alt2.glif
new file mode 100644
index 0000000000..81ad331537
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv71.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv71.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E182"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv71.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv71.alt3.glif
new file mode 100644
index 0000000000..7d145eba5b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv71.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv71.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E183"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv71.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv71.default.glif
new file mode 100644
index 0000000000..4e6fe9eaed
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv71.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv71.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E180"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv71.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv71.fail.glif
new file mode 100644
index 0000000000..4046869653
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv71.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv71.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv71.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv71.pass.glif
new file mode 100644
index 0000000000..3b5d91711f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv71.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv71.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv72.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv72.alt1.glif
new file mode 100644
index 0000000000..9fa4294ef1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv72.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv72.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E185"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv72.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv72.alt2.glif
new file mode 100644
index 0000000000..6a8424b1af
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv72.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv72.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E186"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv72.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv72.alt3.glif
new file mode 100644
index 0000000000..e58078f837
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv72.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv72.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E187"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv72.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv72.default.glif
new file mode 100644
index 0000000000..21fa71c7bc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv72.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv72.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E184"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv72.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv72.fail.glif
new file mode 100644
index 0000000000..ee3777d5f6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv72.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv72.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv72.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv72.pass.glif
new file mode 100644
index 0000000000..7c0c75b63e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv72.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv72.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv73.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv73.alt1.glif
new file mode 100644
index 0000000000..c84ef904ef
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv73.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv73.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E189"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv73.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv73.alt2.glif
new file mode 100644
index 0000000000..ed3e965aeb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv73.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv73.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E18A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv73.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv73.alt3.glif
new file mode 100644
index 0000000000..50cad2e56d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv73.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv73.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E18B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv73.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv73.default.glif
new file mode 100644
index 0000000000..39d771e927
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv73.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv73.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E188"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv73.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv73.fail.glif
new file mode 100644
index 0000000000..a74b24eeb6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv73.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv73.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv73.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv73.pass.glif
new file mode 100644
index 0000000000..70c90b20d1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv73.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv73.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv74.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv74.alt1.glif
new file mode 100644
index 0000000000..8738a0dfb0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv74.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv74.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E18D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv74.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv74.alt2.glif
new file mode 100644
index 0000000000..b91a2d6648
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv74.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv74.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E18E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv74.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv74.alt3.glif
new file mode 100644
index 0000000000..a3f2429b32
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv74.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv74.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E18F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv74.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv74.default.glif
new file mode 100644
index 0000000000..77b3670c57
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv74.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv74.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E18C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv74.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv74.fail.glif
new file mode 100644
index 0000000000..69b6214bba
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv74.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv74.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv74.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv74.pass.glif
new file mode 100644
index 0000000000..05c74ca32a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv74.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv74.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv75.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv75.alt1.glif
new file mode 100644
index 0000000000..41ab714aeb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv75.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv75.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E191"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv75.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv75.alt2.glif
new file mode 100644
index 0000000000..8c983eda0f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv75.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv75.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E192"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv75.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv75.alt3.glif
new file mode 100644
index 0000000000..f9a2bbee17
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv75.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv75.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E193"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv75.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv75.default.glif
new file mode 100644
index 0000000000..4438d7160d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv75.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv75.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E190"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv75.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv75.fail.glif
new file mode 100644
index 0000000000..80286962d0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv75.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv75.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv75.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv75.pass.glif
new file mode 100644
index 0000000000..861bc4cce5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv75.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv75.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv76.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv76.alt1.glif
new file mode 100644
index 0000000000..701c19af4e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv76.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv76.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E195"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv76.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv76.alt2.glif
new file mode 100644
index 0000000000..4bca9bdd67
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv76.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv76.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E196"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv76.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv76.alt3.glif
new file mode 100644
index 0000000000..9496b1a6d5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv76.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv76.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E197"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv76.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv76.default.glif
new file mode 100644
index 0000000000..53009067bc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv76.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv76.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E194"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv76.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv76.fail.glif
new file mode 100644
index 0000000000..9f4a53cae9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv76.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv76.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv76.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv76.pass.glif
new file mode 100644
index 0000000000..f0b3f8c088
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv76.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv76.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv77.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv77.alt1.glif
new file mode 100644
index 0000000000..bceba7dd98
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv77.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv77.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E199"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv77.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv77.alt2.glif
new file mode 100644
index 0000000000..47bb097681
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv77.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv77.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E19A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv77.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv77.alt3.glif
new file mode 100644
index 0000000000..4610c9de11
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv77.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv77.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E19B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv77.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv77.default.glif
new file mode 100644
index 0000000000..eabda66ef5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv77.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv77.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E198"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv77.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv77.fail.glif
new file mode 100644
index 0000000000..5fe97d9d93
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv77.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv77.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv77.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv77.pass.glif
new file mode 100644
index 0000000000..f3048e44e2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv77.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv77.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv78.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv78.alt1.glif
new file mode 100644
index 0000000000..9c1578023b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv78.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv78.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E19D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv78.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv78.alt2.glif
new file mode 100644
index 0000000000..cf9c0681c7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv78.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv78.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E19E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv78.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv78.alt3.glif
new file mode 100644
index 0000000000..747fec0d75
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv78.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv78.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E19F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv78.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv78.default.glif
new file mode 100644
index 0000000000..fe55616006
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv78.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv78.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E19C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv78.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv78.fail.glif
new file mode 100644
index 0000000000..7030fb14d6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv78.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv78.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv78.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv78.pass.glif
new file mode 100644
index 0000000000..0b1c3ee95c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv78.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv78.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv79.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv79.alt1.glif
new file mode 100644
index 0000000000..35b767f991
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv79.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv79.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1A1"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv79.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv79.alt2.glif
new file mode 100644
index 0000000000..ab45059108
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv79.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv79.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1A2"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv79.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv79.alt3.glif
new file mode 100644
index 0000000000..f271f7e066
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv79.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv79.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1A3"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv79.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv79.default.glif
new file mode 100644
index 0000000000..5983ef65d4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv79.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv79.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E1A0"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv79.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv79.fail.glif
new file mode 100644
index 0000000000..60549bbe70
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv79.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv79.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv79.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv79.pass.glif
new file mode 100644
index 0000000000..5228757e49
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv79.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv79.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv80.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv80.alt1.glif
new file mode 100644
index 0000000000..675085b074
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv80.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv80.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1A5"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv80.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv80.alt2.glif
new file mode 100644
index 0000000000..b994c2fac5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv80.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv80.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1A6"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv80.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv80.alt3.glif
new file mode 100644
index 0000000000..4840985625
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv80.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv80.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1A7"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv80.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv80.default.glif
new file mode 100644
index 0000000000..e572382394
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv80.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv80.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E1A4"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv80.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv80.fail.glif
new file mode 100644
index 0000000000..e7d9eccaa1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv80.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv80.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv80.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv80.pass.glif
new file mode 100644
index 0000000000..c0b5be4ba5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv80.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv80.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv81.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv81.alt1.glif
new file mode 100644
index 0000000000..915ac31b6e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv81.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv81.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1A9"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv81.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv81.alt2.glif
new file mode 100644
index 0000000000..107c602c7f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv81.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv81.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1AA"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv81.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv81.alt3.glif
new file mode 100644
index 0000000000..8aec24085d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv81.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv81.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1AB"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv81.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv81.default.glif
new file mode 100644
index 0000000000..fd823c3c5d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv81.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv81.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E1A8"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv81.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv81.fail.glif
new file mode 100644
index 0000000000..47388d8858
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv81.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv81.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv81.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv81.pass.glif
new file mode 100644
index 0000000000..f9c3be3ce7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv81.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv81.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv82.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv82.alt1.glif
new file mode 100644
index 0000000000..d860fa983b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv82.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv82.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1AD"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv82.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv82.alt2.glif
new file mode 100644
index 0000000000..f5616a4d62
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv82.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv82.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1AE"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv82.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv82.alt3.glif
new file mode 100644
index 0000000000..69389c88b4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv82.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv82.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1AF"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv82.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv82.default.glif
new file mode 100644
index 0000000000..8a22fdda83
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv82.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv82.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E1AC"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv82.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv82.fail.glif
new file mode 100644
index 0000000000..0e366bd8b9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv82.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv82.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv82.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv82.pass.glif
new file mode 100644
index 0000000000..7b7464c48c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv82.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv82.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv83.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv83.alt1.glif
new file mode 100644
index 0000000000..5a471d94e1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv83.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv83.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1B1"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv83.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv83.alt2.glif
new file mode 100644
index 0000000000..ccaf0e4d4a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv83.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv83.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1B2"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv83.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv83.alt3.glif
new file mode 100644
index 0000000000..f442366f1e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv83.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv83.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1B3"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv83.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv83.default.glif
new file mode 100644
index 0000000000..01f2491654
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv83.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv83.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E1B0"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv83.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv83.fail.glif
new file mode 100644
index 0000000000..dd5f7a4ae2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv83.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv83.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv83.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv83.pass.glif
new file mode 100644
index 0000000000..8a1511b7d0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv83.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv83.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv84.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv84.alt1.glif
new file mode 100644
index 0000000000..e24b485095
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv84.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv84.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1B5"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv84.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv84.alt2.glif
new file mode 100644
index 0000000000..e90915f1f7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv84.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv84.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1B6"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv84.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv84.alt3.glif
new file mode 100644
index 0000000000..abb3ff91ea
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv84.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv84.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1B7"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv84.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv84.default.glif
new file mode 100644
index 0000000000..d63f75837a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv84.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv84.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E1B4"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv84.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv84.fail.glif
new file mode 100644
index 0000000000..d192355993
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv84.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv84.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv84.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv84.pass.glif
new file mode 100644
index 0000000000..7c2fddc428
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv84.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv84.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv85.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv85.alt1.glif
new file mode 100644
index 0000000000..f34601be79
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv85.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv85.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1B9"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv85.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv85.alt2.glif
new file mode 100644
index 0000000000..c0f1789c0c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv85.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv85.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1BA"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv85.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv85.alt3.glif
new file mode 100644
index 0000000000..930fcc9830
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv85.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv85.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1BB"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv85.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv85.default.glif
new file mode 100644
index 0000000000..de0cfb2f9a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv85.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv85.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E1B8"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv85.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv85.fail.glif
new file mode 100644
index 0000000000..c68b861fe5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv85.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv85.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv85.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv85.pass.glif
new file mode 100644
index 0000000000..9e0ed6202a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv85.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv85.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv86.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv86.alt1.glif
new file mode 100644
index 0000000000..468f8ee09f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv86.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv86.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1BD"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv86.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv86.alt2.glif
new file mode 100644
index 0000000000..bb895cc8be
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv86.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv86.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1BE"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv86.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv86.alt3.glif
new file mode 100644
index 0000000000..b7abb75295
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv86.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv86.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1BF"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv86.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv86.default.glif
new file mode 100644
index 0000000000..36fe616f47
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv86.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv86.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E1BC"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv86.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv86.fail.glif
new file mode 100644
index 0000000000..a2f2b73962
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv86.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv86.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv86.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv86.pass.glif
new file mode 100644
index 0000000000..1049b37606
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv86.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv86.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv87.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv87.alt1.glif
new file mode 100644
index 0000000000..8ceb6157c3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv87.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv87.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1C1"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv87.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv87.alt2.glif
new file mode 100644
index 0000000000..c739612fbc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv87.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv87.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1C2"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv87.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv87.alt3.glif
new file mode 100644
index 0000000000..096f720cea
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv87.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv87.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1C3"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv87.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv87.default.glif
new file mode 100644
index 0000000000..26a5815b95
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv87.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv87.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E1C0"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv87.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv87.fail.glif
new file mode 100644
index 0000000000..146f7bbb78
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv87.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv87.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv87.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv87.pass.glif
new file mode 100644
index 0000000000..1d24732fa9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv87.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv87.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv88.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv88.alt1.glif
new file mode 100644
index 0000000000..3e254a709c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv88.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv88.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1C5"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv88.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv88.alt2.glif
new file mode 100644
index 0000000000..92449d33a5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv88.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv88.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1C6"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv88.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv88.alt3.glif
new file mode 100644
index 0000000000..caf5dfd982
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv88.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv88.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1C7"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv88.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv88.default.glif
new file mode 100644
index 0000000000..5406bf8c2f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv88.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv88.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E1C4"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv88.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv88.fail.glif
new file mode 100644
index 0000000000..6f0b52e335
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv88.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv88.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv88.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv88.pass.glif
new file mode 100644
index 0000000000..d2bd5d9a93
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv88.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv88.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv89.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv89.alt1.glif
new file mode 100644
index 0000000000..021777b3a9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv89.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv89.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1C9"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv89.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv89.alt2.glif
new file mode 100644
index 0000000000..4ff509f83a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv89.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv89.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1CA"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv89.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv89.alt3.glif
new file mode 100644
index 0000000000..66c8f80c88
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv89.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv89.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1CB"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv89.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv89.default.glif
new file mode 100644
index 0000000000..bde2219031
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv89.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv89.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E1C8"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv89.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv89.fail.glif
new file mode 100644
index 0000000000..4438fd933e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv89.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv89.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv89.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv89.pass.glif
new file mode 100644
index 0000000000..b929f39a0d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv89.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv89.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv90.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv90.alt1.glif
new file mode 100644
index 0000000000..ee5314c05b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv90.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv90.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1CD"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv90.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv90.alt2.glif
new file mode 100644
index 0000000000..6952b46d0a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv90.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv90.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1CE"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv90.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv90.alt3.glif
new file mode 100644
index 0000000000..9f8ff15093
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv90.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv90.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1CF"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv90.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv90.default.glif
new file mode 100644
index 0000000000..b97feb7e03
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv90.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv90.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E1CC"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv90.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv90.fail.glif
new file mode 100644
index 0000000000..be6aac9f48
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv90.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv90.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv90.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv90.pass.glif
new file mode 100644
index 0000000000..0f363b9b15
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv90.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv90.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv91.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv91.alt1.glif
new file mode 100644
index 0000000000..91cdc85b17
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv91.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv91.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1D1"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv91.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv91.alt2.glif
new file mode 100644
index 0000000000..6d9a2b5754
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv91.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv91.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1D2"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv91.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv91.alt3.glif
new file mode 100644
index 0000000000..e4993aa110
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv91.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv91.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1D3"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv91.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv91.default.glif
new file mode 100644
index 0000000000..8967894b81
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv91.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv91.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E1D0"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv91.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv91.fail.glif
new file mode 100644
index 0000000000..95db44de48
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv91.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv91.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv91.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv91.pass.glif
new file mode 100644
index 0000000000..8a4cc66959
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv91.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv91.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv92.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv92.alt1.glif
new file mode 100644
index 0000000000..886cfaf040
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv92.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv92.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1D5"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv92.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv92.alt2.glif
new file mode 100644
index 0000000000..12afe50ceb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv92.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv92.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1D6"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv92.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv92.alt3.glif
new file mode 100644
index 0000000000..9b931715aa
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv92.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv92.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1D7"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv92.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv92.default.glif
new file mode 100644
index 0000000000..e44cc763e2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv92.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv92.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E1D4"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv92.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv92.fail.glif
new file mode 100644
index 0000000000..8735ee5b38
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv92.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv92.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv92.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv92.pass.glif
new file mode 100644
index 0000000000..1a37bb8803
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv92.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv92.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv93.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv93.alt1.glif
new file mode 100644
index 0000000000..c6eadc8284
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv93.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv93.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1D9"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv93.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv93.alt2.glif
new file mode 100644
index 0000000000..90b41d7a1a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv93.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv93.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1DA"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv93.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv93.alt3.glif
new file mode 100644
index 0000000000..c20a5f7034
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv93.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv93.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1DB"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv93.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv93.default.glif
new file mode 100644
index 0000000000..d670251c96
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv93.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv93.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E1D8"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv93.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv93.fail.glif
new file mode 100644
index 0000000000..11f8aa312c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv93.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv93.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv93.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv93.pass.glif
new file mode 100644
index 0000000000..b2121494c9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv93.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv93.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv94.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv94.alt1.glif
new file mode 100644
index 0000000000..3cb4aaf796
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv94.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv94.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1DD"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv94.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv94.alt2.glif
new file mode 100644
index 0000000000..a36212710f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv94.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv94.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1DE"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv94.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv94.alt3.glif
new file mode 100644
index 0000000000..d045462565
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv94.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv94.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1DF"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv94.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv94.default.glif
new file mode 100644
index 0000000000..4ac8461f7a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv94.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv94.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E1DC"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv94.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv94.fail.glif
new file mode 100644
index 0000000000..175b9f2465
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv94.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv94.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv94.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv94.pass.glif
new file mode 100644
index 0000000000..b4cb5ed32f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv94.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv94.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv95.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv95.alt1.glif
new file mode 100644
index 0000000000..50414b9474
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv95.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv95.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1E1"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv95.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv95.alt2.glif
new file mode 100644
index 0000000000..c09ac92f7f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv95.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv95.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1E2"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv95.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv95.alt3.glif
new file mode 100644
index 0000000000..acdb11c1b8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv95.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv95.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1E3"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv95.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv95.default.glif
new file mode 100644
index 0000000000..29b21d6849
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv95.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv95.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E1E0"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv95.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv95.fail.glif
new file mode 100644
index 0000000000..cc6fa40f3b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv95.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv95.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv95.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv95.pass.glif
new file mode 100644
index 0000000000..7a8e634a40
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv95.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv95.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv96.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv96.alt1.glif
new file mode 100644
index 0000000000..f2591e2a0e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv96.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv96.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1E5"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv96.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv96.alt2.glif
new file mode 100644
index 0000000000..289eabfb87
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv96.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv96.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1E6"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv96.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv96.alt3.glif
new file mode 100644
index 0000000000..8ca54448b9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv96.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv96.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1E7"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv96.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv96.default.glif
new file mode 100644
index 0000000000..51b0034bb6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv96.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv96.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E1E4"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv96.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv96.fail.glif
new file mode 100644
index 0000000000..2655b9c9cb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv96.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv96.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv96.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv96.pass.glif
new file mode 100644
index 0000000000..51fcde716f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv96.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv96.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv97.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv97.alt1.glif
new file mode 100644
index 0000000000..1ab80089cb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv97.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv97.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1E9"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv97.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv97.alt2.glif
new file mode 100644
index 0000000000..d8211a4ec8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv97.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv97.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1EA"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv97.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv97.alt3.glif
new file mode 100644
index 0000000000..62d61a1e59
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv97.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv97.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1EB"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv97.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv97.default.glif
new file mode 100644
index 0000000000..d108a407be
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv97.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv97.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E1E8"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv97.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv97.fail.glif
new file mode 100644
index 0000000000..725ca9f01f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv97.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv97.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv97.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv97.pass.glif
new file mode 100644
index 0000000000..6f187b218f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv97.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv97.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv98.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv98.alt1.glif
new file mode 100644
index 0000000000..fca2f7971e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv98.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv98.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1ED"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv98.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv98.alt2.glif
new file mode 100644
index 0000000000..28d762bcc2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv98.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv98.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1EE"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv98.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv98.alt3.glif
new file mode 100644
index 0000000000..3a9c482123
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv98.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv98.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1EF"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv98.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv98.default.glif
new file mode 100644
index 0000000000..32fbba754c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv98.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv98.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E1EC"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv98.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv98.fail.glif
new file mode 100644
index 0000000000..09389db50f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv98.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv98.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv98.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv98.pass.glif
new file mode 100644
index 0000000000..e683435032
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv98.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv98.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv99.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv99.alt1.glif
new file mode 100644
index 0000000000..7d3a0a5ac7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv99.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv99.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1F1"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv99.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv99.alt2.glif
new file mode 100644
index 0000000000..ce3e4b5db8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv99.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv99.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1F2"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv99.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv99.alt3.glif
new file mode 100644
index 0000000000..8c88f75d63
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv99.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv99.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1F3"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv99.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv99.default.glif
new file mode 100644
index 0000000000..d7fdae323d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv99.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv99.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E1F0"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv99.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv99.fail.glif
new file mode 100644
index 0000000000..f2a4a13b91
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv99.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv99.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv99.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv99.pass.glif
new file mode 100644
index 0000000000..4d79c55a74
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/cv99.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="cv99.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dist.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dist.alt1.glif
new file mode 100644
index 0000000000..fd3a9d5024
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dist.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="dist.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1F5"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dist.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dist.alt2.glif
new file mode 100644
index 0000000000..2c5487004d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dist.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="dist.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1F6"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dist.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dist.alt3.glif
new file mode 100644
index 0000000000..a67f2ef383
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dist.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="dist.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1F7"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dist.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dist.default.glif
new file mode 100644
index 0000000000..d69f7a3349
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dist.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="dist.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E1F4"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dist.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dist.fail.glif
new file mode 100644
index 0000000000..e3623c3772
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dist.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="dist.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dist.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dist.pass.glif
new file mode 100644
index 0000000000..74222a94b7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dist.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="dist.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dlig.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dlig.alt1.glif
new file mode 100644
index 0000000000..101bf05c9f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dlig.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="dlig.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1F9"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dlig.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dlig.alt2.glif
new file mode 100644
index 0000000000..0a98651cb6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dlig.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="dlig.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1FA"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dlig.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dlig.alt3.glif
new file mode 100644
index 0000000000..31f3c5ddc6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dlig.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="dlig.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1FB"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dlig.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dlig.default.glif
new file mode 100644
index 0000000000..be44f3355e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dlig.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="dlig.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E1F8"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dlig.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dlig.fail.glif
new file mode 100644
index 0000000000..ccf98a04e5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dlig.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="dlig.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dlig.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dlig.pass.glif
new file mode 100644
index 0000000000..b9bee4d44c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dlig.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="dlig.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dnom.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dnom.alt1.glif
new file mode 100644
index 0000000000..5c6bd7f988
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dnom.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="dnom.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1FD"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dnom.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dnom.alt2.glif
new file mode 100644
index 0000000000..7d29abd4db
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dnom.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="dnom.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1FE"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dnom.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dnom.alt3.glif
new file mode 100644
index 0000000000..5a74363a59
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dnom.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="dnom.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E1FF"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dnom.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dnom.default.glif
new file mode 100644
index 0000000000..6b75d766aa
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dnom.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="dnom.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E1FC"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dnom.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dnom.fail.glif
new file mode 100644
index 0000000000..d08f78af48
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dnom.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="dnom.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dnom.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dnom.pass.glif
new file mode 100644
index 0000000000..ac449b75ea
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/dnom.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="dnom.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/expt.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/expt.alt1.glif
new file mode 100644
index 0000000000..60c84de7a8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/expt.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="expt.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E201"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/expt.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/expt.alt2.glif
new file mode 100644
index 0000000000..1151f14528
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/expt.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="expt.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E202"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/expt.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/expt.alt3.glif
new file mode 100644
index 0000000000..212b6081b1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/expt.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="expt.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E203"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/expt.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/expt.default.glif
new file mode 100644
index 0000000000..409afeaaf0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/expt.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="expt.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E200"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/expt.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/expt.fail.glif
new file mode 100644
index 0000000000..20147feaea
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/expt.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="expt.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/expt.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/expt.pass.glif
new file mode 100644
index 0000000000..ea8dc17ad4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/expt.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="expt.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/falt.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/falt.alt1.glif
new file mode 100644
index 0000000000..6a0f920056
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/falt.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="falt.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E205"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/falt.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/falt.alt2.glif
new file mode 100644
index 0000000000..c718c6db21
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/falt.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="falt.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E206"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/falt.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/falt.alt3.glif
new file mode 100644
index 0000000000..2d1f65bbaa
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/falt.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="falt.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E207"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/falt.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/falt.default.glif
new file mode 100644
index 0000000000..43e1779217
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/falt.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="falt.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E204"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/falt.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/falt.fail.glif
new file mode 100644
index 0000000000..3982f3634f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/falt.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="falt.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/falt.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/falt.pass.glif
new file mode 100644
index 0000000000..f29eda5343
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/falt.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="falt.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin2.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin2.alt1.glif
new file mode 100644
index 0000000000..952c7be078
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin2.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="fin2.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E209"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin2.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin2.alt2.glif
new file mode 100644
index 0000000000..4e9b6eafae
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin2.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="fin2.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E20A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin2.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin2.alt3.glif
new file mode 100644
index 0000000000..08e8d63deb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin2.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="fin2.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E20B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin2.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin2.default.glif
new file mode 100644
index 0000000000..21f7f4d179
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin2.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="fin2.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E208"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin2.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin2.fail.glif
new file mode 100644
index 0000000000..9e492626dd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin2.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="fin2.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin2.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin2.pass.glif
new file mode 100644
index 0000000000..88be431c63
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin2.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="fin2.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin3.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin3.alt1.glif
new file mode 100644
index 0000000000..ec942baa63
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin3.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="fin3.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E20D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin3.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin3.alt2.glif
new file mode 100644
index 0000000000..6b0603d18e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin3.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="fin3.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E20E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin3.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin3.alt3.glif
new file mode 100644
index 0000000000..85a8a3e759
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin3.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="fin3.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E20F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin3.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin3.default.glif
new file mode 100644
index 0000000000..68beb0ca85
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin3.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="fin3.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E20C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin3.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin3.fail.glif
new file mode 100644
index 0000000000..fb34a8872a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin3.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="fin3.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin3.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin3.pass.glif
new file mode 100644
index 0000000000..5b32fde1f8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fin3.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="fin3.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fina.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fina.alt1.glif
new file mode 100644
index 0000000000..8dfd22e86b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fina.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="fina.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E211"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fina.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fina.alt2.glif
new file mode 100644
index 0000000000..81de0e4774
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fina.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="fina.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E212"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fina.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fina.alt3.glif
new file mode 100644
index 0000000000..42f813f387
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fina.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="fina.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E213"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fina.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fina.default.glif
new file mode 100644
index 0000000000..db5ed43e42
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fina.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="fina.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E210"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fina.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fina.fail.glif
new file mode 100644
index 0000000000..b5cacd30ad
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fina.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="fina.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fina.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fina.pass.glif
new file mode 100644
index 0000000000..f0f49df287
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fina.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="fina.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/frac.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/frac.alt1.glif
new file mode 100644
index 0000000000..d3bc08982f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/frac.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="frac.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E215"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/frac.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/frac.alt2.glif
new file mode 100644
index 0000000000..399c5951ac
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/frac.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="frac.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E216"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/frac.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/frac.alt3.glif
new file mode 100644
index 0000000000..5325f8af02
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/frac.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="frac.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E217"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/frac.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/frac.default.glif
new file mode 100644
index 0000000000..ab601e498e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/frac.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="frac.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E214"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/frac.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/frac.fail.glif
new file mode 100644
index 0000000000..0ee699f4c3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/frac.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="frac.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/frac.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/frac.pass.glif
new file mode 100644
index 0000000000..1343633cbc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/frac.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="frac.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fwid.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fwid.alt1.glif
new file mode 100644
index 0000000000..4c8f9d6093
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fwid.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="fwid.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E219"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fwid.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fwid.alt2.glif
new file mode 100644
index 0000000000..ffd73b850f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fwid.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="fwid.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E21A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fwid.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fwid.alt3.glif
new file mode 100644
index 0000000000..5a20388ab7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fwid.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="fwid.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E21B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fwid.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fwid.default.glif
new file mode 100644
index 0000000000..4111d9001c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fwid.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="fwid.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E218"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fwid.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fwid.fail.glif
new file mode 100644
index 0000000000..49947f8d6b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fwid.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="fwid.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fwid.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fwid.pass.glif
new file mode 100644
index 0000000000..948bc35dca
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/fwid.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="fwid.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/half.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/half.alt1.glif
new file mode 100644
index 0000000000..54d76daa64
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/half.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="half.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E21D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/half.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/half.alt2.glif
new file mode 100644
index 0000000000..ee7fd208da
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/half.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="half.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E21E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/half.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/half.alt3.glif
new file mode 100644
index 0000000000..a2ab735d3e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/half.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="half.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E21F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/half.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/half.default.glif
new file mode 100644
index 0000000000..56e77bb775
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/half.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="half.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E21C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/half.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/half.fail.glif
new file mode 100644
index 0000000000..3a1acffed5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/half.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="half.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/half.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/half.pass.glif
new file mode 100644
index 0000000000..9a8dfcb3a9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/half.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="half.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/haln.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/haln.alt1.glif
new file mode 100644
index 0000000000..6ab0d3a53c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/haln.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="haln.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E221"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/haln.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/haln.alt2.glif
new file mode 100644
index 0000000000..4c6725a480
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/haln.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="haln.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E222"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/haln.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/haln.alt3.glif
new file mode 100644
index 0000000000..62cbe4a762
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/haln.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="haln.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E223"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/haln.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/haln.default.glif
new file mode 100644
index 0000000000..a8185ff301
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/haln.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="haln.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E220"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/haln.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/haln.fail.glif
new file mode 100644
index 0000000000..fdd93da792
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/haln.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="haln.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/haln.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/haln.pass.glif
new file mode 100644
index 0000000000..7d842be32a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/haln.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="haln.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/halt.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/halt.alt1.glif
new file mode 100644
index 0000000000..89f9109469
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/halt.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="halt.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E225"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/halt.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/halt.alt2.glif
new file mode 100644
index 0000000000..6863e81c51
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/halt.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="halt.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E226"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/halt.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/halt.alt3.glif
new file mode 100644
index 0000000000..5b195c4b4b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/halt.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="halt.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E227"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/halt.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/halt.default.glif
new file mode 100644
index 0000000000..8bf41a6aec
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/halt.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="halt.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E224"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/halt.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/halt.fail.glif
new file mode 100644
index 0000000000..2344d1951f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/halt.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="halt.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/halt.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/halt.pass.glif
new file mode 100644
index 0000000000..32a8b87497
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/halt.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="halt.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hist.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hist.alt1.glif
new file mode 100644
index 0000000000..bf11e44002
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hist.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hist.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E229"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hist.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hist.alt2.glif
new file mode 100644
index 0000000000..3cd865404b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hist.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hist.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E22A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hist.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hist.alt3.glif
new file mode 100644
index 0000000000..fc30d13f25
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hist.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hist.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E22B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hist.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hist.default.glif
new file mode 100644
index 0000000000..6c85b889d4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hist.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hist.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E228"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hist.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hist.fail.glif
new file mode 100644
index 0000000000..db9d09ffa3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hist.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hist.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hist.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hist.pass.glif
new file mode 100644
index 0000000000..70f82d49f3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hist.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hist.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hkna.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hkna.alt1.glif
new file mode 100644
index 0000000000..933941fc73
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hkna.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hkna.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E22D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hkna.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hkna.alt2.glif
new file mode 100644
index 0000000000..02672ad33d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hkna.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hkna.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E22E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hkna.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hkna.alt3.glif
new file mode 100644
index 0000000000..048bb54eda
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hkna.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hkna.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E22F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hkna.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hkna.default.glif
new file mode 100644
index 0000000000..841502b34d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hkna.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hkna.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E22C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hkna.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hkna.fail.glif
new file mode 100644
index 0000000000..02b3d94d9f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hkna.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hkna.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hkna.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hkna.pass.glif
new file mode 100644
index 0000000000..6851406146
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hkna.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hkna.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hlig.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hlig.alt1.glif
new file mode 100644
index 0000000000..af05b2fd18
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hlig.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hlig.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E231"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hlig.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hlig.alt2.glif
new file mode 100644
index 0000000000..d4dc0d9ba4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hlig.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hlig.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E232"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hlig.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hlig.alt3.glif
new file mode 100644
index 0000000000..aea9c297e6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hlig.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hlig.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E233"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hlig.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hlig.default.glif
new file mode 100644
index 0000000000..901f11bed0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hlig.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hlig.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E230"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hlig.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hlig.fail.glif
new file mode 100644
index 0000000000..66aef55b3d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hlig.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hlig.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hlig.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hlig.pass.glif
new file mode 100644
index 0000000000..aab8cf6804
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hlig.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hlig.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hngl.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hngl.alt1.glif
new file mode 100644
index 0000000000..abed0ff623
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hngl.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hngl.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E235"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hngl.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hngl.alt2.glif
new file mode 100644
index 0000000000..bd0e7ded18
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hngl.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hngl.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E236"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hngl.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hngl.alt3.glif
new file mode 100644
index 0000000000..83f301bb44
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hngl.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hngl.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E237"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hngl.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hngl.default.glif
new file mode 100644
index 0000000000..713a163a31
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hngl.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hngl.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E234"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hngl.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hngl.fail.glif
new file mode 100644
index 0000000000..0571402add
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hngl.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hngl.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hngl.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hngl.pass.glif
new file mode 100644
index 0000000000..4d96bda256
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hngl.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hngl.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hojo.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hojo.alt1.glif
new file mode 100644
index 0000000000..4eb576173f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hojo.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hojo.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E239"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hojo.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hojo.alt2.glif
new file mode 100644
index 0000000000..105b6cb8f5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hojo.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hojo.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E23A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hojo.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hojo.alt3.glif
new file mode 100644
index 0000000000..6929e4a65c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hojo.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hojo.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E23B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hojo.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hojo.default.glif
new file mode 100644
index 0000000000..f5b8d5800c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hojo.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hojo.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E238"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hojo.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hojo.fail.glif
new file mode 100644
index 0000000000..828443a2d2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hojo.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hojo.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hojo.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hojo.pass.glif
new file mode 100644
index 0000000000..ea22fde0d3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hojo.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hojo.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hwid.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hwid.alt1.glif
new file mode 100644
index 0000000000..78c171b55f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hwid.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hwid.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E23D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hwid.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hwid.alt2.glif
new file mode 100644
index 0000000000..a8b8900321
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hwid.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hwid.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E23E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hwid.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hwid.alt3.glif
new file mode 100644
index 0000000000..3d0dd60bb3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hwid.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hwid.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E23F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hwid.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hwid.default.glif
new file mode 100644
index 0000000000..d2557aa915
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hwid.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hwid.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E23C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hwid.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hwid.fail.glif
new file mode 100644
index 0000000000..e45eee6c06
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hwid.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hwid.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hwid.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hwid.pass.glif
new file mode 100644
index 0000000000..364cc8f511
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/hwid.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="hwid.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/init.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/init.alt1.glif
new file mode 100644
index 0000000000..bc780e8703
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/init.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="init.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E241"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/init.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/init.alt2.glif
new file mode 100644
index 0000000000..76fc1c0b4e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/init.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="init.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E242"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/init.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/init.alt3.glif
new file mode 100644
index 0000000000..81edffd380
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/init.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="init.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E243"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/init.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/init.default.glif
new file mode 100644
index 0000000000..44dec25a9b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/init.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="init.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E240"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/init.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/init.fail.glif
new file mode 100644
index 0000000000..aa2f7d338b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/init.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="init.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/init.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/init.pass.glif
new file mode 100644
index 0000000000..655d92d177
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/init.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="init.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/isol.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/isol.alt1.glif
new file mode 100644
index 0000000000..1394ea13e3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/isol.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="isol.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E245"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/isol.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/isol.alt2.glif
new file mode 100644
index 0000000000..2dfb5823ec
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/isol.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="isol.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E246"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/isol.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/isol.alt3.glif
new file mode 100644
index 0000000000..fa80872f0e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/isol.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="isol.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E247"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/isol.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/isol.default.glif
new file mode 100644
index 0000000000..78fe164991
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/isol.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="isol.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E244"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/isol.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/isol.fail.glif
new file mode 100644
index 0000000000..6bd56adc3c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/isol.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="isol.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/isol.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/isol.pass.glif
new file mode 100644
index 0000000000..270ce24054
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/isol.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="isol.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ital.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ital.alt1.glif
new file mode 100644
index 0000000000..8100ac9625
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ital.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ital.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E249"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ital.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ital.alt2.glif
new file mode 100644
index 0000000000..ae30da44ef
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ital.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ital.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E24A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ital.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ital.alt3.glif
new file mode 100644
index 0000000000..5c087e242a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ital.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ital.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E24B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ital.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ital.default.glif
new file mode 100644
index 0000000000..8f6ef018bc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ital.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ital.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E248"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ital.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ital.fail.glif
new file mode 100644
index 0000000000..bfc7da8eb8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ital.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ital.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ital.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ital.pass.glif
new file mode 100644
index 0000000000..cd41412d32
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ital.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ital.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jalt.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jalt.alt1.glif
new file mode 100644
index 0000000000..8a4fc036de
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jalt.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jalt.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E24D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jalt.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jalt.alt2.glif
new file mode 100644
index 0000000000..bfcbcf112e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jalt.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jalt.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E24E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jalt.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jalt.alt3.glif
new file mode 100644
index 0000000000..c858bd5443
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jalt.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jalt.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E24F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jalt.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jalt.default.glif
new file mode 100644
index 0000000000..d978567df0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jalt.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jalt.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E24C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jalt.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jalt.fail.glif
new file mode 100644
index 0000000000..31d76a56e5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jalt.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jalt.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jalt.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jalt.pass.glif
new file mode 100644
index 0000000000..622c685ef9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jalt.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jalt.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp04.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp04.alt1.glif
new file mode 100644
index 0000000000..7fa1b2f18a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp04.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jp04.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E251"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp04.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp04.alt2.glif
new file mode 100644
index 0000000000..e0646a533e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp04.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jp04.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E252"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp04.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp04.alt3.glif
new file mode 100644
index 0000000000..1c4fd988d5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp04.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jp04.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E253"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp04.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp04.default.glif
new file mode 100644
index 0000000000..b3f22789f4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp04.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jp04.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E250"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp04.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp04.fail.glif
new file mode 100644
index 0000000000..b1846ac600
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp04.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jp04.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp04.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp04.pass.glif
new file mode 100644
index 0000000000..18796d9ac4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp04.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jp04.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp78.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp78.alt1.glif
new file mode 100644
index 0000000000..9ebec86c56
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp78.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jp78.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E255"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp78.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp78.alt2.glif
new file mode 100644
index 0000000000..497a30abb5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp78.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jp78.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E256"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp78.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp78.alt3.glif
new file mode 100644
index 0000000000..dad79d3755
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp78.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jp78.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E257"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp78.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp78.default.glif
new file mode 100644
index 0000000000..12f29deea6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp78.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jp78.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E254"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp78.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp78.fail.glif
new file mode 100644
index 0000000000..09560c2533
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp78.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jp78.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp78.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp78.pass.glif
new file mode 100644
index 0000000000..867c6ae619
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp78.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jp78.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp83.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp83.alt1.glif
new file mode 100644
index 0000000000..1bbb213cad
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp83.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jp83.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E259"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp83.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp83.alt2.glif
new file mode 100644
index 0000000000..d6e3d4a37a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp83.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jp83.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E25A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp83.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp83.alt3.glif
new file mode 100644
index 0000000000..0d79b61fd3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp83.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jp83.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E25B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp83.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp83.default.glif
new file mode 100644
index 0000000000..f3bab1528c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp83.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jp83.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E258"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp83.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp83.fail.glif
new file mode 100644
index 0000000000..670908ac5b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp83.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jp83.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp83.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp83.pass.glif
new file mode 100644
index 0000000000..6ca2320fd6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp83.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jp83.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp90.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp90.alt1.glif
new file mode 100644
index 0000000000..a4125a32fa
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp90.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jp90.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E25D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp90.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp90.alt2.glif
new file mode 100644
index 0000000000..6227f95b11
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp90.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jp90.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E25E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp90.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp90.alt3.glif
new file mode 100644
index 0000000000..b7470e02db
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp90.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jp90.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E25F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp90.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp90.default.glif
new file mode 100644
index 0000000000..9dbc0ff03b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp90.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jp90.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E25C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp90.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp90.fail.glif
new file mode 100644
index 0000000000..8da7c37c5d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp90.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jp90.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp90.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp90.pass.glif
new file mode 100644
index 0000000000..6739e166b6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/jp90.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="jp90.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/kern.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/kern.alt1.glif
new file mode 100644
index 0000000000..ee71696864
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/kern.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="kern.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E261"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/kern.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/kern.alt2.glif
new file mode 100644
index 0000000000..208354c58e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/kern.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="kern.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E262"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/kern.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/kern.alt3.glif
new file mode 100644
index 0000000000..fb583159e8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/kern.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="kern.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E263"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/kern.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/kern.default.glif
new file mode 100644
index 0000000000..973db0ae67
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/kern.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="kern.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E260"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/kern.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/kern.fail.glif
new file mode 100644
index 0000000000..c4dcca0943
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/kern.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="kern.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/kern.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/kern.pass.glif
new file mode 100644
index 0000000000..2d9a73b3a5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/kern.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="kern.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lfbd.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lfbd.alt1.glif
new file mode 100644
index 0000000000..fd368caf44
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lfbd.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="lfbd.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E265"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lfbd.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lfbd.alt2.glif
new file mode 100644
index 0000000000..2ed8f14753
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lfbd.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="lfbd.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E266"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lfbd.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lfbd.alt3.glif
new file mode 100644
index 0000000000..9839011e65
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lfbd.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="lfbd.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E267"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lfbd.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lfbd.default.glif
new file mode 100644
index 0000000000..4d4ac860c9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lfbd.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="lfbd.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E264"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lfbd.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lfbd.fail.glif
new file mode 100644
index 0000000000..76be7e2d61
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lfbd.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="lfbd.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lfbd.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lfbd.pass.glif
new file mode 100644
index 0000000000..7010938dc2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lfbd.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="lfbd.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/liga.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/liga.alt1.glif
new file mode 100644
index 0000000000..462cd84b17
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/liga.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="liga.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E269"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/liga.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/liga.alt2.glif
new file mode 100644
index 0000000000..7818bd3fff
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/liga.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="liga.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E26A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/liga.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/liga.alt3.glif
new file mode 100644
index 0000000000..dcc910831f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/liga.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="liga.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E26B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/liga.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/liga.default.glif
new file mode 100644
index 0000000000..ca22157ce2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/liga.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="liga.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E268"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/liga.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/liga.fail.glif
new file mode 100644
index 0000000000..8668519978
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/liga.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="liga.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/liga.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/liga.pass.glif
new file mode 100644
index 0000000000..340d6acdf2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/liga.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="liga.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ljmo.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ljmo.alt1.glif
new file mode 100644
index 0000000000..9cf7a16190
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ljmo.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ljmo.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E26D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ljmo.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ljmo.alt2.glif
new file mode 100644
index 0000000000..98ac6d777a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ljmo.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ljmo.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E26E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ljmo.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ljmo.alt3.glif
new file mode 100644
index 0000000000..6a95cc489e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ljmo.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ljmo.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E26F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ljmo.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ljmo.default.glif
new file mode 100644
index 0000000000..0c726bfe4e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ljmo.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ljmo.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E26C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ljmo.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ljmo.fail.glif
new file mode 100644
index 0000000000..8929f7dc38
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ljmo.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ljmo.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ljmo.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ljmo.pass.glif
new file mode 100644
index 0000000000..44e4f17c02
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ljmo.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ljmo.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lnum.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lnum.alt1.glif
new file mode 100644
index 0000000000..7bce4f914b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lnum.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="lnum.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E271"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lnum.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lnum.alt2.glif
new file mode 100644
index 0000000000..6f91356718
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lnum.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="lnum.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E272"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lnum.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lnum.alt3.glif
new file mode 100644
index 0000000000..3bd6261b2f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lnum.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="lnum.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E273"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lnum.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lnum.default.glif
new file mode 100644
index 0000000000..ae25b7f51d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lnum.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="lnum.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E270"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lnum.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lnum.fail.glif
new file mode 100644
index 0000000000..d14ce2d10a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lnum.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="lnum.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lnum.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lnum.pass.glif
new file mode 100644
index 0000000000..77d5ff3128
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/lnum.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="lnum.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/locl.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/locl.alt1.glif
new file mode 100644
index 0000000000..8496382856
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/locl.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="locl.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E275"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/locl.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/locl.alt2.glif
new file mode 100644
index 0000000000..81d8c4f40d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/locl.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="locl.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E276"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/locl.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/locl.alt3.glif
new file mode 100644
index 0000000000..2eb83ecd65
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/locl.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="locl.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E277"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/locl.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/locl.default.glif
new file mode 100644
index 0000000000..d86b43ef99
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/locl.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="locl.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E274"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/locl.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/locl.fail.glif
new file mode 100644
index 0000000000..6d57f99bec
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/locl.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="locl.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/locl.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/locl.pass.glif
new file mode 100644
index 0000000000..205615e3f0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/locl.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="locl.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltra.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltra.alt1.glif
new file mode 100644
index 0000000000..2a5f22dd32
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltra.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ltra.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E279"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltra.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltra.alt2.glif
new file mode 100644
index 0000000000..d585394a36
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltra.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ltra.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E27A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltra.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltra.alt3.glif
new file mode 100644
index 0000000000..8b4138f84b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltra.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ltra.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E27B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltra.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltra.default.glif
new file mode 100644
index 0000000000..ed827c36bb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltra.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ltra.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E278"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltra.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltra.fail.glif
new file mode 100644
index 0000000000..97e6305e5c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltra.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ltra.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltra.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltra.pass.glif
new file mode 100644
index 0000000000..2a10000c87
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltra.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ltra.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltrm.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltrm.alt1.glif
new file mode 100644
index 0000000000..6236462fa0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltrm.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ltrm.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E27D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltrm.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltrm.alt2.glif
new file mode 100644
index 0000000000..d89730f132
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltrm.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ltrm.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E27E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltrm.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltrm.alt3.glif
new file mode 100644
index 0000000000..ff63f4905d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltrm.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ltrm.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E27F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltrm.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltrm.default.glif
new file mode 100644
index 0000000000..a8e98d2cbc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltrm.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ltrm.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E27C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltrm.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltrm.fail.glif
new file mode 100644
index 0000000000..424fe004e4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltrm.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ltrm.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltrm.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltrm.pass.glif
new file mode 100644
index 0000000000..808d6efce0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ltrm.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ltrm.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mark.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mark.alt1.glif
new file mode 100644
index 0000000000..94842d3c12
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mark.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="mark.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E281"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mark.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mark.alt2.glif
new file mode 100644
index 0000000000..6304e50ec0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mark.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="mark.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E282"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mark.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mark.alt3.glif
new file mode 100644
index 0000000000..9df02a0632
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mark.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="mark.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E283"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mark.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mark.default.glif
new file mode 100644
index 0000000000..cc9d2c4e56
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mark.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="mark.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E280"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mark.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mark.fail.glif
new file mode 100644
index 0000000000..5140cb2128
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mark.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="mark.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mark.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mark.pass.glif
new file mode 100644
index 0000000000..7475bc1b6d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mark.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="mark.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/med2.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/med2.alt1.glif
new file mode 100644
index 0000000000..79cd0dbd8b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/med2.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="med2.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E285"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/med2.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/med2.alt2.glif
new file mode 100644
index 0000000000..c9f6db9dce
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/med2.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="med2.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E286"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/med2.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/med2.alt3.glif
new file mode 100644
index 0000000000..07e0505296
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/med2.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="med2.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E287"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/med2.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/med2.default.glif
new file mode 100644
index 0000000000..c1368f3adc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/med2.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="med2.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E284"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/med2.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/med2.fail.glif
new file mode 100644
index 0000000000..adac16c77e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/med2.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="med2.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/med2.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/med2.pass.glif
new file mode 100644
index 0000000000..48ae5c8bb2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/med2.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="med2.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/medi.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/medi.alt1.glif
new file mode 100644
index 0000000000..2866035c71
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/medi.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="medi.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E289"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/medi.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/medi.alt2.glif
new file mode 100644
index 0000000000..c7628e5830
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/medi.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="medi.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E28A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/medi.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/medi.alt3.glif
new file mode 100644
index 0000000000..011a3aa250
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/medi.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="medi.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E28B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/medi.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/medi.default.glif
new file mode 100644
index 0000000000..9f99f83b5c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/medi.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="medi.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E288"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/medi.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/medi.fail.glif
new file mode 100644
index 0000000000..3c8d9ccf78
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/medi.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="medi.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/medi.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/medi.pass.glif
new file mode 100644
index 0000000000..0e7edc8665
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/medi.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="medi.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mgrk.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mgrk.alt1.glif
new file mode 100644
index 0000000000..6bcabcd6f8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mgrk.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="mgrk.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E28D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mgrk.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mgrk.alt2.glif
new file mode 100644
index 0000000000..d4de5d15c1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mgrk.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="mgrk.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E28E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mgrk.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mgrk.alt3.glif
new file mode 100644
index 0000000000..855a993c08
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mgrk.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="mgrk.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E28F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mgrk.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mgrk.default.glif
new file mode 100644
index 0000000000..df1b8ded1e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mgrk.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="mgrk.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E28C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mgrk.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mgrk.fail.glif
new file mode 100644
index 0000000000..4e4e45a067
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mgrk.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="mgrk.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mgrk.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mgrk.pass.glif
new file mode 100644
index 0000000000..ec5eb3700a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mgrk.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="mgrk.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mkmk.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mkmk.alt1.glif
new file mode 100644
index 0000000000..f7ed4d447c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mkmk.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="mkmk.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E291"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mkmk.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mkmk.alt2.glif
new file mode 100644
index 0000000000..6ee0443d37
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mkmk.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="mkmk.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E292"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mkmk.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mkmk.alt3.glif
new file mode 100644
index 0000000000..ab1dc5d9ef
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mkmk.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="mkmk.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E293"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mkmk.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mkmk.default.glif
new file mode 100644
index 0000000000..245adb24c3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mkmk.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="mkmk.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E290"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mkmk.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mkmk.fail.glif
new file mode 100644
index 0000000000..e5ee0171de
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mkmk.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="mkmk.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mkmk.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mkmk.pass.glif
new file mode 100644
index 0000000000..ea6b8b3ed4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mkmk.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="mkmk.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mset.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mset.alt1.glif
new file mode 100644
index 0000000000..df2fd68038
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mset.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="mset.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E295"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mset.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mset.alt2.glif
new file mode 100644
index 0000000000..bafd3c5915
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mset.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="mset.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E296"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mset.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mset.alt3.glif
new file mode 100644
index 0000000000..8b91d0557f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mset.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="mset.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E297"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mset.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mset.default.glif
new file mode 100644
index 0000000000..8584e212cc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mset.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="mset.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E294"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mset.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mset.fail.glif
new file mode 100644
index 0000000000..4a2cf7f44d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mset.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="mset.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mset.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mset.pass.glif
new file mode 100644
index 0000000000..128a7a5f85
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/mset.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="mset.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nalt.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nalt.alt1.glif
new file mode 100644
index 0000000000..8e5c91cb5a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nalt.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="nalt.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E299"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nalt.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nalt.alt2.glif
new file mode 100644
index 0000000000..4a85bcca74
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nalt.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="nalt.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E29A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nalt.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nalt.alt3.glif
new file mode 100644
index 0000000000..7e7cfe1313
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nalt.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="nalt.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E29B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nalt.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nalt.default.glif
new file mode 100644
index 0000000000..7e3eaf52c1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nalt.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="nalt.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E298"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nalt.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nalt.fail.glif
new file mode 100644
index 0000000000..0b5f2ddeb6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nalt.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="nalt.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nalt.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nalt.pass.glif
new file mode 100644
index 0000000000..e017add044
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nalt.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="nalt.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nlck.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nlck.alt1.glif
new file mode 100644
index 0000000000..59fd45df9f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nlck.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="nlck.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E29D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nlck.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nlck.alt2.glif
new file mode 100644
index 0000000000..175900714f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nlck.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="nlck.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E29E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nlck.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nlck.alt3.glif
new file mode 100644
index 0000000000..55d6fafdf8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nlck.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="nlck.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E29F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nlck.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nlck.default.glif
new file mode 100644
index 0000000000..82012a9140
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nlck.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="nlck.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E29C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nlck.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nlck.fail.glif
new file mode 100644
index 0000000000..1e4543ede4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nlck.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="nlck.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nlck.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nlck.pass.glif
new file mode 100644
index 0000000000..8e8962d19e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nlck.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="nlck.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nukt.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nukt.alt1.glif
new file mode 100644
index 0000000000..82583c018b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nukt.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="nukt.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2A1"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nukt.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nukt.alt2.glif
new file mode 100644
index 0000000000..7ceb6b4756
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nukt.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="nukt.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2A2"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nukt.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nukt.alt3.glif
new file mode 100644
index 0000000000..fb7320b4cc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nukt.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="nukt.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2A3"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nukt.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nukt.default.glif
new file mode 100644
index 0000000000..b604632942
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nukt.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="nukt.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E2A0"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nukt.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nukt.fail.glif
new file mode 100644
index 0000000000..b0609d2548
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nukt.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="nukt.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nukt.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nukt.pass.glif
new file mode 100644
index 0000000000..37ac3dc7b6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/nukt.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="nukt.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/numr.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/numr.alt1.glif
new file mode 100644
index 0000000000..1bb17218fd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/numr.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="numr.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2A5"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/numr.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/numr.alt2.glif
new file mode 100644
index 0000000000..17338575d1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/numr.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="numr.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2A6"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/numr.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/numr.alt3.glif
new file mode 100644
index 0000000000..1f9bf288bb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/numr.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="numr.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2A7"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/numr.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/numr.default.glif
new file mode 100644
index 0000000000..93cbc53601
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/numr.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="numr.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E2A4"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/numr.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/numr.fail.glif
new file mode 100644
index 0000000000..1ba66effa2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/numr.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="numr.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/numr.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/numr.pass.glif
new file mode 100644
index 0000000000..6a02451322
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/numr.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="numr.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/onum.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/onum.alt1.glif
new file mode 100644
index 0000000000..b4c8169c63
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/onum.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="onum.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2A9"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/onum.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/onum.alt2.glif
new file mode 100644
index 0000000000..135513e5d3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/onum.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="onum.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2AA"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/onum.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/onum.alt3.glif
new file mode 100644
index 0000000000..a7549720b1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/onum.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="onum.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2AB"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/onum.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/onum.default.glif
new file mode 100644
index 0000000000..754804990d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/onum.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="onum.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E2A8"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/onum.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/onum.fail.glif
new file mode 100644
index 0000000000..a700c97ce6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/onum.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="onum.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/onum.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/onum.pass.glif
new file mode 100644
index 0000000000..c36f04f440
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/onum.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="onum.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/opbd.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/opbd.alt1.glif
new file mode 100644
index 0000000000..2aae608374
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/opbd.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="opbd.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2AD"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/opbd.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/opbd.alt2.glif
new file mode 100644
index 0000000000..726f530c45
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/opbd.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="opbd.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2AE"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/opbd.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/opbd.alt3.glif
new file mode 100644
index 0000000000..1f2366669b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/opbd.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="opbd.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2AF"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/opbd.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/opbd.default.glif
new file mode 100644
index 0000000000..6c55396ede
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/opbd.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="opbd.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E2AC"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/opbd.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/opbd.fail.glif
new file mode 100644
index 0000000000..d19cfb32f9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/opbd.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="opbd.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/opbd.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/opbd.pass.glif
new file mode 100644
index 0000000000..ce06e8424d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/opbd.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="opbd.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ordn.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ordn.alt1.glif
new file mode 100644
index 0000000000..ff3d6aa501
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ordn.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ordn.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2B1"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ordn.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ordn.alt2.glif
new file mode 100644
index 0000000000..5ebe77ae61
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ordn.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ordn.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2B2"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ordn.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ordn.alt3.glif
new file mode 100644
index 0000000000..38c2fbcd57
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ordn.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ordn.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2B3"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ordn.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ordn.default.glif
new file mode 100644
index 0000000000..953c2de3dd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ordn.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ordn.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E2B0"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ordn.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ordn.fail.glif
new file mode 100644
index 0000000000..cdddab3f15
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ordn.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ordn.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ordn.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ordn.pass.glif
new file mode 100644
index 0000000000..29628f1027
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ordn.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ordn.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ornm.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ornm.alt1.glif
new file mode 100644
index 0000000000..95f1d77078
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ornm.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ornm.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2B5"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ornm.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ornm.alt2.glif
new file mode 100644
index 0000000000..8c6a439f8b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ornm.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ornm.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2B6"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ornm.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ornm.alt3.glif
new file mode 100644
index 0000000000..193905c37d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ornm.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ornm.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2B7"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ornm.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ornm.default.glif
new file mode 100644
index 0000000000..b0c42ed18e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ornm.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ornm.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E2B4"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ornm.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ornm.fail.glif
new file mode 100644
index 0000000000..c0f961da62
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ornm.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ornm.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ornm.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ornm.pass.glif
new file mode 100644
index 0000000000..d649e56c0e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ornm.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ornm.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/palt.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/palt.alt1.glif
new file mode 100644
index 0000000000..ea07078bb0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/palt.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="palt.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2B9"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/palt.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/palt.alt2.glif
new file mode 100644
index 0000000000..6de2ab3114
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/palt.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="palt.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2BA"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/palt.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/palt.alt3.glif
new file mode 100644
index 0000000000..33d0b90ee7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/palt.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="palt.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2BB"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/palt.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/palt.default.glif
new file mode 100644
index 0000000000..4c03be39a4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/palt.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="palt.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E2B8"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/palt.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/palt.fail.glif
new file mode 100644
index 0000000000..2a957f3ecf
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/palt.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="palt.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/palt.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/palt.pass.glif
new file mode 100644
index 0000000000..4d3412492d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/palt.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="palt.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pcap.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pcap.alt1.glif
new file mode 100644
index 0000000000..55f1e05f4f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pcap.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pcap.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2BD"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pcap.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pcap.alt2.glif
new file mode 100644
index 0000000000..44260604ee
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pcap.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pcap.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2BE"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pcap.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pcap.alt3.glif
new file mode 100644
index 0000000000..6320fa8e38
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pcap.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pcap.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2BF"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pcap.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pcap.default.glif
new file mode 100644
index 0000000000..7129334f32
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pcap.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pcap.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E2BC"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pcap.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pcap.fail.glif
new file mode 100644
index 0000000000..1f74ee14c3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pcap.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pcap.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pcap.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pcap.pass.glif
new file mode 100644
index 0000000000..aa9bb69195
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pcap.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pcap.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pkna.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pkna.alt1.glif
new file mode 100644
index 0000000000..699eb5ca58
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pkna.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pkna.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2C1"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pkna.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pkna.alt2.glif
new file mode 100644
index 0000000000..885ea78443
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pkna.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pkna.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2C2"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pkna.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pkna.alt3.glif
new file mode 100644
index 0000000000..c7dfe85cd5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pkna.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pkna.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2C3"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pkna.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pkna.default.glif
new file mode 100644
index 0000000000..155a8ea848
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pkna.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pkna.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E2C0"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pkna.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pkna.fail.glif
new file mode 100644
index 0000000000..f9cd1363bb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pkna.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pkna.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pkna.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pkna.pass.glif
new file mode 100644
index 0000000000..d34c196dea
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pkna.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pkna.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pnum.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pnum.alt1.glif
new file mode 100644
index 0000000000..90b453e58f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pnum.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pnum.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2C5"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pnum.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pnum.alt2.glif
new file mode 100644
index 0000000000..ecf7ffffc2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pnum.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pnum.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2C6"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pnum.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pnum.alt3.glif
new file mode 100644
index 0000000000..726009312b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pnum.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pnum.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2C7"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pnum.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pnum.default.glif
new file mode 100644
index 0000000000..79386c4401
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pnum.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pnum.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E2C4"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pnum.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pnum.fail.glif
new file mode 100644
index 0000000000..ca86b56e63
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pnum.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pnum.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pnum.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pnum.pass.glif
new file mode 100644
index 0000000000..bbabdc9680
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pnum.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pnum.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pref.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pref.alt1.glif
new file mode 100644
index 0000000000..67e08531da
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pref.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pref.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2C9"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pref.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pref.alt2.glif
new file mode 100644
index 0000000000..f24afd730e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pref.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pref.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2CA"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pref.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pref.alt3.glif
new file mode 100644
index 0000000000..d5e5ccb18a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pref.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pref.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2CB"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pref.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pref.default.glif
new file mode 100644
index 0000000000..97558ed35b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pref.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pref.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E2C8"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pref.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pref.fail.glif
new file mode 100644
index 0000000000..4c35c3f7db
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pref.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pref.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pref.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pref.pass.glif
new file mode 100644
index 0000000000..6280543d23
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pref.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pref.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pres.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pres.alt1.glif
new file mode 100644
index 0000000000..a79825f8ca
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pres.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pres.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2CD"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pres.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pres.alt2.glif
new file mode 100644
index 0000000000..ca40ef420a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pres.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pres.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2CE"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pres.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pres.alt3.glif
new file mode 100644
index 0000000000..28cb07a93e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pres.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pres.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2CF"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pres.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pres.default.glif
new file mode 100644
index 0000000000..ee64836dfa
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pres.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pres.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E2CC"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pres.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pres.fail.glif
new file mode 100644
index 0000000000..5007ccdd1c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pres.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pres.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pres.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pres.pass.glif
new file mode 100644
index 0000000000..09a19480e7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pres.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pres.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pstf.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pstf.alt1.glif
new file mode 100644
index 0000000000..25c3676154
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pstf.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pstf.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2D1"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pstf.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pstf.alt2.glif
new file mode 100644
index 0000000000..629b2b7f03
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pstf.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pstf.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2D2"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pstf.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pstf.alt3.glif
new file mode 100644
index 0000000000..58c58fb42a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pstf.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pstf.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2D3"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pstf.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pstf.default.glif
new file mode 100644
index 0000000000..6c735fe28f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pstf.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pstf.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E2D0"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pstf.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pstf.fail.glif
new file mode 100644
index 0000000000..a2fbc75605
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pstf.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pstf.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pstf.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pstf.pass.glif
new file mode 100644
index 0000000000..1a394acfbe
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pstf.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pstf.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/psts.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/psts.alt1.glif
new file mode 100644
index 0000000000..a407dae4ea
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/psts.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="psts.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2D5"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/psts.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/psts.alt2.glif
new file mode 100644
index 0000000000..0c73f7ca2e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/psts.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="psts.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2D6"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/psts.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/psts.alt3.glif
new file mode 100644
index 0000000000..54bab17432
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/psts.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="psts.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2D7"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/psts.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/psts.default.glif
new file mode 100644
index 0000000000..3f1c098eba
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/psts.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="psts.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E2D4"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/psts.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/psts.fail.glif
new file mode 100644
index 0000000000..b787693594
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/psts.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="psts.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/psts.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/psts.pass.glif
new file mode 100644
index 0000000000..efa418e984
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/psts.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="psts.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pwid.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pwid.alt1.glif
new file mode 100644
index 0000000000..b44a1aff7c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pwid.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pwid.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2D9"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pwid.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pwid.alt2.glif
new file mode 100644
index 0000000000..fbded4b774
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pwid.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pwid.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2DA"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pwid.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pwid.alt3.glif
new file mode 100644
index 0000000000..fabea54a5f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pwid.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pwid.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2DB"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pwid.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pwid.default.glif
new file mode 100644
index 0000000000..5dab6d4e26
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pwid.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pwid.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E2D8"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pwid.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pwid.fail.glif
new file mode 100644
index 0000000000..d76fed996a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pwid.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pwid.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pwid.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pwid.pass.glif
new file mode 100644
index 0000000000..3603b8cf29
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/pwid.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="pwid.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/qwid.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/qwid.alt1.glif
new file mode 100644
index 0000000000..978b431f5b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/qwid.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="qwid.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2DD"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/qwid.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/qwid.alt2.glif
new file mode 100644
index 0000000000..1b837edfde
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/qwid.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="qwid.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2DE"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/qwid.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/qwid.alt3.glif
new file mode 100644
index 0000000000..6015b73f15
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/qwid.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="qwid.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2DF"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/qwid.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/qwid.default.glif
new file mode 100644
index 0000000000..4d091929f4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/qwid.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="qwid.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E2DC"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/qwid.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/qwid.fail.glif
new file mode 100644
index 0000000000..6cb981fac7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/qwid.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="qwid.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/qwid.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/qwid.pass.glif
new file mode 100644
index 0000000000..1131d07622
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/qwid.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="qwid.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rand.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rand.alt1.glif
new file mode 100644
index 0000000000..3409fee147
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rand.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rand.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2E1"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rand.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rand.alt2.glif
new file mode 100644
index 0000000000..d6fcb5d889
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rand.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rand.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2E2"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rand.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rand.alt3.glif
new file mode 100644
index 0000000000..5f31b915bf
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rand.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rand.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2E3"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rand.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rand.default.glif
new file mode 100644
index 0000000000..232427c0c7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rand.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rand.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E2E0"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rand.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rand.fail.glif
new file mode 100644
index 0000000000..99db4f9644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rand.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rand.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rand.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rand.pass.glif
new file mode 100644
index 0000000000..fc4e4bdeca
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rand.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rand.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rkrf.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rkrf.alt1.glif
new file mode 100644
index 0000000000..b1776a630f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rkrf.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rkrf.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2E5"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rkrf.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rkrf.alt2.glif
new file mode 100644
index 0000000000..6e7831f089
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rkrf.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rkrf.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2E6"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rkrf.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rkrf.alt3.glif
new file mode 100644
index 0000000000..fcf5ce90dd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rkrf.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rkrf.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2E7"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rkrf.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rkrf.default.glif
new file mode 100644
index 0000000000..787efaf94e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rkrf.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rkrf.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E2E4"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rkrf.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rkrf.fail.glif
new file mode 100644
index 0000000000..9153947c2b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rkrf.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rkrf.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rkrf.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rkrf.pass.glif
new file mode 100644
index 0000000000..63b138dada
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rkrf.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rkrf.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rlig.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rlig.alt1.glif
new file mode 100644
index 0000000000..0141343782
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rlig.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rlig.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2E9"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rlig.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rlig.alt2.glif
new file mode 100644
index 0000000000..8bc62cbb6b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rlig.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rlig.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2EA"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rlig.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rlig.alt3.glif
new file mode 100644
index 0000000000..072224613d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rlig.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rlig.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2EB"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rlig.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rlig.default.glif
new file mode 100644
index 0000000000..37ee00d9a5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rlig.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rlig.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E2E8"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rlig.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rlig.fail.glif
new file mode 100644
index 0000000000..30de01b652
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rlig.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rlig.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rlig.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rlig.pass.glif
new file mode 100644
index 0000000000..8364541e7b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rlig.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rlig.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rphf.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rphf.alt1.glif
new file mode 100644
index 0000000000..aed6231294
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rphf.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rphf.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2ED"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rphf.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rphf.alt2.glif
new file mode 100644
index 0000000000..c59355a80d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rphf.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rphf.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2EE"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rphf.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rphf.alt3.glif
new file mode 100644
index 0000000000..48b0c8047b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rphf.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rphf.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2EF"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rphf.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rphf.default.glif
new file mode 100644
index 0000000000..a28d1e9d37
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rphf.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rphf.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E2EC"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rphf.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rphf.fail.glif
new file mode 100644
index 0000000000..13faae7ebf
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rphf.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rphf.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rphf.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rphf.pass.glif
new file mode 100644
index 0000000000..c98d1f69c1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rphf.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rphf.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtbd.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtbd.alt1.glif
new file mode 100644
index 0000000000..edb5bf4e4b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtbd.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rtbd.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2F1"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtbd.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtbd.alt2.glif
new file mode 100644
index 0000000000..6d306d4226
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtbd.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rtbd.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2F2"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtbd.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtbd.alt3.glif
new file mode 100644
index 0000000000..382c26b2c4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtbd.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rtbd.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2F3"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtbd.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtbd.default.glif
new file mode 100644
index 0000000000..b7f981609d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtbd.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rtbd.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E2F0"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtbd.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtbd.fail.glif
new file mode 100644
index 0000000000..a45ed7dbaf
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtbd.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rtbd.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtbd.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtbd.pass.glif
new file mode 100644
index 0000000000..8145930131
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtbd.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rtbd.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtla.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtla.alt1.glif
new file mode 100644
index 0000000000..d4a9ef59c2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtla.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rtla.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2F5"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtla.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtla.alt2.glif
new file mode 100644
index 0000000000..0300f76cea
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtla.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rtla.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2F6"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtla.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtla.alt3.glif
new file mode 100644
index 0000000000..3bf6eb5f8e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtla.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rtla.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2F7"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtla.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtla.default.glif
new file mode 100644
index 0000000000..94f8e36df1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtla.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rtla.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E2F4"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtla.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtla.fail.glif
new file mode 100644
index 0000000000..176ca69880
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtla.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rtla.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtla.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtla.pass.glif
new file mode 100644
index 0000000000..e8af8ca027
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtla.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rtla.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtlm.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtlm.alt1.glif
new file mode 100644
index 0000000000..7489204b64
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtlm.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rtlm.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2F9"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtlm.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtlm.alt2.glif
new file mode 100644
index 0000000000..e97489be1c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtlm.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rtlm.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2FA"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtlm.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtlm.alt3.glif
new file mode 100644
index 0000000000..d5c5d5f7f8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtlm.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rtlm.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2FB"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtlm.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtlm.default.glif
new file mode 100644
index 0000000000..6e3bbd1f7e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtlm.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rtlm.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E2F8"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtlm.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtlm.fail.glif
new file mode 100644
index 0000000000..8497dda732
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtlm.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rtlm.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtlm.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtlm.pass.glif
new file mode 100644
index 0000000000..67163f2936
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/rtlm.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="rtlm.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ruby.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ruby.alt1.glif
new file mode 100644
index 0000000000..17ec1ed46a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ruby.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ruby.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2FD"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ruby.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ruby.alt2.glif
new file mode 100644
index 0000000000..9c348254fa
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ruby.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ruby.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2FE"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ruby.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ruby.alt3.glif
new file mode 100644
index 0000000000..918455b761
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ruby.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ruby.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E2FF"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ruby.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ruby.default.glif
new file mode 100644
index 0000000000..f9e0c250ae
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ruby.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ruby.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E2FC"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ruby.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ruby.fail.glif
new file mode 100644
index 0000000000..92471208b4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ruby.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ruby.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ruby.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ruby.pass.glif
new file mode 100644
index 0000000000..bfcf7b3bc8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ruby.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ruby.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/salt.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/salt.alt1.glif
new file mode 100644
index 0000000000..d1d9cb1788
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/salt.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="salt.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E301"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/salt.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/salt.alt2.glif
new file mode 100644
index 0000000000..9c957418e0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/salt.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="salt.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E302"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/salt.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/salt.alt3.glif
new file mode 100644
index 0000000000..b5da2cce14
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/salt.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="salt.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E303"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/salt.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/salt.default.glif
new file mode 100644
index 0000000000..5dbbddfa2e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/salt.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="salt.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E300"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/salt.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/salt.fail.glif
new file mode 100644
index 0000000000..a65fc52238
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/salt.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="salt.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/salt.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/salt.pass.glif
new file mode 100644
index 0000000000..a6acdfa059
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/salt.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="salt.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sinf.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sinf.alt1.glif
new file mode 100644
index 0000000000..e60fd021e3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sinf.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="sinf.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E305"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sinf.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sinf.alt2.glif
new file mode 100644
index 0000000000..b3f5b3e6e8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sinf.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="sinf.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E306"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sinf.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sinf.alt3.glif
new file mode 100644
index 0000000000..4c1a3ab2c7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sinf.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="sinf.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E307"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sinf.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sinf.default.glif
new file mode 100644
index 0000000000..0466a29498
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sinf.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="sinf.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E304"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sinf.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sinf.fail.glif
new file mode 100644
index 0000000000..5e2df50c60
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sinf.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="sinf.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sinf.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sinf.pass.glif
new file mode 100644
index 0000000000..021c16bdd3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sinf.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="sinf.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/size.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/size.alt1.glif
new file mode 100644
index 0000000000..8afacbb7f6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/size.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="size.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E309"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/size.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/size.alt2.glif
new file mode 100644
index 0000000000..6f99ba342a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/size.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="size.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E30A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/size.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/size.alt3.glif
new file mode 100644
index 0000000000..d1dd0d47fe
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/size.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="size.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E30B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/size.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/size.default.glif
new file mode 100644
index 0000000000..88350c5051
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/size.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="size.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E308"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/size.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/size.fail.glif
new file mode 100644
index 0000000000..c31107d1e9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/size.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="size.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/size.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/size.pass.glif
new file mode 100644
index 0000000000..31333c11a6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/size.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="size.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smcp.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smcp.alt1.glif
new file mode 100644
index 0000000000..9aa59c3d32
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smcp.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="smcp.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E30D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smcp.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smcp.alt2.glif
new file mode 100644
index 0000000000..5b5a61b413
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smcp.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="smcp.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E30E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smcp.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smcp.alt3.glif
new file mode 100644
index 0000000000..47c39057c5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smcp.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="smcp.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E30F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smcp.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smcp.default.glif
new file mode 100644
index 0000000000..54850b63fe
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smcp.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="smcp.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E30C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smcp.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smcp.fail.glif
new file mode 100644
index 0000000000..bf6a6f6e5d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smcp.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="smcp.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smcp.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smcp.pass.glif
new file mode 100644
index 0000000000..ea17f93cc9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smcp.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="smcp.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smpl.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smpl.alt1.glif
new file mode 100644
index 0000000000..eac579d259
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smpl.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="smpl.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E311"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smpl.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smpl.alt2.glif
new file mode 100644
index 0000000000..2596133770
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smpl.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="smpl.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E312"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smpl.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smpl.alt3.glif
new file mode 100644
index 0000000000..9e774d9216
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smpl.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="smpl.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E313"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smpl.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smpl.default.glif
new file mode 100644
index 0000000000..59dc99182e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smpl.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="smpl.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E310"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smpl.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smpl.fail.glif
new file mode 100644
index 0000000000..d2f2ed28da
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smpl.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="smpl.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smpl.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smpl.pass.glif
new file mode 100644
index 0000000000..9c961c907d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/smpl.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="smpl.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/space.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/space.glif
new file mode 100644
index 0000000000..c128ab3980
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/space.glif
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="space" format="1">
+ <advance width="750"/>
+ <unicode hex="0020"/>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss00.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss00.alt1.glif
new file mode 100644
index 0000000000..69d7ea8435
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss00.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss00.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E315"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss00.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss00.alt2.glif
new file mode 100644
index 0000000000..6e0715dc21
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss00.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss00.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E316"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss00.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss00.alt3.glif
new file mode 100644
index 0000000000..6d05ff1cf3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss00.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss00.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E317"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss00.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss00.default.glif
new file mode 100644
index 0000000000..fe39ac7744
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss00.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss00.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E314"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss00.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss00.fail.glif
new file mode 100644
index 0000000000..dde66fd860
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss00.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss00.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss00.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss00.pass.glif
new file mode 100644
index 0000000000..7ccb7ce4f1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss00.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss00.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss01.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss01.alt1.glif
new file mode 100644
index 0000000000..66a985d4c6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss01.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss01.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E319"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss01.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss01.alt2.glif
new file mode 100644
index 0000000000..fb23fe93a7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss01.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss01.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E31A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss01.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss01.alt3.glif
new file mode 100644
index 0000000000..fa2cab478c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss01.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss01.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E31B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss01.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss01.default.glif
new file mode 100644
index 0000000000..34c2739f3b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss01.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss01.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E318"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss01.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss01.fail.glif
new file mode 100644
index 0000000000..1343e85244
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss01.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss01.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss01.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss01.pass.glif
new file mode 100644
index 0000000000..1e460c006c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss01.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss01.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss02.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss02.alt1.glif
new file mode 100644
index 0000000000..3e222c11bb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss02.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss02.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E31D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss02.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss02.alt2.glif
new file mode 100644
index 0000000000..9ec89ab061
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss02.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss02.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E31E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss02.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss02.alt3.glif
new file mode 100644
index 0000000000..57c7add29b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss02.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss02.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E31F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss02.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss02.default.glif
new file mode 100644
index 0000000000..d98a15bcfe
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss02.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss02.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E31C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss02.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss02.fail.glif
new file mode 100644
index 0000000000..8ee318f30d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss02.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss02.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss02.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss02.pass.glif
new file mode 100644
index 0000000000..a8a343e60e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss02.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss02.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss03.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss03.alt1.glif
new file mode 100644
index 0000000000..59f4eac3f6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss03.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss03.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E321"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss03.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss03.alt2.glif
new file mode 100644
index 0000000000..ccd4fa6552
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss03.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss03.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E322"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss03.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss03.alt3.glif
new file mode 100644
index 0000000000..41fb2a2919
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss03.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss03.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E323"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss03.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss03.default.glif
new file mode 100644
index 0000000000..8b2ec349b8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss03.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss03.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E320"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss03.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss03.fail.glif
new file mode 100644
index 0000000000..7543580676
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss03.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss03.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss03.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss03.pass.glif
new file mode 100644
index 0000000000..bd587a2464
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss03.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss03.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss04.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss04.alt1.glif
new file mode 100644
index 0000000000..69fe1ab36d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss04.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss04.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E325"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss04.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss04.alt2.glif
new file mode 100644
index 0000000000..46e556bbf1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss04.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss04.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E326"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss04.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss04.alt3.glif
new file mode 100644
index 0000000000..6ede17cc9c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss04.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss04.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E327"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss04.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss04.default.glif
new file mode 100644
index 0000000000..d2cacbb917
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss04.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss04.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E324"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss04.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss04.fail.glif
new file mode 100644
index 0000000000..b3cc276714
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss04.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss04.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss04.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss04.pass.glif
new file mode 100644
index 0000000000..7bd7bbd644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss04.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss04.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss05.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss05.alt1.glif
new file mode 100644
index 0000000000..f2d9b53051
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss05.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss05.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E329"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss05.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss05.alt2.glif
new file mode 100644
index 0000000000..d3f1f08209
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss05.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss05.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E32A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss05.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss05.alt3.glif
new file mode 100644
index 0000000000..23f360aefa
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss05.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss05.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E32B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss05.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss05.default.glif
new file mode 100644
index 0000000000..87a81294e7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss05.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss05.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E328"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss05.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss05.fail.glif
new file mode 100644
index 0000000000..d488571a5a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss05.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss05.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss05.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss05.pass.glif
new file mode 100644
index 0000000000..5b64c9344a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss05.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss05.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss06.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss06.alt1.glif
new file mode 100644
index 0000000000..bd139b7b84
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss06.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss06.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E32D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss06.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss06.alt2.glif
new file mode 100644
index 0000000000..6b8803e739
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss06.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss06.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E32E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss06.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss06.alt3.glif
new file mode 100644
index 0000000000..7fa72e724f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss06.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss06.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E32F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss06.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss06.default.glif
new file mode 100644
index 0000000000..171e3d2481
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss06.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss06.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E32C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss06.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss06.fail.glif
new file mode 100644
index 0000000000..1609e77171
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss06.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss06.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss06.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss06.pass.glif
new file mode 100644
index 0000000000..1010aaea6d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss06.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss06.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss07.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss07.alt1.glif
new file mode 100644
index 0000000000..413faa8c72
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss07.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss07.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E331"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss07.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss07.alt2.glif
new file mode 100644
index 0000000000..f128a1f43b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss07.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss07.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E332"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss07.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss07.alt3.glif
new file mode 100644
index 0000000000..9170a2a6b4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss07.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss07.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E333"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss07.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss07.default.glif
new file mode 100644
index 0000000000..0ac6b7cfc3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss07.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss07.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E330"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss07.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss07.fail.glif
new file mode 100644
index 0000000000..e1eff1a344
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss07.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss07.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss07.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss07.pass.glif
new file mode 100644
index 0000000000..88e456fb91
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss07.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss07.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss08.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss08.alt1.glif
new file mode 100644
index 0000000000..5263421fc0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss08.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss08.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E335"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss08.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss08.alt2.glif
new file mode 100644
index 0000000000..d64b90e273
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss08.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss08.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E336"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss08.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss08.alt3.glif
new file mode 100644
index 0000000000..21c372abae
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss08.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss08.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E337"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss08.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss08.default.glif
new file mode 100644
index 0000000000..adbd395118
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss08.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss08.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E334"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss08.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss08.fail.glif
new file mode 100644
index 0000000000..c962b025fa
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss08.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss08.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss08.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss08.pass.glif
new file mode 100644
index 0000000000..99046fa7c6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss08.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss08.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss09.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss09.alt1.glif
new file mode 100644
index 0000000000..03de597249
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss09.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss09.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E339"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss09.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss09.alt2.glif
new file mode 100644
index 0000000000..04e280d563
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss09.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss09.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E33A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss09.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss09.alt3.glif
new file mode 100644
index 0000000000..9c300e2087
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss09.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss09.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E33B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss09.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss09.default.glif
new file mode 100644
index 0000000000..83a95a6c07
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss09.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss09.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E338"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss09.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss09.fail.glif
new file mode 100644
index 0000000000..4c81d57bfd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss09.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss09.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss09.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss09.pass.glif
new file mode 100644
index 0000000000..c51e186846
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss09.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss09.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss10.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss10.alt1.glif
new file mode 100644
index 0000000000..c20f434f97
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss10.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss10.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E33D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss10.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss10.alt2.glif
new file mode 100644
index 0000000000..34bbf1567b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss10.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss10.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E33E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss10.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss10.alt3.glif
new file mode 100644
index 0000000000..ac9e698340
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss10.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss10.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E33F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss10.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss10.default.glif
new file mode 100644
index 0000000000..295842043e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss10.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss10.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E33C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss10.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss10.fail.glif
new file mode 100644
index 0000000000..fd9fbd98f3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss10.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss10.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss10.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss10.pass.glif
new file mode 100644
index 0000000000..adca040763
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss10.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss10.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss11.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss11.alt1.glif
new file mode 100644
index 0000000000..fd624a7f4d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss11.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss11.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E341"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss11.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss11.alt2.glif
new file mode 100644
index 0000000000..165c118849
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss11.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss11.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E342"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss11.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss11.alt3.glif
new file mode 100644
index 0000000000..727dc95eea
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss11.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss11.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E343"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss11.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss11.default.glif
new file mode 100644
index 0000000000..a3346943b6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss11.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss11.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E340"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss11.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss11.fail.glif
new file mode 100644
index 0000000000..36308e7de7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss11.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss11.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss11.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss11.pass.glif
new file mode 100644
index 0000000000..5bbb589cc8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss11.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss11.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss12.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss12.alt1.glif
new file mode 100644
index 0000000000..2ecdceb771
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss12.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss12.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E345"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss12.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss12.alt2.glif
new file mode 100644
index 0000000000..b5adc9881a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss12.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss12.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E346"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss12.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss12.alt3.glif
new file mode 100644
index 0000000000..33d80c7a64
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss12.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss12.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E347"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss12.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss12.default.glif
new file mode 100644
index 0000000000..be2720bc5c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss12.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss12.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E344"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss12.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss12.fail.glif
new file mode 100644
index 0000000000..fbf1019f05
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss12.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss12.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss12.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss12.pass.glif
new file mode 100644
index 0000000000..ca7a1acb0d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss12.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss12.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss13.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss13.alt1.glif
new file mode 100644
index 0000000000..6b58eb5932
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss13.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss13.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E349"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss13.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss13.alt2.glif
new file mode 100644
index 0000000000..fa59067781
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss13.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss13.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E34A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss13.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss13.alt3.glif
new file mode 100644
index 0000000000..ef86be6dd8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss13.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss13.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E34B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss13.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss13.default.glif
new file mode 100644
index 0000000000..871d3c4ba2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss13.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss13.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E348"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss13.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss13.fail.glif
new file mode 100644
index 0000000000..7b1512f275
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss13.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss13.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss13.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss13.pass.glif
new file mode 100644
index 0000000000..22a9f91443
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss13.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss13.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss14.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss14.alt1.glif
new file mode 100644
index 0000000000..9b8c587b7b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss14.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss14.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E34D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss14.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss14.alt2.glif
new file mode 100644
index 0000000000..224cec22ed
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss14.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss14.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E34E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss14.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss14.alt3.glif
new file mode 100644
index 0000000000..d0d68454c2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss14.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss14.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E34F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss14.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss14.default.glif
new file mode 100644
index 0000000000..c634854871
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss14.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss14.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E34C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss14.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss14.fail.glif
new file mode 100644
index 0000000000..1e5f0f31d4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss14.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss14.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss14.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss14.pass.glif
new file mode 100644
index 0000000000..22251e9d29
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss14.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss14.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss15.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss15.alt1.glif
new file mode 100644
index 0000000000..254e51c140
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss15.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss15.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E351"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss15.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss15.alt2.glif
new file mode 100644
index 0000000000..e844ec4979
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss15.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss15.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E352"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss15.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss15.alt3.glif
new file mode 100644
index 0000000000..15eaf2ccac
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss15.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss15.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E353"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss15.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss15.default.glif
new file mode 100644
index 0000000000..a9b3b1d70e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss15.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss15.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E350"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss15.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss15.fail.glif
new file mode 100644
index 0000000000..bb53113280
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss15.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss15.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss15.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss15.pass.glif
new file mode 100644
index 0000000000..5c5111cd1c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss15.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss15.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss16.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss16.alt1.glif
new file mode 100644
index 0000000000..95f85ccd5a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss16.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss16.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E355"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss16.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss16.alt2.glif
new file mode 100644
index 0000000000..0febf6d916
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss16.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss16.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E356"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss16.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss16.alt3.glif
new file mode 100644
index 0000000000..9f5906ac8f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss16.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss16.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E357"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss16.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss16.default.glif
new file mode 100644
index 0000000000..4c6d98db42
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss16.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss16.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E354"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss16.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss16.fail.glif
new file mode 100644
index 0000000000..52da423f3d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss16.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss16.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss16.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss16.pass.glif
new file mode 100644
index 0000000000..4d79525469
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss16.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss16.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss17.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss17.alt1.glif
new file mode 100644
index 0000000000..e479d3cf35
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss17.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss17.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E359"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss17.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss17.alt2.glif
new file mode 100644
index 0000000000..e3a8dd0a67
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss17.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss17.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E35A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss17.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss17.alt3.glif
new file mode 100644
index 0000000000..616f9a391c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss17.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss17.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E35B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss17.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss17.default.glif
new file mode 100644
index 0000000000..44285f21ed
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss17.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss17.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E358"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss17.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss17.fail.glif
new file mode 100644
index 0000000000..45d5f52529
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss17.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss17.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss17.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss17.pass.glif
new file mode 100644
index 0000000000..0054656d96
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss17.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss17.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss18.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss18.alt1.glif
new file mode 100644
index 0000000000..02fb9a9346
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss18.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss18.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E35D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss18.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss18.alt2.glif
new file mode 100644
index 0000000000..0199313f94
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss18.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss18.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E35E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss18.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss18.alt3.glif
new file mode 100644
index 0000000000..d248ef1d08
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss18.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss18.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E35F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss18.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss18.default.glif
new file mode 100644
index 0000000000..f60f2ac63f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss18.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss18.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E35C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss18.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss18.fail.glif
new file mode 100644
index 0000000000..2d6e8ce0c0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss18.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss18.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss18.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss18.pass.glif
new file mode 100644
index 0000000000..ed8b496cd7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss18.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss18.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss19.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss19.alt1.glif
new file mode 100644
index 0000000000..95cb34278c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss19.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss19.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E361"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss19.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss19.alt2.glif
new file mode 100644
index 0000000000..1d769d5ab2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss19.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss19.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E362"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss19.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss19.alt3.glif
new file mode 100644
index 0000000000..a93693b463
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss19.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss19.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E363"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss19.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss19.default.glif
new file mode 100644
index 0000000000..0e96d73bb0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss19.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss19.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E360"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss19.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss19.fail.glif
new file mode 100644
index 0000000000..50c7a1d7b1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss19.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss19.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss19.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss19.pass.glif
new file mode 100644
index 0000000000..77f176fac3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss19.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss19.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss20.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss20.alt1.glif
new file mode 100644
index 0000000000..1468f02fab
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss20.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss20.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E365"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss20.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss20.alt2.glif
new file mode 100644
index 0000000000..3cfbb3fab7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss20.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss20.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E366"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss20.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss20.alt3.glif
new file mode 100644
index 0000000000..6d36083709
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss20.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss20.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E367"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss20.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss20.default.glif
new file mode 100644
index 0000000000..89de17b1a7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss20.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss20.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E364"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss20.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss20.fail.glif
new file mode 100644
index 0000000000..1dec6498f9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss20.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss20.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss20.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss20.pass.glif
new file mode 100644
index 0000000000..10e931ed4f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss20.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss20.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss21.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss21.alt1.glif
new file mode 100644
index 0000000000..8b5d6472e8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss21.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss21.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E369"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss21.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss21.alt2.glif
new file mode 100644
index 0000000000..1c4b85dcb9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss21.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss21.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E36A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss21.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss21.alt3.glif
new file mode 100644
index 0000000000..ccdc2fec88
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss21.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss21.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E36B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss21.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss21.default.glif
new file mode 100644
index 0000000000..fefd484a34
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss21.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss21.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E368"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss21.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss21.fail.glif
new file mode 100644
index 0000000000..6faed27d47
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss21.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss21.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss21.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss21.pass.glif
new file mode 100644
index 0000000000..0ed873fd8a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/ss21.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="ss21.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/subs.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/subs.alt1.glif
new file mode 100644
index 0000000000..5255a705b8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/subs.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="subs.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E36D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/subs.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/subs.alt2.glif
new file mode 100644
index 0000000000..e3d6e32e8c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/subs.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="subs.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E36E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/subs.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/subs.alt3.glif
new file mode 100644
index 0000000000..9284b3c98d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/subs.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="subs.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E36F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/subs.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/subs.default.glif
new file mode 100644
index 0000000000..e74618e0e9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/subs.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="subs.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E36C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/subs.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/subs.fail.glif
new file mode 100644
index 0000000000..ba79cf2b54
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/subs.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="subs.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/subs.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/subs.pass.glif
new file mode 100644
index 0000000000..dfa9a84711
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/subs.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="subs.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sups.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sups.alt1.glif
new file mode 100644
index 0000000000..413e409880
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sups.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="sups.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E371"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sups.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sups.alt2.glif
new file mode 100644
index 0000000000..587ad6e103
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sups.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="sups.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E372"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sups.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sups.alt3.glif
new file mode 100644
index 0000000000..45c3c9adea
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sups.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="sups.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E373"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sups.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sups.default.glif
new file mode 100644
index 0000000000..59b8017e96
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sups.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="sups.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E370"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sups.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sups.fail.glif
new file mode 100644
index 0000000000..e4b5af6edc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sups.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="sups.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sups.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sups.pass.glif
new file mode 100644
index 0000000000..a22e5c697e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/sups.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="sups.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/swsh.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/swsh.alt1.glif
new file mode 100644
index 0000000000..370fe7c0c3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/swsh.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="swsh.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E375"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/swsh.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/swsh.alt2.glif
new file mode 100644
index 0000000000..14fae5784a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/swsh.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="swsh.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E376"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/swsh.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/swsh.alt3.glif
new file mode 100644
index 0000000000..9e6c5e9b5f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/swsh.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="swsh.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E377"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/swsh.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/swsh.default.glif
new file mode 100644
index 0000000000..ec03b131f7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/swsh.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="swsh.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E374"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/swsh.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/swsh.fail.glif
new file mode 100644
index 0000000000..76c18b91c8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/swsh.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="swsh.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/swsh.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/swsh.pass.glif
new file mode 100644
index 0000000000..9427d8d899
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/swsh.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="swsh.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/titl.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/titl.alt1.glif
new file mode 100644
index 0000000000..08f9460560
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/titl.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="titl.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E379"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/titl.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/titl.alt2.glif
new file mode 100644
index 0000000000..80031e8847
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/titl.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="titl.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E37A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/titl.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/titl.alt3.glif
new file mode 100644
index 0000000000..a5e91dc4eb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/titl.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="titl.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E37B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/titl.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/titl.default.glif
new file mode 100644
index 0000000000..014bc67d41
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/titl.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="titl.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E378"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/titl.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/titl.fail.glif
new file mode 100644
index 0000000000..ca19fcd88e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/titl.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="titl.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/titl.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/titl.pass.glif
new file mode 100644
index 0000000000..f58fbf4f90
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/titl.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="titl.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tjmo.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tjmo.alt1.glif
new file mode 100644
index 0000000000..79a5fc1865
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tjmo.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="tjmo.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E37D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tjmo.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tjmo.alt2.glif
new file mode 100644
index 0000000000..658c3f2e68
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tjmo.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="tjmo.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E37E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tjmo.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tjmo.alt3.glif
new file mode 100644
index 0000000000..9f5e487e5c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tjmo.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="tjmo.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E37F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tjmo.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tjmo.default.glif
new file mode 100644
index 0000000000..8303060bbd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tjmo.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="tjmo.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E37C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tjmo.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tjmo.fail.glif
new file mode 100644
index 0000000000..74917ee87d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tjmo.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="tjmo.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tjmo.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tjmo.pass.glif
new file mode 100644
index 0000000000..8228b059ef
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tjmo.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="tjmo.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnam.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnam.alt1.glif
new file mode 100644
index 0000000000..9c1566da32
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnam.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="tnam.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E381"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnam.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnam.alt2.glif
new file mode 100644
index 0000000000..a65bdb96d5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnam.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="tnam.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E382"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnam.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnam.alt3.glif
new file mode 100644
index 0000000000..1a7097fa7c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnam.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="tnam.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E383"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnam.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnam.default.glif
new file mode 100644
index 0000000000..40b90ff259
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnam.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="tnam.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E380"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnam.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnam.fail.glif
new file mode 100644
index 0000000000..4af1a40fce
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnam.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="tnam.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnam.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnam.pass.glif
new file mode 100644
index 0000000000..17a818409f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnam.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="tnam.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnum.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnum.alt1.glif
new file mode 100644
index 0000000000..ccfcfa7d85
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnum.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="tnum.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E385"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnum.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnum.alt2.glif
new file mode 100644
index 0000000000..cc16255bf7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnum.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="tnum.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E386"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnum.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnum.alt3.glif
new file mode 100644
index 0000000000..305efadf26
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnum.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="tnum.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E387"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnum.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnum.default.glif
new file mode 100644
index 0000000000..8990af13ed
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnum.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="tnum.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E384"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnum.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnum.fail.glif
new file mode 100644
index 0000000000..a589660343
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnum.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="tnum.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnum.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnum.pass.glif
new file mode 100644
index 0000000000..2e69940163
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/tnum.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="tnum.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/trad.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/trad.alt1.glif
new file mode 100644
index 0000000000..8728c46fb0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/trad.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="trad.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E389"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/trad.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/trad.alt2.glif
new file mode 100644
index 0000000000..25fafd0151
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/trad.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="trad.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E38A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/trad.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/trad.alt3.glif
new file mode 100644
index 0000000000..ead2882552
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/trad.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="trad.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E38B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/trad.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/trad.default.glif
new file mode 100644
index 0000000000..669cc40119
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/trad.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="trad.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E388"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/trad.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/trad.fail.glif
new file mode 100644
index 0000000000..f2057df1a7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/trad.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="trad.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/trad.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/trad.pass.glif
new file mode 100644
index 0000000000..fdb719438e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/trad.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="trad.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/twid.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/twid.alt1.glif
new file mode 100644
index 0000000000..54c79e58c5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/twid.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="twid.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E38D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/twid.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/twid.alt2.glif
new file mode 100644
index 0000000000..ca94e3ebe7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/twid.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="twid.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E38E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/twid.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/twid.alt3.glif
new file mode 100644
index 0000000000..fc784312bc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/twid.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="twid.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E38F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/twid.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/twid.default.glif
new file mode 100644
index 0000000000..1f603b3e5c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/twid.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="twid.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E38C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/twid.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/twid.fail.glif
new file mode 100644
index 0000000000..2606361aae
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/twid.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="twid.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/twid.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/twid.pass.glif
new file mode 100644
index 0000000000..1a1234373b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/twid.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="twid.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/unic.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/unic.alt1.glif
new file mode 100644
index 0000000000..cb43384333
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/unic.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="unic.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E391"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/unic.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/unic.alt2.glif
new file mode 100644
index 0000000000..82773ce7b5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/unic.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="unic.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E392"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/unic.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/unic.alt3.glif
new file mode 100644
index 0000000000..96dce4bc95
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/unic.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="unic.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E393"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/unic.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/unic.default.glif
new file mode 100644
index 0000000000..a713cdb182
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/unic.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="unic.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E390"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/unic.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/unic.fail.glif
new file mode 100644
index 0000000000..5aeccadf8f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/unic.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="unic.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/unic.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/unic.pass.glif
new file mode 100644
index 0000000000..b819312f30
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/unic.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="unic.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/valt.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/valt.alt1.glif
new file mode 100644
index 0000000000..3ad17c76fb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/valt.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="valt.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E395"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/valt.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/valt.alt2.glif
new file mode 100644
index 0000000000..d6308fbb44
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/valt.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="valt.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E396"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/valt.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/valt.alt3.glif
new file mode 100644
index 0000000000..c8a61a50d8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/valt.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="valt.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E397"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/valt.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/valt.default.glif
new file mode 100644
index 0000000000..14ba693240
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/valt.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="valt.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E394"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/valt.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/valt.fail.glif
new file mode 100644
index 0000000000..6ec2d99a37
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/valt.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="valt.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/valt.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/valt.pass.glif
new file mode 100644
index 0000000000..f36c24a56c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/valt.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="valt.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vatu.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vatu.alt1.glif
new file mode 100644
index 0000000000..81a83c1854
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vatu.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vatu.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E399"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vatu.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vatu.alt2.glif
new file mode 100644
index 0000000000..d8e4b0876c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vatu.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vatu.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E39A"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vatu.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vatu.alt3.glif
new file mode 100644
index 0000000000..2ed109158a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vatu.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vatu.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E39B"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vatu.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vatu.default.glif
new file mode 100644
index 0000000000..545191735a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vatu.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vatu.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E398"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vatu.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vatu.fail.glif
new file mode 100644
index 0000000000..edaef1368c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vatu.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vatu.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vatu.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vatu.pass.glif
new file mode 100644
index 0000000000..2cc9985d6c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vatu.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vatu.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vert.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vert.alt1.glif
new file mode 100644
index 0000000000..674eab56f1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vert.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vert.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E39D"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vert.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vert.alt2.glif
new file mode 100644
index 0000000000..a4594014f7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vert.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vert.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E39E"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vert.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vert.alt3.glif
new file mode 100644
index 0000000000..bbd2d7570b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vert.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vert.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E39F"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vert.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vert.default.glif
new file mode 100644
index 0000000000..f4f71c4c0c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vert.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vert.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E39C"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vert.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vert.fail.glif
new file mode 100644
index 0000000000..6c12f02dcd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vert.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vert.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vert.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vert.pass.glif
new file mode 100644
index 0000000000..5455f2f350
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vert.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vert.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vhal.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vhal.alt1.glif
new file mode 100644
index 0000000000..8a41dc8f72
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vhal.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vhal.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E3A1"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vhal.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vhal.alt2.glif
new file mode 100644
index 0000000000..6d8e6cafd9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vhal.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vhal.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E3A2"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vhal.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vhal.alt3.glif
new file mode 100644
index 0000000000..448599250b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vhal.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vhal.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E3A3"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vhal.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vhal.default.glif
new file mode 100644
index 0000000000..e1ed14c438
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vhal.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vhal.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E3A0"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vhal.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vhal.fail.glif
new file mode 100644
index 0000000000..f456fff172
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vhal.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vhal.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vhal.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vhal.pass.glif
new file mode 100644
index 0000000000..f42cc79c6a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vhal.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vhal.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vjmo.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vjmo.alt1.glif
new file mode 100644
index 0000000000..fcd7a035cd
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vjmo.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vjmo.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E3A5"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vjmo.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vjmo.alt2.glif
new file mode 100644
index 0000000000..94228ab186
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vjmo.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vjmo.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E3A6"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vjmo.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vjmo.alt3.glif
new file mode 100644
index 0000000000..fc9dd6daa3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vjmo.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vjmo.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E3A7"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vjmo.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vjmo.default.glif
new file mode 100644
index 0000000000..96f696b240
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vjmo.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vjmo.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E3A4"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vjmo.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vjmo.fail.glif
new file mode 100644
index 0000000000..476c422193
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vjmo.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vjmo.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vjmo.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vjmo.pass.glif
new file mode 100644
index 0000000000..f6714c712c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vjmo.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vjmo.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkna.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkna.alt1.glif
new file mode 100644
index 0000000000..dc096dcb1a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkna.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vkna.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E3A9"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkna.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkna.alt2.glif
new file mode 100644
index 0000000000..490696ee39
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkna.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vkna.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E3AA"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkna.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkna.alt3.glif
new file mode 100644
index 0000000000..efda6c0877
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkna.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vkna.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E3AB"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkna.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkna.default.glif
new file mode 100644
index 0000000000..4e47712498
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkna.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vkna.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E3A8"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkna.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkna.fail.glif
new file mode 100644
index 0000000000..6c9b8e6f09
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkna.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vkna.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkna.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkna.pass.glif
new file mode 100644
index 0000000000..460aace1ca
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkna.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vkna.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkrn.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkrn.alt1.glif
new file mode 100644
index 0000000000..69d58a6ba2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkrn.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vkrn.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E3AD"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkrn.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkrn.alt2.glif
new file mode 100644
index 0000000000..9557418069
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkrn.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vkrn.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E3AE"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkrn.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkrn.alt3.glif
new file mode 100644
index 0000000000..c6c57c7741
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkrn.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vkrn.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E3AF"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkrn.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkrn.default.glif
new file mode 100644
index 0000000000..14dd4e9246
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkrn.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vkrn.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E3AC"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkrn.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkrn.fail.glif
new file mode 100644
index 0000000000..f00dd86d89
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkrn.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vkrn.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkrn.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkrn.pass.glif
new file mode 100644
index 0000000000..7a0b238c58
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vkrn.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vkrn.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vpal.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vpal.alt1.glif
new file mode 100644
index 0000000000..bdd52d82fa
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vpal.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vpal.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E3B1"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vpal.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vpal.alt2.glif
new file mode 100644
index 0000000000..9c628cfae0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vpal.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vpal.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E3B2"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vpal.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vpal.alt3.glif
new file mode 100644
index 0000000000..60f000d4b6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vpal.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vpal.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E3B3"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vpal.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vpal.default.glif
new file mode 100644
index 0000000000..1663f5a48a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vpal.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vpal.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E3B0"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vpal.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vpal.fail.glif
new file mode 100644
index 0000000000..9149c05455
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vpal.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vpal.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vpal.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vpal.pass.glif
new file mode 100644
index 0000000000..9bd6d5dff4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vpal.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vpal.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vrt2.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vrt2.alt1.glif
new file mode 100644
index 0000000000..fde5581f3a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vrt2.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vrt2.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E3B5"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vrt2.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vrt2.alt2.glif
new file mode 100644
index 0000000000..1fa7c28b60
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vrt2.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vrt2.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E3B6"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vrt2.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vrt2.alt3.glif
new file mode 100644
index 0000000000..4eea0f9185
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vrt2.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vrt2.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E3B7"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vrt2.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vrt2.default.glif
new file mode 100644
index 0000000000..0bc41fa78d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vrt2.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vrt2.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E3B4"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vrt2.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vrt2.fail.glif
new file mode 100644
index 0000000000..6cabe54461
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vrt2.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vrt2.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vrt2.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vrt2.pass.glif
new file mode 100644
index 0000000000..da803d6379
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/vrt2.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="vrt2.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/zero.alt1.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/zero.alt1.glif
new file mode 100644
index 0000000000..3e3ac126e0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/zero.alt1.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="zero.alt1" format="1">
+ <advance width="2304"/>
+ <unicode hex="E3B9"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/zero.alt2.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/zero.alt2.glif
new file mode 100644
index 0000000000..0b899e51cf
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/zero.alt2.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="zero.alt2" format="1">
+ <advance width="2304"/>
+ <unicode hex="E3BA"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/zero.alt3.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/zero.alt3.glif
new file mode 100644
index 0000000000..182c6518f4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/zero.alt3.glif
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="zero.alt3" format="1">
+ <advance width="2304"/>
+ <unicode hex="E3BB"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/zero.default.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/zero.default.glif
new file mode 100644
index 0000000000..8164f1caef
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/zero.default.glif
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="zero.default" format="1">
+ <advance width="2299"/>
+ <unicode hex="E3B8"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/zero.fail.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/zero.fail.glif
new file mode 100644
index 0000000000..a103b5db3e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/zero.fail.glif
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="zero.fail" format="1">
+ <advance width="2304"/>
+ <outline>
+ <contour>
+ <point x="787" y="0" type="line"/>
+ <point x="577" y="0" type="line"/>
+ <point x="790" y="700" type="line"/>
+ <point x="1086" y="700" type="line"/>
+ <point x="1299" y="0" type="line"/>
+ <point x="1053" y="0" type="line"/>
+ <point x="1021" y="119" type="line"/>
+ <point x="818" y="119" type="line"/>
+ </contour>
+ <contour>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="624" y="700" type="line"/>
+ <point x="624" y="536" type="line"/>
+ <point x="337" y="536" type="line"/>
+ <point x="337" y="406" type="line"/>
+ <point x="582" y="406" type="line"/>
+ <point x="582" y="244" type="line"/>
+ <point x="337" y="244" type="line"/>
+ <point x="337" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1686" y="0" type="line"/>
+ <point x="1686" y="700" type="line"/>
+ <point x="1923" y="700" type="line"/>
+ <point x="1923" y="180" type="line"/>
+ <point x="2204" y="180" type="line"/>
+ <point x="2204" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1354" y="0" type="line"/>
+ <point x="1354" y="700" type="line"/>
+ <point x="1591" y="700" type="line"/>
+ <point x="1591" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="920" y="504" type="line"/>
+ <point x="860" y="276" type="line"/>
+ <point x="980" y="276" type="line"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/zero.pass.glif b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/zero.pass.glif
new file mode 100644
index 0000000000..464fa57625
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/glyphs/zero.pass.glif
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="zero.pass" format="1">
+ <advance width="2299"/>
+ <outline>
+ <contour>
+ <point x="394" y="306" type="curve" smooth="yes"/>
+ <point x="296" y="306" type="line"/>
+ <point x="296" y="15" type="line"/>
+ <point x="397" y="15" type="line"/>
+ <point x="397" y="0" type="line"/>
+ <point x="100" y="0" type="line"/>
+ <point x="100" y="15" type="line"/>
+ <point x="191" y="15" type="line"/>
+ <point x="191" y="685" type="line"/>
+ <point x="100" y="685" type="line"/>
+ <point x="100" y="700" type="line"/>
+ <point x="394" y="700" type="line" smooth="yes"/>
+ <point x="547" y="700"/>
+ <point x="633" y="618"/>
+ <point x="633" y="503" type="curve" smooth="yes"/>
+ <point x="633" y="388"/>
+ <point x="547" y="306"/>
+ </contour>
+ <contour>
+ <point x="928" y="15" type="line"/>
+ <point x="1027" y="15" type="line"/>
+ <point x="949" y="236" type="line"/>
+ <point x="717" y="236" type="line"/>
+ <point x="674" y="120" type="line" smooth="yes"/>
+ <point x="648" y="49"/>
+ <point x="683" y="15"/>
+ <point x="750" y="15" type="curve" smooth="yes"/>
+ <point x="776" y="15" type="line"/>
+ <point x="776" y="0" type="line"/>
+ <point x="517" y="0" type="line"/>
+ <point x="517" y="15" type="line"/>
+ <point x="522" y="15" type="line" smooth="yes"/>
+ <point x="581" y="15"/>
+ <point x="627" y="43"/>
+ <point x="652" y="112" type="curve" smooth="yes"/>
+ <point x="871" y="705" type="line"/>
+ <point x="883" y="705" type="line"/>
+ <point x="1137" y="15" type="line"/>
+ <point x="1204" y="15" type="line"/>
+ <point x="1204" y="0" type="line"/>
+ <point x="928" y="0" type="line"/>
+ </contour>
+ <contour>
+ <point x="1626" y="710" type="curve"/>
+ <point x="1641" y="710" type="line"/>
+ <point x="1641" y="484" type="line"/>
+ <point x="1626" y="484" type="line"/>
+ <point x="1613" y="603"/>
+ <point x="1548" y="695"/>
+ <point x="1458" y="695" type="curve" smooth="yes"/>
+ <point x="1376" y="695"/>
+ <point x="1325" y="646"/>
+ <point x="1325" y="575" type="curve" smooth="yes"/>
+ <point x="1325" y="503"/>
+ <point x="1358" y="460"/>
+ <point x="1478" y="410" type="curve" smooth="yes"/>
+ <point x="1651" y="337"/>
+ <point x="1683" y="271"/>
+ <point x="1683" y="188" type="curve" smooth="yes"/>
+ <point x="1683" y="72"/>
+ <point x="1591" y="-10"/>
+ <point x="1461" y="-10" type="curve" smooth="yes"/>
+ <point x="1363" y="-10"/>
+ <point x="1331" y="27"/>
+ <point x="1286" y="27" type="curve" smooth="yes"/>
+ <point x="1268" y="27"/>
+ <point x="1255" y="12"/>
+ <point x="1251" y="-10" type="curve"/>
+ <point x="1236" y="-10" type="line"/>
+ <point x="1236" y="243" type="line"/>
+ <point x="1251" y="243" type="line"/>
+ <point x="1268" y="75"/>
+ <point x="1353" y="5"/>
+ <point x="1456" y="5" type="curve" smooth="yes"/>
+ <point x="1537" y="5"/>
+ <point x="1592" y="55"/>
+ <point x="1592" y="136" type="curve" smooth="yes"/>
+ <point x="1592" y="215"/>
+ <point x="1562" y="259"/>
+ <point x="1436" y="311" type="curve" smooth="yes"/>
+ <point x="1289" y="372"/>
+ <point x="1237" y="436"/>
+ <point x="1237" y="531" type="curve" smooth="yes"/>
+ <point x="1237" y="637"/>
+ <point x="1328" y="710"/>
+ <point x="1452" y="710" type="curve" smooth="yes"/>
+ <point x="1530" y="710"/>
+ <point x="1574" y="676"/>
+ <point x="1596" y="676" type="curve" smooth="yes"/>
+ <point x="1610" y="676"/>
+ <point x="1615" y="682"/>
+ </contour>
+ <contour>
+ <point x="523" y="503" type="curve" smooth="yes"/>
+ <point x="523" y="622"/>
+ <point x="474" y="685"/>
+ <point x="378" y="685" type="curve" smooth="yes"/>
+ <point x="296" y="685" type="line"/>
+ <point x="296" y="321" type="line"/>
+ <point x="378" y="321" type="line" smooth="yes"/>
+ <point x="474" y="321"/>
+ <point x="523" y="384"/>
+ </contour>
+ <contour>
+ <point x="835" y="556" type="line"/>
+ <point x="722" y="251" type="line"/>
+ <point x="943" y="251" type="line"/>
+ </contour>
+ <contour>
+ <point x="2142" y="710" type="curve"/>
+ <point x="2157" y="710" type="line"/>
+ <point x="2157" y="484" type="line"/>
+ <point x="2142" y="484" type="line"/>
+ <point x="2129" y="603"/>
+ <point x="2064" y="695"/>
+ <point x="1974" y="695" type="curve" smooth="yes"/>
+ <point x="1892" y="695"/>
+ <point x="1841" y="646"/>
+ <point x="1841" y="575" type="curve" smooth="yes"/>
+ <point x="1841" y="503"/>
+ <point x="1874" y="460"/>
+ <point x="1994" y="410" type="curve" smooth="yes"/>
+ <point x="2167" y="337"/>
+ <point x="2199" y="271"/>
+ <point x="2199" y="188" type="curve" smooth="yes"/>
+ <point x="2199" y="72"/>
+ <point x="2107" y="-10"/>
+ <point x="1977" y="-10" type="curve" smooth="yes"/>
+ <point x="1879" y="-10"/>
+ <point x="1847" y="27"/>
+ <point x="1802" y="27" type="curve" smooth="yes"/>
+ <point x="1784" y="27"/>
+ <point x="1771" y="12"/>
+ <point x="1767" y="-10" type="curve"/>
+ <point x="1752" y="-10" type="line"/>
+ <point x="1752" y="243" type="line"/>
+ <point x="1767" y="243" type="line"/>
+ <point x="1784" y="75"/>
+ <point x="1869" y="5"/>
+ <point x="1972" y="5" type="curve" smooth="yes"/>
+ <point x="2053" y="5"/>
+ <point x="2108" y="55"/>
+ <point x="2108" y="136" type="curve" smooth="yes"/>
+ <point x="2108" y="215"/>
+ <point x="2078" y="259"/>
+ <point x="1952" y="311" type="curve" smooth="yes"/>
+ <point x="1805" y="372"/>
+ <point x="1753" y="436"/>
+ <point x="1753" y="531" type="curve" smooth="yes"/>
+ <point x="1753" y="637"/>
+ <point x="1844" y="710"/>
+ <point x="1968" y="710" type="curve" smooth="yes"/>
+ <point x="2046" y="710"/>
+ <point x="2090" y="676"/>
+ <point x="2112" y="676" type="curve" smooth="yes"/>
+ <point x="2126" y="676"/>
+ <point x="2131" y="682"/>
+ </contour>
+ </outline>
+</glyph>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/metainfo.plist b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/metainfo.plist
new file mode 100644
index 0000000000..9b9b98873e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-lookup3.ufo/metainfo.plist
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+ <dict>
+ <key>creator</key>
+ <string>net.GitHub.FontForge</string>
+ <key>formatVersion</key>
+ <integer>2</integer>
+ </dict>
+</plist>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-shell.ttx b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-shell.ttx
new file mode 100644
index 0000000000..541f11f004
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/gsubtest-shell.ttx
@@ -0,0 +1,304 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<ttFont sfntVersion="OTTO" ttLibVersion="2.2">
+
+ <GlyphOrder>
+ <!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
+ <GlyphID id="0" name=".notdef"/>
+ <GlyphID id="1" name="space"/>
+ <GlyphID id="2" name="F"/>
+ <GlyphID id="3" name="P"/>
+ </GlyphOrder>
+
+ <head>
+ <!-- Most of this table will be recalculated by the compiler -->
+ <tableVersion value="1.0"/>
+ <fontRevision value="1.0"/>
+ <checkSumAdjustment value="0xae4c554b"/>
+ <magicNumber value="0x5f0f3cf5"/>
+ <flags value="00000000 00000011"/>
+ <unitsPerEm value="1000"/>
+ <created value="Tue Mar 22 13:46:27 2011"/>
+ <modified value="Tue Mar 22 13:46:27 2011"/>
+ <xMin value="100"/>
+ <yMin value="-10"/>
+ <xMax value="2204"/>
+ <yMax value="710"/>
+ <macStyle value="00000000 00000000"/>
+ <lowestRecPPEM value="3"/>
+ <fontDirectionHint value="2"/>
+ <indexToLocFormat value="0"/>
+ <glyphDataFormat value="0"/>
+ </head>
+
+ <hhea>
+ <tableVersion value="1.0"/>
+ <ascent value="750"/>
+ <descent value="-250"/>
+ <lineGap value="9"/>
+ <advanceWidthMax value="2304"/>
+ <minLeftSideBearing value="100"/>
+ <minRightSideBearing value="100"/>
+ <xMaxExtent value="2204"/>
+ <caretSlopeRise value="1"/>
+ <caretSlopeRun value="0"/>
+ <caretOffset value="0"/>
+ <reserved0 value="0"/>
+ <reserved1 value="0"/>
+ <reserved2 value="0"/>
+ <reserved3 value="0"/>
+ <metricDataFormat value="0"/>
+ <numberOfHMetrics value="4"/>
+ </hhea>
+
+ <maxp>
+ <tableVersion value="0x5000"/>
+ <numGlyphs value="4"/>
+ </maxp>
+
+ <OS_2>
+ <version value="4"/>
+ <xAvgCharWidth value="1525"/>
+ <usWeightClass value="400"/>
+ <usWidthClass value="5"/>
+ <fsType value="00000000 00000000"/>
+ <ySubscriptXSize value="650"/>
+ <ySubscriptYSize value="600"/>
+ <ySubscriptXOffset value="0"/>
+ <ySubscriptYOffset value="75"/>
+ <ySuperscriptXSize value="650"/>
+ <ySuperscriptYSize value="600"/>
+ <ySuperscriptXOffset value="0"/>
+ <ySuperscriptYOffset value="350"/>
+ <yStrikeoutSize value="50"/>
+ <yStrikeoutPosition value="300"/>
+ <sFamilyClass value="0"/>
+ <panose>
+ <bFamilyType value="0"/>
+ <bSerifStyle value="0"/>
+ <bWeight value="0"/>
+ <bProportion value="0"/>
+ <bContrast value="0"/>
+ <bStrokeVariation value="0"/>
+ <bArmStyle value="0"/>
+ <bLetterForm value="0"/>
+ <bMidline value="0"/>
+ <bXHeight value="0"/>
+ </panose>
+ <ulUnicodeRange1 value="00000000 00000000 00000000 00000001"/>
+ <ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
+ <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
+ <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
+ <achVendID value="None"/>
+ <fsSelection value="00000001 11000000"/>
+ <fsFirstCharIndex value="32"/>
+ <fsLastCharIndex value="80"/>
+ <sTypoAscender value="750"/>
+ <sTypoDescender value="-250"/>
+ <sTypoLineGap value="0"/>
+ <usWinAscent value="1000"/>
+ <usWinDescent value="0"/>
+ <ulCodePageRange1 value="00100000 00000000 00000000 00000001"/>
+ <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
+ <sxHeight value="500"/>
+ <sCapHeight value="750"/>
+ <usDefaultChar value="0"/>
+ <usBreakChar value="32"/>
+ <usMaxContex value="0"/>
+ </OS_2>
+
+ <name>
+ <namerecord nameID="1" platformID="1" platEncID="0" langID="0x0">
+ __familyName__
+ </namerecord>
+ <namerecord nameID="2" platformID="1" platEncID="0" langID="0x0">
+ Regular
+ </namerecord>
+ <namerecord nameID="3" platformID="1" platEncID="0" langID="0x0">
+ 1.000;TPSP;__familyName__-Regular
+ </namerecord>
+ <namerecord nameID="4" platformID="1" platEncID="0" langID="0x0">
+ __familyName__
+ </namerecord>
+ <namerecord nameID="5" platformID="1" platEncID="0" langID="0x0">
+ Version 1.000
+ </namerecord>
+ <namerecord nameID="6" platformID="1" platEncID="0" langID="0x0">
+ __familyName__-Regular
+ </namerecord>
+ <namerecord nameID="9" platformID="3" platEncID="0" langID="0x0">
+ Tal Leming with modifications by John Daggett
+ </namerecord>
+ <namerecord nameID="14" platformID="3" platEncID="0" langID="0x0">
+ http://scripts.sil.org/OFL
+ </namerecord>
+ <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
+ __familyName__
+ </namerecord>
+ <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
+ Regular
+ </namerecord>
+ <namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
+ 1.000;TPSP;__familyName__-Regular
+ </namerecord>
+ <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
+ __familyName__
+ </namerecord>
+ <namerecord nameID="5" platformID="3" platEncID="1" langID="0x409">
+ Version 1.000
+ </namerecord>
+ <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
+ __familyName__-Regular
+ </namerecord>
+ <namerecord nameID="9" platformID="3" platEncID="1" langID="0x409">
+ Tal Leming with modifications by John Daggett
+ </namerecord>
+ <namerecord nameID="14" platformID="3" platEncID="1" langID="0x409">
+ http://scripts.sil.org/OFL
+ </namerecord>
+ </name>
+
+ <cmap>
+ <tableVersion version="0"/>
+ <cmap_format_4 platformID="0" platEncID="3" language="0">
+ <map code="0x20" name="space"/><!-- SPACE -->
+ <map code="0x46" name="F"/><!-- LATIN CAPITAL LETTER F -->
+ <map code="0x50" name="P"/><!-- LATIN CAPITAL LETTER P -->
+ </cmap_format_4>
+ <cmap_format_4 platformID="3" platEncID="1" language="0">
+ <map code="0x20" name="space"/><!-- SPACE -->
+ <map code="0x46" name="F"/><!-- LATIN CAPITAL LETTER F -->
+ <map code="0x50" name="P"/><!-- LATIN CAPITAL LETTER P -->
+ </cmap_format_4>
+ </cmap>
+
+ <post>
+ <formatType value="3.0"/>
+ <italicAngle value="0.0"/>
+ <underlinePosition value="-75"/>
+ <underlineThickness value="50"/>
+ <isFixedPitch value="0"/>
+ <minMemType42 value="0"/>
+ <maxMemType42 value="0"/>
+ <minMemType1 value="0"/>
+ <maxMemType1 value="0"/>
+ </post>
+
+ <CFF>
+
+ <CFFFont name="__familyName__-Regular">
+ <version value="001.000"/>
+ <FullName value="__familyName__"/>
+ <FamilyName value="__familyName__"/>
+ <Weight value="Normal"/>
+ <isFixedPitch value="0"/>
+ <ItalicAngle value="0"/>
+ <UnderlineThickness value="50"/>
+ <PaintType value="0"/>
+ <CharstringType value="2"/>
+ <FontMatrix value="0.001 0 0 0.001 0 0"/>
+ <FontBBox value="100 0 2204 750"/>
+ <StrokeWidth value="0"/>
+ <!-- charset is dumped separately as the 'GlyphOrder' element -->
+ <Encoding name="StandardEncoding"/>
+ <Private>
+ <BlueValues value="0 0"/>
+ <BlueScale value="0.039625"/>
+ <BlueShift value="7"/>
+ <BlueFuzz value="1"/>
+ <ForceBold value="0"/>
+ <LanguageGroup value="0"/>
+ <ExpansionFactor value="0.06"/>
+ <initialRandomSeed value="0"/>
+ <defaultWidthX value="750"/>
+ <nominalWidthX value="2406"/>
+ </Private>
+ <CharStrings>
+ <CharString name=".notdef">
+ endchar
+ </CharString>
+ <CharString name="F">
+ -102 787 hmoveto
+ 31 119 rlineto
+ 203 hlineto
+ 32 -119 rlineto
+ 246 hlineto
+ -213 700 rlineto
+ -296 hlineto
+ -213 -700 rlineto
+ -477 hmoveto
+ 237 244 245 162 -245 130 287 164 -524 hlineto
+ 1586 -700 rmoveto
+ 518 180 -281 520 -237 hlineto
+ -332 -700 rmoveto
+ 237 700 -237 hlineto
+ -434 -196 rmoveto
+ 60 -228 rlineto
+ -120 hlineto
+ endchar
+ </CharString>
+ <CharString name="P">
+ -107 394 306 rmoveto
+ 153 86 82 115 115 -86 82 -153 hvcurveto
+ -294 -15 91 -670 -91 -15 297 15 -101 291 hlineto
+ 632 -291 rmoveto
+ -15 276 15 -67 vlineto
+ -254 690 rlineto
+ -12 hlineto
+ -219 -593 rlineto
+ -69 -25 -46 -28 -59 hhcurveto
+ -5 -15 259 15 -26 hlineto
+ -67 -35 34 71 26 hvcurveto
+ 43 116 rlineto
+ 232 hlineto
+ 78 -221 rlineto
+ 599 695 rmoveto
+ -28 -11 -5 -6 -14 -22 -44 34 -78 hhcurveto
+ -124 -91 -73 -106 -95 52 -64 147 -61 hvcurveto
+ 126 -52 30 -44 -79 vvcurveto
+ -81 -55 -50 -81 -103 -85 70 168 -17 vhcurveto
+ -15 -253 15 hlineto
+ 22 4 13 15 18 45 32 -37 98 hhcurveto
+ 130 92 82 116 83 -32 66 -173 73 hvcurveto
+ -120 50 -33 43 72 vvcurveto
+ 71 51 49 82 90 65 -92 -119 13 vhcurveto
+ 15 226 hlineto
+ -1118 -207 rmoveto
+ -119 -49 -63 -96 vhcurveto
+ -82 364 82 hlineto
+ 96 49 -63 -119 hvcurveto
+ 312 53 rmoveto
+ 108 -305 rlineto
+ -221 hlineto
+ 1420 459 rmoveto
+ -28 -11 -5 -6 -14 -22 -44 34 -78 hhcurveto
+ -124 -91 -73 -106 -95 52 -64 147 -61 hvcurveto
+ 126 -52 30 -44 -79 vvcurveto
+ -81 -55 -50 -81 -103 -85 70 168 -17 vhcurveto
+ -15 -253 15 hlineto
+ 22 4 13 15 18 45 32 -37 98 hhcurveto
+ 130 92 82 116 83 -32 66 -173 73 hvcurveto
+ -120 50 -33 43 72 vvcurveto
+ 71 51 49 82 90 65 -92 -119 13 vhcurveto
+ 15 226 hlineto
+ endchar
+ </CharString>
+ <CharString name="space">
+ endchar
+ </CharString>
+ </CharStrings>
+ </CFFFont>
+
+ <GlobalSubrs>
+ <!-- The 'index' attribute is only for humans; it is ignored when parsed. -->
+ </GlobalSubrs>
+
+ </CFF>
+
+ <hmtx>
+ <mtx name=".notdef" width="750" lsb="0"/>
+ <mtx name="F" width="2304" lsb="100"/>
+ <mtx name="P" width="2299" lsb="100"/>
+ <mtx name="space" width="750" lsb="0"/>
+ </hmtx>
+
+</ttFont>
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/makegsubfonts.py b/testing/web-platform/tests/css/css-fonts/support/fonts/makegsubfonts.py
new file mode 100644
index 0000000000..b46fa0e632
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/makegsubfonts.py
@@ -0,0 +1,485 @@
+import os
+import textwrap
+from xml.etree import ElementTree
+from fontTools.ttLib import TTFont, newTable
+from fontTools.misc.psCharStrings import T2CharString
+from fontTools.ttLib.tables.otTables import GSUB,\
+ ScriptList, ScriptRecord, Script, DefaultLangSys,\
+ FeatureList, FeatureRecord, Feature,\
+ LookupList, Lookup, AlternateSubst, SingleSubst
+
+# paths
+directory = os.path.dirname(__file__)
+shellSourcePath = os.path.join(directory, "gsubtest-shell.ttx")
+shellTempPath = os.path.join(directory, "gsubtest-shell.otf")
+featureList = os.path.join(directory, "gsubtest-features.txt")
+javascriptData = os.path.join(directory, "gsubtest-features.js")
+outputPath = os.path.join(os.path.dirname(directory), "gsubtest-lookup%d")
+
+baseCodepoint = 0xe000
+
+# -------
+# Features
+# -------
+
+f = open(featureList, "rb")
+text = f.read()
+f.close()
+mapping = []
+for line in text.splitlines():
+ line = line.strip()
+ if not line:
+ continue
+ if line.startswith("#"):
+ continue
+ # parse
+ values = line.split("\t")
+ tag = values.pop(0)
+ mapping.append(tag);
+
+# --------
+# Outlines
+# --------
+
+def addGlyphToCFF(glyphName=None, program=None, private=None, globalSubrs=None, charStringsIndex=None, topDict=None, charStrings=None):
+ charString = T2CharString(program=program, private=private, globalSubrs=globalSubrs)
+ charStringsIndex.append(charString)
+ glyphID = len(topDict.charset)
+ charStrings.charStrings[glyphName] = glyphID
+ topDict.charset.append(glyphName)
+
+def makeLookup1():
+ # make a variation of the shell TTX data
+ f = open(shellSourcePath)
+ ttxData = f.read()
+ f.close()
+ ttxData = ttxData.replace("__familyName__", "gsubtest-lookup1")
+ tempShellSourcePath = shellSourcePath + ".temp"
+ f = open(tempShellSourcePath, "wb")
+ f.write(ttxData)
+ f.close()
+
+ # compile the shell
+ shell = TTFont(sfntVersion="OTTO")
+ shell.importXML(tempShellSourcePath)
+ shell.save(shellTempPath)
+ os.remove(tempShellSourcePath)
+
+ # load the shell
+ shell = TTFont(shellTempPath)
+
+ # grab the PASS and FAIL data
+ hmtx = shell["hmtx"]
+ glyphSet = shell.getGlyphSet()
+
+ failGlyph = glyphSet["F"]
+ failGlyph.decompile()
+ failGlyphProgram = list(failGlyph.program)
+ failGlyphMetrics = hmtx["F"]
+
+ passGlyph = glyphSet["P"]
+ passGlyph.decompile()
+ passGlyphProgram = list(passGlyph.program)
+ passGlyphMetrics = hmtx["P"]
+
+ # grab some tables
+ hmtx = shell["hmtx"]
+ cmap = shell["cmap"]
+
+ # start the glyph order
+ existingGlyphs = [".notdef", "space", "F", "P"]
+ glyphOrder = list(existingGlyphs)
+
+ # start the CFF
+ cff = shell["CFF "].cff
+ globalSubrs = cff.GlobalSubrs
+ topDict = cff.topDictIndex[0]
+ topDict.charset = existingGlyphs
+ private = topDict.Private
+ charStrings = topDict.CharStrings
+ charStringsIndex = charStrings.charStringsIndex
+
+ features = sorted(mapping)
+
+ # build the outline, hmtx and cmap data
+ cp = baseCodepoint
+ for index, tag in enumerate(features):
+
+ # tag.pass
+ glyphName = "%s.pass" % tag
+ glyphOrder.append(glyphName)
+ addGlyphToCFF(
+ glyphName=glyphName,
+ program=passGlyphProgram,
+ private=private,
+ globalSubrs=globalSubrs,
+ charStringsIndex=charStringsIndex,
+ topDict=topDict,
+ charStrings=charStrings
+ )
+ hmtx[glyphName] = passGlyphMetrics
+
+ for table in cmap.tables:
+ if table.format == 4:
+ table.cmap[cp] = glyphName
+ else:
+ raise NotImplementedError("Unsupported cmap table format: %d" % table.format)
+ cp += 1
+
+ # tag.fail
+ glyphName = "%s.fail" % tag
+ glyphOrder.append(glyphName)
+ addGlyphToCFF(
+ glyphName=glyphName,
+ program=failGlyphProgram,
+ private=private,
+ globalSubrs=globalSubrs,
+ charStringsIndex=charStringsIndex,
+ topDict=topDict,
+ charStrings=charStrings
+ )
+ hmtx[glyphName] = failGlyphMetrics
+
+ for table in cmap.tables:
+ if table.format == 4:
+ table.cmap[cp] = glyphName
+ else:
+ raise NotImplementedError("Unsupported cmap table format: %d" % table.format)
+
+ # bump this up so that the sequence is the same as the lookup 3 font
+ cp += 3
+
+ # set the glyph order
+ shell.setGlyphOrder(glyphOrder)
+
+ # start the GSUB
+ shell["GSUB"] = newTable("GSUB")
+ gsub = shell["GSUB"].table = GSUB()
+ gsub.Version = 1.0
+
+ # make a list of all the features we will make
+ featureCount = len(features)
+
+ # set up the script list
+ scriptList = gsub.ScriptList = ScriptList()
+ scriptList.ScriptCount = 1
+ scriptList.ScriptRecord = []
+ scriptRecord = ScriptRecord()
+ scriptList.ScriptRecord.append(scriptRecord)
+ scriptRecord.ScriptTag = "DFLT"
+ script = scriptRecord.Script = Script()
+ defaultLangSys = script.DefaultLangSys = DefaultLangSys()
+ defaultLangSys.FeatureCount = featureCount
+ defaultLangSys.FeatureIndex = range(defaultLangSys.FeatureCount)
+ defaultLangSys.ReqFeatureIndex = 65535
+ defaultLangSys.LookupOrder = None
+ script.LangSysCount = 0
+ script.LangSysRecord = []
+
+ # set up the feature list
+ featureList = gsub.FeatureList = FeatureList()
+ featureList.FeatureCount = featureCount
+ featureList.FeatureRecord = []
+ for index, tag in enumerate(features):
+ # feature record
+ featureRecord = FeatureRecord()
+ featureRecord.FeatureTag = tag
+ feature = featureRecord.Feature = Feature()
+ featureList.FeatureRecord.append(featureRecord)
+ # feature
+ feature.FeatureParams = None
+ feature.LookupCount = 1
+ feature.LookupListIndex = [index]
+
+ # write the lookups
+ lookupList = gsub.LookupList = LookupList()
+ lookupList.LookupCount = featureCount
+ lookupList.Lookup = []
+ for tag in features:
+ # lookup
+ lookup = Lookup()
+ lookup.LookupType = 1
+ lookup.LookupFlag = 0
+ lookup.SubTableCount = 1
+ lookup.SubTable = []
+ lookupList.Lookup.append(lookup)
+ # subtable
+ subtable = SingleSubst()
+ subtable.Format = 2
+ subtable.LookupType = 1
+ subtable.mapping = {
+ "%s.pass" % tag : "%s.fail" % tag,
+ "%s.fail" % tag : "%s.pass" % tag,
+ }
+ lookup.SubTable.append(subtable)
+
+ path = outputPath % 1 + ".otf"
+ if os.path.exists(path):
+ os.remove(path)
+ shell.save(path)
+
+ # get rid of the shell
+ if os.path.exists(shellTempPath):
+ os.remove(shellTempPath)
+
+def makeLookup3():
+ # make a variation of the shell TTX data
+ f = open(shellSourcePath)
+ ttxData = f.read()
+ f.close()
+ ttxData = ttxData.replace("__familyName__", "gsubtest-lookup3")
+ tempShellSourcePath = shellSourcePath + ".temp"
+ f = open(tempShellSourcePath, "wb")
+ f.write(ttxData)
+ f.close()
+
+ # compile the shell
+ shell = TTFont(sfntVersion="OTTO")
+ shell.importXML(tempShellSourcePath)
+ shell.save(shellTempPath)
+ os.remove(tempShellSourcePath)
+
+ # load the shell
+ shell = TTFont(shellTempPath)
+
+ # grab the PASS and FAIL data
+ hmtx = shell["hmtx"]
+ glyphSet = shell.getGlyphSet()
+
+ failGlyph = glyphSet["F"]
+ failGlyph.decompile()
+ failGlyphProgram = list(failGlyph.program)
+ failGlyphMetrics = hmtx["F"]
+
+ passGlyph = glyphSet["P"]
+ passGlyph.decompile()
+ passGlyphProgram = list(passGlyph.program)
+ passGlyphMetrics = hmtx["P"]
+
+ # grab some tables
+ hmtx = shell["hmtx"]
+ cmap = shell["cmap"]
+
+ # start the glyph order
+ existingGlyphs = [".notdef", "space", "F", "P"]
+ glyphOrder = list(existingGlyphs)
+
+ # start the CFF
+ cff = shell["CFF "].cff
+ globalSubrs = cff.GlobalSubrs
+ topDict = cff.topDictIndex[0]
+ topDict.charset = existingGlyphs
+ private = topDict.Private
+ charStrings = topDict.CharStrings
+ charStringsIndex = charStrings.charStringsIndex
+
+ features = sorted(mapping)
+
+ # build the outline, hmtx and cmap data
+ cp = baseCodepoint
+ for index, tag in enumerate(features):
+
+ # tag.pass
+ glyphName = "%s.pass" % tag
+ glyphOrder.append(glyphName)
+ addGlyphToCFF(
+ glyphName=glyphName,
+ program=passGlyphProgram,
+ private=private,
+ globalSubrs=globalSubrs,
+ charStringsIndex=charStringsIndex,
+ topDict=topDict,
+ charStrings=charStrings
+ )
+ hmtx[glyphName] = passGlyphMetrics
+
+ # tag.fail
+ glyphName = "%s.fail" % tag
+ glyphOrder.append(glyphName)
+ addGlyphToCFF(
+ glyphName=glyphName,
+ program=failGlyphProgram,
+ private=private,
+ globalSubrs=globalSubrs,
+ charStringsIndex=charStringsIndex,
+ topDict=topDict,
+ charStrings=charStrings
+ )
+ hmtx[glyphName] = failGlyphMetrics
+
+ # tag.default
+ glyphName = "%s.default" % tag
+ glyphOrder.append(glyphName)
+ addGlyphToCFF(
+ glyphName=glyphName,
+ program=passGlyphProgram,
+ private=private,
+ globalSubrs=globalSubrs,
+ charStringsIndex=charStringsIndex,
+ topDict=topDict,
+ charStrings=charStrings
+ )
+ hmtx[glyphName] = passGlyphMetrics
+
+ for table in cmap.tables:
+ if table.format == 4:
+ table.cmap[cp] = glyphName
+ else:
+ raise NotImplementedError("Unsupported cmap table format: %d" % table.format)
+ cp += 1
+
+ # tag.alt1,2,3
+ for i in range(1,4):
+ glyphName = "%s.alt%d" % (tag, i)
+ glyphOrder.append(glyphName)
+ addGlyphToCFF(
+ glyphName=glyphName,
+ program=failGlyphProgram,
+ private=private,
+ globalSubrs=globalSubrs,
+ charStringsIndex=charStringsIndex,
+ topDict=topDict,
+ charStrings=charStrings
+ )
+ hmtx[glyphName] = failGlyphMetrics
+ for table in cmap.tables:
+ if table.format == 4:
+ table.cmap[cp] = glyphName
+ else:
+ raise NotImplementedError("Unsupported cmap table format: %d" % table.format)
+ cp += 1
+
+ # set the glyph order
+ shell.setGlyphOrder(glyphOrder)
+
+ # start the GSUB
+ shell["GSUB"] = newTable("GSUB")
+ gsub = shell["GSUB"].table = GSUB()
+ gsub.Version = 1.0
+
+ # make a list of all the features we will make
+ featureCount = len(features)
+
+ # set up the script list
+ scriptList = gsub.ScriptList = ScriptList()
+ scriptList.ScriptCount = 1
+ scriptList.ScriptRecord = []
+ scriptRecord = ScriptRecord()
+ scriptList.ScriptRecord.append(scriptRecord)
+ scriptRecord.ScriptTag = "DFLT"
+ script = scriptRecord.Script = Script()
+ defaultLangSys = script.DefaultLangSys = DefaultLangSys()
+ defaultLangSys.FeatureCount = featureCount
+ defaultLangSys.FeatureIndex = range(defaultLangSys.FeatureCount)
+ defaultLangSys.ReqFeatureIndex = 65535
+ defaultLangSys.LookupOrder = None
+ script.LangSysCount = 0
+ script.LangSysRecord = []
+
+ # set up the feature list
+ featureList = gsub.FeatureList = FeatureList()
+ featureList.FeatureCount = featureCount
+ featureList.FeatureRecord = []
+ for index, tag in enumerate(features):
+ # feature record
+ featureRecord = FeatureRecord()
+ featureRecord.FeatureTag = tag
+ feature = featureRecord.Feature = Feature()
+ featureList.FeatureRecord.append(featureRecord)
+ # feature
+ feature.FeatureParams = None
+ feature.LookupCount = 1
+ feature.LookupListIndex = [index]
+
+ # write the lookups
+ lookupList = gsub.LookupList = LookupList()
+ lookupList.LookupCount = featureCount
+ lookupList.Lookup = []
+ for tag in features:
+ # lookup
+ lookup = Lookup()
+ lookup.LookupType = 3
+ lookup.LookupFlag = 0
+ lookup.SubTableCount = 1
+ lookup.SubTable = []
+ lookupList.Lookup.append(lookup)
+ # subtable
+ subtable = AlternateSubst()
+ subtable.Format = 1
+ subtable.LookupType = 3
+ subtable.alternates = {
+ "%s.default" % tag : ["%s.fail" % tag, "%s.fail" % tag, "%s.fail" % tag],
+ "%s.alt1" % tag : ["%s.pass" % tag, "%s.fail" % tag, "%s.fail" % tag],
+ "%s.alt2" % tag : ["%s.fail" % tag, "%s.pass" % tag, "%s.fail" % tag],
+ "%s.alt3" % tag : ["%s.fail" % tag, "%s.fail" % tag, "%s.pass" % tag]
+ }
+ lookup.SubTable.append(subtable)
+
+ path = outputPath % 3 + ".otf"
+ if os.path.exists(path):
+ os.remove(path)
+ shell.save(path)
+
+ # get rid of the shell
+ if os.path.exists(shellTempPath):
+ os.remove(shellTempPath)
+
+def makeJavascriptData():
+ features = sorted(mapping)
+ outStr = []
+
+ outStr.append("")
+ outStr.append("/* This file is autogenerated by makegsubfonts.py */")
+ outStr.append("")
+ outStr.append("/* ")
+ outStr.append(" Features defined in gsubtest fonts with associated base")
+ outStr.append(" codepoints for each feature:")
+ outStr.append("")
+ outStr.append(" cp = codepoint for feature featX")
+ outStr.append("")
+ outStr.append(" cp default PASS")
+ outStr.append(" cp featX=1 FAIL")
+ outStr.append(" cp featX=2 FAIL")
+ outStr.append("")
+ outStr.append(" cp+1 default FAIL")
+ outStr.append(" cp+1 featX=1 PASS")
+ outStr.append(" cp+1 featX=2 FAIL")
+ outStr.append("")
+ outStr.append(" cp+2 default FAIL")
+ outStr.append(" cp+2 featX=1 FAIL")
+ outStr.append(" cp+2 featX=2 PASS")
+ outStr.append("")
+ outStr.append("*/")
+ outStr.append("")
+ outStr.append("var gFeatures = {");
+ cp = baseCodepoint
+
+ taglist = []
+ for tag in features:
+ taglist.append("\"%s\": 0x%x" % (tag, cp))
+ cp += 4
+
+ outStr.append(textwrap.fill(", ".join(taglist), initial_indent=" ", subsequent_indent=" "))
+ outStr.append("};");
+ outStr.append("");
+
+ if os.path.exists(javascriptData):
+ os.remove(javascriptData)
+
+ f = open(javascriptData, "wb")
+ f.write("\n".join(outStr))
+ f.close()
+
+
+# build fonts
+
+print("Making lookup type 1 font...")
+makeLookup1()
+
+print("Making lookup type 3 font...")
+makeLookup3()
+
+# output javascript data
+
+print("Making javascript data file...")
+makeJavascriptData()
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/pass.woff b/testing/web-platform/tests/css/css-fonts/support/fonts/pass.woff
new file mode 100644
index 0000000000..839bb20b12
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/pass.woff
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/fonts/roboto_var_light_range.ttf b/testing/web-platform/tests/css/css-fonts/support/fonts/roboto_var_light_range.ttf
new file mode 100644
index 0000000000..07d1a7e68a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/fonts/roboto_var_light_range.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/green15x15.png b/testing/web-platform/tests/css/css-fonts/support/green15x15.png
new file mode 100644
index 0000000000..51741584a0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/green15x15.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/green_box.png b/testing/web-platform/tests/css/css-fonts/support/green_box.png
new file mode 100644
index 0000000000..6ed4aa506e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/green_box.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/js/font-variant-features.js b/testing/web-platform/tests/css/css-fonts/support/js/font-variant-features.js
new file mode 100644
index 0000000000..4b56fee193
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/js/font-variant-features.js
@@ -0,0 +1,220 @@
+
+// data associated with gsubtest test font for testing font features
+
+// prefix
+gPrefix = "";
+
+// equivalent properties
+// setting prop: value should match the specific feature settings listed
+//
+// each of these tests evaluate whether a given feature is enabled as required
+// and also whether features that shouldn't be enabled are or not.
+var gPropertyData = [
+ // font-variant-caps
+ // valid values
+ { prop: "font-variant-caps", value: "normal", features: {"smcp": 0} },
+ { prop: "font-variant-caps", value: "small-caps", features: {"smcp": 1, "c2sc": 0} },
+ { prop: "font-variant-caps", value: "all-small-caps", features: {"smcp": 1, "c2sc": 1, "pcap": 0} },
+ { prop: "font-variant-caps", value: "petite-caps", features: {"pcap": 1, "smcp": 0} },
+ { prop: "font-variant-caps", value: "all-petite-caps", features: {"c2pc": 1, "pcap": 1, "smcp": 0} },
+ { prop: "font-variant-caps", value: "titling-caps", features: {"titl": 1, "smcp": 0} },
+ { prop: "font-variant-caps", value: "unicase", features: {"unic": 1, "titl": 0} },
+
+ // invalid values
+ { prop: "font-variant-caps", value: "normal small-caps", features: {"smcp": 0}, invalid: true },
+ { prop: "font-variant-caps", value: "small-caps potato", features: {"smcp": 0}, invalid: true },
+ { prop: "font-variant-caps", value: "small-caps petite-caps", features: {"smcp": 0, "pcap": 0}, invalid: true },
+ { prop: "font-variant-caps", value: "small-caps all-small-caps", features: {"smcp": 0, "c2sc": 0}, invalid: true },
+ { prop: "font-variant-caps", value: "small-cap", features: {"smcp": 0}, invalid: true },
+
+ // font-variant-east-asian
+ // valid values
+ { prop: "font-variant-east-asian", value: "jis78", features: {"jp78": 1, "jp04": 0} },
+ { prop: "font-variant-east-asian", value: "jis83", features: {"jp83": 1, "jp04": 0} },
+ { prop: "font-variant-east-asian", value: "jis90", features: {"jp90": 1, "jp04": 0} },
+ { prop: "font-variant-east-asian", value: "jis04", features: {"jp04": 1, "jp78": 0} },
+ { prop: "font-variant-east-asian", value: "simplified", features: {"smpl": 1, "jp04": 0} },
+ { prop: "font-variant-east-asian", value: "traditional", features: {"trad": 1, "jp04": 0} },
+ { prop: "font-variant-east-asian", value: "full-width", features: {"fwid": 1, "jp04": 0} },
+ { prop: "font-variant-east-asian", value: "proportional-width", features: {"pwid": 1, "jp04": 0} },
+ { prop: "font-variant-east-asian", value: "ruby", features: {"ruby": 1, "jp04": 0} },
+ { prop: "font-variant-east-asian", value: "jis78 full-width", features: {"jp78": 1, "fwid": 1, "jp83": 0} },
+ { prop: "font-variant-east-asian", value: "jis78 full-width ruby", features: {"jp78": 1, "fwid": 1, "jp83": 0, "ruby": 1} },
+ { prop: "font-variant-east-asian", value: "simplified proportional-width", features: {"smpl": 1, "pwid": 1, "jp83": 0} },
+ { prop: "font-variant-east-asian", value: "ruby simplified", features: {"ruby": 1, "smpl": 1, "trad": 0} },
+
+ // invalid values
+ { prop: "font-variant-east-asian", value: "ruby normal", features: {"ruby": 0}, invalid: true },
+ { prop: "font-variant-east-asian", value: "jis90 jis04", features: {"jp90": 0, "jp04": 0}, invalid: true },
+ { prop: "font-variant-east-asian", value: "simplified traditional", features: {"smpl": 0, "trad": 0}, invalid: true },
+ { prop: "font-variant-east-asian", value: "full-width proportional-width", features: {"fwid": 0, "pwid": 0}, invalid: true },
+ { prop: "font-variant-east-asian", value: "ruby simplified ruby", features: {"ruby": 0, "smpl": 0, "jp04": 0}, invalid: true },
+ { prop: "font-variant-east-asian", value: "jis78 ruby simplified", features: {"ruby": 0, "smpl": 0, "jp78": 0}, invalid: true },
+
+ // font-variant-ligatures
+ // valid values
+ { prop: "font-variant-ligatures", value: "normal", features: {"liga": 1, "dlig": 0} },
+ { prop: "font-variant-ligatures", value: "common-ligatures", features: {"liga": 1, "clig": 1, "dlig": 0, "hlig": 0, "calt": 1} },
+ { prop: "font-variant-ligatures", value: "no-common-ligatures", features: {"liga": 0, "clig": 0, "dlig": 0, "hlig": 0, "calt": 1} },
+ { prop: "font-variant-ligatures", value: "discretionary-ligatures", features: {"liga": 1, "clig": 1, "dlig": 1, "hlig": 0, "calt": 1} },
+ { prop: "font-variant-ligatures", value: "no-discretionary-ligatures", features: {"liga": 1, "clig": 1, "dlig": 0, "hlig": 0, "calt": 1} },
+ { prop: "font-variant-ligatures", value: "historical-ligatures", features: {"liga": 1, "clig": 1, "dlig": 0, "hlig": 1, "calt": 1} },
+ { prop: "font-variant-ligatures", value: "no-historical-ligatures", features: {"liga": 1, "clig": 1, "dlig": 0, "hlig": 0, "calt": 1} },
+ { prop: "font-variant-ligatures", value: "contextual", features: {"liga": 1, "clig": 1, "dlig": 0, "hlig": 0, "calt": 1} },
+ { prop: "font-variant-ligatures", value: "no-contextual", features: {"liga": 1, "clig": 1, "dlig": 0, "hlig": 0, "calt": 0} },
+ { prop: "font-variant-ligatures", value: "common-ligatures no-discretionary-ligatures", features: {"liga": 1, "clig": 1, "dlig": 0, "hlig": 0, "calt": 1} },
+ { prop: "font-variant-ligatures", value: "historical-ligatures no-common-ligatures", features: {"clig": 0, "liga": 0, "dlig": 0, "hlig": 1, "calt": 1} },
+ { prop: "font-variant-ligatures", value: "no-historical-ligatures discretionary-ligatures", features: {"liga": 1, "clig": 1, "dlig": 1, "hlig": 0, "calt": 1} },
+ { prop: "font-variant-ligatures", value: "common-ligatures no-discretionary-ligatures historical-ligatures no-contextual", features: {"clig": 1, "dlig": 0, "hlig": 1, "liga": 1, "calt": 0} },
+
+ // invalid values
+ { prop: "font-variant-ligatures", value: "common-ligatures normal", features: {"liga": 1, "clig": 1, "dlig": 0}, invalid: true },
+ { prop: "font-variant-ligatures", value: "common-ligatures no-common-ligatures", features: {"liga": 1, "clig": 1, "dlig": 0}, invalid: true },
+ { prop: "font-variant-ligatures", value: "common-ligatures common-ligatures", features: {"liga": 1, "clig": 1, "dlig": 0}, invalid: true },
+ { prop: "font-variant-ligatures", value: "no-historical-ligatures historical-ligatures", features: {"liga": 1, "clig": 1, "dlig": 0, "hlig": 0}, invalid: true },
+ { prop: "font-variant-ligatures", value: "no-contextual contextual", features: {"liga": 1, "clig": 1, "dlig": 0, "hlig": 0}, invalid: true },
+ { prop: "font-variant-ligatures", value: "no-discretionary-ligatures discretionary-ligatures", features: {"liga": 1, "clig": 1, "dlig": 0}, invalid: true },
+ { prop: "font-variant-ligatures", value: "common-ligatures no-discretionary-ligatures no-common-ligatures", features: {"liga": 1, "clig": 1, "dlig": 0}, invalid: true },
+
+ // font-variant-numeric
+ // valid values
+ { prop: "font-variant-numeric", value: "normal", features: {"lnum": 0, "tnum": 0, "pnum": 0, "onum": 0} },
+ { prop: "font-variant-numeric", value: "lining-nums", features: {"lnum": 1, "onum": 0, "pnum": 0} },
+ { prop: "font-variant-numeric", value: "oldstyle-nums", features: {"lnum": 0, "onum": 1, "pnum": 0} },
+ { prop: "font-variant-numeric", value: "proportional-nums", features: {"lnum": 0, "onum": 0, "pnum": 1, "tnum": 0} },
+ { prop: "font-variant-numeric", value: "proportional-nums oldstyle-nums", features: {"lnum": 0, "onum": 1, "pnum": 1, "tnum": 0} },
+ { prop: "font-variant-numeric", value: "tabular-nums", features: {"tnum": 1, "onum": 0, "pnum": 0} },
+ { prop: "font-variant-numeric", value: "diagonal-fractions", features: {"frac": 1, "afrc": 0, "pnum": 0} },
+ { prop: "font-variant-numeric", value: "stacked-fractions", features: {"frac": 0, "afrc": 1, "pnum": 0} },
+ { prop: "font-variant-numeric", value: "slashed-zero", features: {"zero": 1, "pnum": 0} },
+ { prop: "font-variant-numeric", value: "ordinal", features: {"ordn": 1, "pnum": 0} },
+ { prop: "font-variant-numeric", value: "lining-nums diagonal-fractions", features: {"frac": 1, "afrc": 0, "lnum": 1} },
+ { prop: "font-variant-numeric", value: "tabular-nums stacked-fractions", features: {"frac": 0, "afrc": 1, "tnum": 1} },
+ { prop: "font-variant-numeric", value: "tabular-nums slashed-zero stacked-fractions", features: {"frac": 0, "afrc": 1, "tnum": 1, "zero": 1} },
+ { prop: "font-variant-numeric", value: "proportional-nums slashed-zero diagonal-fractions oldstyle-nums ordinal", features: {"frac": 1, "afrc": 0, "tnum": 0, "pnum": 1, "onum": 1, "ordn": 1, "zero": 1} },
+
+ // invalid values
+ { prop: "font-variant-numeric", value: "lining-nums normal", features: {"lnum": 0, "onum": 0}, invalid: true },
+ { prop: "font-variant-numeric", value: "lining-nums oldstyle-nums", features: {"lnum": 0, "onum": 0}, invalid: true },
+ { prop: "font-variant-numeric", value: "lining-nums normal slashed-zero ordinal", features: {"lnum": 0, "onum": 0, "zero": 0}, invalid: true },
+ { prop: "font-variant-numeric", value: "proportional-nums tabular-nums", features: {"pnum": 0, "tnum": 0}, invalid: true },
+ { prop: "font-variant-numeric", value: "diagonal-fractions stacked-fractions", features: {"frac": 0, "afrc": 0}, invalid: true },
+ { prop: "font-variant-numeric", value: "slashed-zero diagonal-fractions slashed-zero", features: {"frac": 0, "afrc": 0, "zero": 0}, invalid: true },
+ { prop: "font-variant-numeric", value: "lining-nums slashed-zero diagonal-fractions oldstyle-nums", features: {"frac": 0, "afrc": 0, "zero": 0, "onum": 0}, invalid: true },
+
+ // font-variant-position
+ // valid values
+ { prop: "font-variant-position", value: "normal", features: {"subs": 0, "sups": 0} },
+ { prop: "font-variant-position", value: "super", features: {"subs": 0, "sups": 1} },
+ { prop: "font-variant-position", value: "sub", features: {"subs": 1, "sups": 0} },
+
+ // invalid values
+ { prop: "font-variant-position", value: "super sub", features: {"subs": 0, "sups": 0}, invalid: true },
+];
+
+// note: the code below requires an array "gFeatures" from :
+// support/fonts/gsubtest-features.js
+
+// The font defines feature lookups for all OpenType features for a
+// specific set of PUA codepoints, as listed in the gFeatures array.
+// Using these codepoints and feature combinations, tests can be
+// constructed to detect when certain features are enabled or not.
+
+// return a created table containing tests for a given property
+//
+// Ex: { prop: "font-variant-ligatures", value: "common-ligatures", features: {"liga": 1, "clig": 1, "dlig": 0, "hlig": 0} }
+//
+// This means that for the property 'font-variant-ligatures' with the value 'common-ligatures', the features listed should
+// either be explicitly enabled or disabled.
+
+// propData is the prop/value list with corresponding feature assertions
+// whichProp is either "all" or a specific subproperty (i.e. "font-variant-position")
+// isRef is true when this is the reference
+// debug outputs the prop/value pair along with the tests
+
+function createFeatureTestTable(propData, whichProp, isRef, debug)
+{
+ var table = document.createElement("table");
+
+ if (typeof(isRef) == "undefined") {
+ isRef = false;
+ }
+
+ if (typeof(debug) == "undefined") {
+ debug = false;
+ }
+
+ var doAll = (whichProp == "all");
+ for (var i in propData) {
+ var data = propData[i];
+
+ if (!doAll && data.prop != whichProp) continue;
+
+ var row = document.createElement("tr");
+ var invalid = false;
+ if ("invalid" in data) {
+ invalid = true;
+ row.className = "invalid";
+ }
+
+ var cell = document.createElement("td");
+ cell.className = "prop";
+ var styledecl = gPrefix + data.prop + ": " + data.value + ";";
+ cell.innerHTML = styledecl;
+ row.appendChild(cell);
+ if (debug) {
+ table.appendChild(row);
+ }
+
+ row = document.createElement("tr");
+ if (invalid) {
+ row.className = "invalid";
+ }
+
+ cell = document.createElement("td");
+ cell.className = "features";
+ if (!isRef) {
+ cell.style.cssText = styledecl;
+ }
+
+ for (var f in data.features) {
+ var feature = data.features[f];
+
+ var cp, unsupported = "F".charCodeAt(0);
+ var basecp = gFeatures[f];
+
+ if (typeof(basecp) == "undefined") {
+ cp = unsupported;
+ } else {
+ switch(feature) {
+ case 0:
+ cp = basecp;
+ break;
+ case 1:
+ cp = basecp + 1;
+ break;
+ case 2:
+ cp = basecp + 2;
+ break;
+ case 3:
+ cp = basecp + 3;
+ break;
+ default:
+ cp = basecp + 1;
+ break;
+ }
+ }
+
+ var span = document.createElement("span");
+ span.innerHTML = (isRef ? "P " : "&#x" + cp.toString(16) + "; ");
+ span.title = f + "=" + feature;
+ cell.appendChild(span);
+ }
+ row.appendChild(cell);
+ table.appendChild(row);
+ }
+
+ return table;
+}
+
+
diff --git a/testing/web-platform/tests/css/css-fonts/support/margin-collapse-2em-space.png b/testing/web-platform/tests/css/css-fonts/support/margin-collapse-2em-space.png
new file mode 100644
index 0000000000..2c381ef4dc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/margin-collapse-2em-space.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/margin-collapse-4em-space.png b/testing/web-platform/tests/css/css-fonts/support/margin-collapse-4em-space.png
new file mode 100644
index 0000000000..dc338c0bfe
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/margin-collapse-4em-space.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/orange15x15.png b/testing/web-platform/tests/css/css-fonts/support/orange15x15.png
new file mode 100644
index 0000000000..f0c26367a4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/orange15x15.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/orange_box.png b/testing/web-platform/tests/css/css-fonts/support/orange_box.png
new file mode 100644
index 0000000000..793e6c9094
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/orange_box.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/pattern-grg-rgr-grg.png b/testing/web-platform/tests/css/css-fonts/support/pattern-grg-rgr-grg.png
new file mode 100644
index 0000000000..9b88fbd811
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/pattern-grg-rgr-grg.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/pattern-grg-rrg-rgg.png b/testing/web-platform/tests/css/css-fonts/support/pattern-grg-rrg-rgg.png
new file mode 100644
index 0000000000..fcf4f3fd7d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/pattern-grg-rrg-rgg.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/pattern-rgr-grg-rgr.png b/testing/web-platform/tests/css/css-fonts/support/pattern-rgr-grg-rgr.png
new file mode 100644
index 0000000000..d454e3a630
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/pattern-rgr-grg-rgr.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/pattern-tr.png b/testing/web-platform/tests/css/css-fonts/support/pattern-tr.png
new file mode 100644
index 0000000000..8b4b25364e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/pattern-tr.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/red15x15.png b/testing/web-platform/tests/css/css-fonts/support/red15x15.png
new file mode 100644
index 0000000000..39005d7e6b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/red15x15.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/red_box.png b/testing/web-platform/tests/css/css-fonts/support/red_box.png
new file mode 100644
index 0000000000..57bf3ddc52
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/red_box.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/ring.png b/testing/web-platform/tests/css/css-fonts/support/ring.png
new file mode 100644
index 0000000000..061bb94eba
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/ring.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/square-purple.png b/testing/web-platform/tests/css/css-fonts/support/square-purple.png
new file mode 100644
index 0000000000..0f522d7872
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/square-purple.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/square-teal.png b/testing/web-platform/tests/css/css-fonts/support/square-teal.png
new file mode 100644
index 0000000000..e567f51b91
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/square-teal.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/square-white.png b/testing/web-platform/tests/css/css-fonts/support/square-white.png
new file mode 100644
index 0000000000..5853cbb238
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/square-white.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/swatch-aqua.png b/testing/web-platform/tests/css/css-fonts/support/swatch-aqua.png
new file mode 100644
index 0000000000..dd47e28665
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/swatch-aqua.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/swatch-blue.png b/testing/web-platform/tests/css/css-fonts/support/swatch-blue.png
new file mode 100644
index 0000000000..bf2759634d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/swatch-blue.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/swatch-green.png b/testing/web-platform/tests/css/css-fonts/support/swatch-green.png
new file mode 100644
index 0000000000..0aa79b0c86
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/swatch-green.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/swatch-lime.png b/testing/web-platform/tests/css/css-fonts/support/swatch-lime.png
new file mode 100644
index 0000000000..55fd7fdaed
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/swatch-lime.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/swatch-orange.png b/testing/web-platform/tests/css/css-fonts/support/swatch-orange.png
new file mode 100644
index 0000000000..d3cd498b52
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/swatch-orange.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/swatch-red.png b/testing/web-platform/tests/css/css-fonts/support/swatch-red.png
new file mode 100644
index 0000000000..1caf25c992
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/swatch-red.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/swatch-teal.png b/testing/web-platform/tests/css/css-fonts/support/swatch-teal.png
new file mode 100644
index 0000000000..0293ce89de
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/swatch-teal.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/swatch-white.png b/testing/web-platform/tests/css/css-fonts/support/swatch-white.png
new file mode 100644
index 0000000000..1a7d4323d7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/swatch-white.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/swatch-yellow.png b/testing/web-platform/tests/css/css-fonts/support/swatch-yellow.png
new file mode 100644
index 0000000000..1591aa0e2e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/swatch-yellow.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/test-bl.png b/testing/web-platform/tests/css/css-fonts/support/test-bl.png
new file mode 100644
index 0000000000..904e24e996
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/test-bl.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/test-br.png b/testing/web-platform/tests/css/css-fonts/support/test-br.png
new file mode 100644
index 0000000000..f413ff5c1a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/test-br.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/test-outer.png b/testing/web-platform/tests/css/css-fonts/support/test-outer.png
new file mode 100644
index 0000000000..82eeace7fc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/test-outer.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/test-tl.png b/testing/web-platform/tests/css/css-fonts/support/test-tl.png
new file mode 100644
index 0000000000..f6ac0ef7e8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/test-tl.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/test-tr.png b/testing/web-platform/tests/css/css-fonts/support/test-tr.png
new file mode 100644
index 0000000000..59843ae54b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/test-tr.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/support/transparent_green.png b/testing/web-platform/tests/css/css-fonts/support/transparent_green.png
new file mode 100644
index 0000000000..d5f50d3256
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/support/transparent_green.png
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/system-fonts-serialization.tentative.html b/testing/web-platform/tests/css/css-fonts/system-fonts-serialization.tentative.html
new file mode 100644
index 0000000000..6abd6f09d6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/system-fonts-serialization.tentative.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Fonts Test: Serialization of system fonts</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#valdef-font-caption">
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
+<div id="target"></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+const target = document.getElementById("target");
+target.style.font = "initial";
+const fontLonghands = [...target.style];
+
+const cs = getComputedStyle(target);
+function copyComputedStyle() {
+ const data = {};
+ data.font = cs.font;
+ for (const longhand of fontLonghands) {
+ data[longhand] = cs[longhand];
+ }
+ return data;
+}
+
+function check(systemFont) {
+ target.style.cssText = "";
+ target.style.font = systemFont;
+
+ assert_equals(target.style.font, systemFont, "System font serializes as-is");
+ assert_array_equals([...target.style], fontLonghands, "System font sets all longhands");
+ for (const longhand of fontLonghands) {
+ assert_equals(target.style[longhand], "", `Longhand '${longhand}' serializes as empty string`);
+ }
+
+ const copy = copyComputedStyle();
+ for (const longhand of fontLonghands) {
+ const resolvedStyle = cs[longhand];
+ assert_not_equals(resolvedStyle, "");
+
+ target.style[longhand] = resolvedStyle;
+ assert_equals(target.style[longhand], resolvedStyle, `Can set longhand '${longhand}'`);
+
+ assert_equals(target.style.font, "", `Shorthand serializes as empty string after setting '${longhand}'`);
+ assert_object_equals(copyComputedStyle(), copy, `Other longhands still work after setting '${longhand}'`);
+
+ target.style.font = systemFont;
+ }
+}
+
+// Standard system fonts
+const systemFonts = ["caption", "icon", "menu", "message-box", "small-caption", "status-bar"];
+
+// Some browsers also support these non-standard system fonts
+const extras = ["-webkit-mini-control", "-webkit-small-control", "-webkit-control"];
+
+for (const extra of extras) {
+ if (CSS.supports("font", extra)) {
+ systemFonts.push(extra);
+ }
+}
+
+for (let systemFont of systemFonts) {
+ test(() => check(systemFont), systemFont);
+}
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/system-ui-ar-notref.html b/testing/web-platform/tests/css/css-fonts/system-ui-ar-notref.html
new file mode 100644
index 0000000000..76a216ca74
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/system-ui-ar-notref.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<html lang="ar">
+<meta charset="utf-8">
+<title>CSS Test Reference</title>
+<link rel="stylesheet" href="/fonts/ahem.css">
+<style>
+@font-face {
+ font-family: noto-naskh;
+ src: url(/fonts/noto/NotoNaskhArabic-regular.woff2),
+ url(/fonts/noto/NotoNaskhArabic-regular.ttf);
+ size-adjust: 50%; /* cause mismatch even if system-ui maps to Noto Naskh */
+}
+p {
+ font-family: Ahem, noto-naskh, serif;
+ font-size: 4em;
+}
+</style>
+<p>سلام</p>
diff --git a/testing/web-platform/tests/css/css-fonts/system-ui-ar.html b/testing/web-platform/tests/css/css-fonts/system-ui-ar.html
new file mode 100644
index 0000000000..a65a564f9b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/system-ui-ar.html
@@ -0,0 +1,21 @@
+<!doctype html>
+<html lang="ar">
+<meta charset="utf-8">
+<title>Tests that system-ui font-family works for Arabic</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#system-ui-def">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="mismatch" href="system-ui-ar-notref.html">
+<link rel="stylesheet" href="/fonts/ahem.css">
+<style>
+@font-face {
+ font-family: noto-naskh;
+ src: url(/fonts/noto/NotoNaskhArabic-regular.woff2),
+ url(/fonts/noto/NotoNaskhArabic-regular.ttf);
+ size-adjust: 50%; /* cause mismatch even if system-ui maps to Noto Naskh */
+}
+p {
+ font-family: Ahem, system-ui, noto-naskh, serif;
+ font-size: 4em;
+}
+</style>
+<p>سلام</p>
diff --git a/testing/web-platform/tests/css/css-fonts/system-ui-ja-notref.html b/testing/web-platform/tests/css/css-fonts/system-ui-ja-notref.html
new file mode 100644
index 0000000000..c33e769ce3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/system-ui-ja-notref.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<html lang="ja">
+<meta charset="utf-8">
+<title>CSS Test Reference</title>
+<link rel="stylesheet" href="/fonts/ahem.css">
+<style>
+@font-face {
+ font-family: mplus;
+ src: url(/fonts/mplus-1p-regular.woff);
+ size-adjust: 50%; /* cause mismatch even if system-ui maps to M+ */
+}
+p {
+ font-family: Ahem, mplus, serif;
+ font-size: 4em;
+}
+</style>
+<p>&#x76F4;</p>
diff --git a/testing/web-platform/tests/css/css-fonts/system-ui-ja-vs-zh.html b/testing/web-platform/tests/css/css-fonts/system-ui-ja-vs-zh.html
new file mode 100644
index 0000000000..f3700697d5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/system-ui-ja-vs-zh.html
@@ -0,0 +1,20 @@
+<!doctype html>
+<html lang="ja">
+<title>Tests that system-ui font-family for Japanese differs from Chinese</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#system-ui-def">
+<link rel="help" href="https://www.unicode.org/faq/han_cjk.html#3">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="mismatch" href="system-ui-zh.html">
+<link rel="stylesheet" href="/fonts/ahem.css">
+<style>
+@font-face {
+ font-family: mplus;
+ src: url(/fonts/mplus-1p-regular.woff);
+ size-adjust: 50%; /* cause mismatch even if system-ui maps to M+ */
+}
+p {
+ font-family: Ahem, system-ui, mplus, serif;
+ font-size: 4em;
+}
+</style>
+<p>&#x76F4;</p> <!-- U+76F4 has distinct Japanese vs Chinese shapes, see Unicode FAQ -->
diff --git a/testing/web-platform/tests/css/css-fonts/system-ui-ja.html b/testing/web-platform/tests/css/css-fonts/system-ui-ja.html
new file mode 100644
index 0000000000..2b16fe005c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/system-ui-ja.html
@@ -0,0 +1,20 @@
+<!doctype html>
+<html lang="ja">
+<title>Tests that system-ui font-family works for Japanese</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#system-ui-def">
+<link rel="help" href="https://www.unicode.org/faq/han_cjk.html#3">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="mismatch" href="system-ui-ja-notref.html">
+<link rel="stylesheet" href="/fonts/ahem.css">
+<style>
+@font-face {
+ font-family: mplus;
+ src: url(/fonts/mplus-1p-regular.woff);
+ size-adjust: 50%; /* cause mismatch even if system-ui maps to M+ */
+}
+p {
+ font-family: Ahem, system-ui, mplus, serif;
+ font-size: 4em;
+}
+</style>
+<p>&#x76F4;</p> <!-- U+76F4 has distinct Japanese vs Chinese shapes, see Unicode FAQ -->
diff --git a/testing/web-platform/tests/css/css-fonts/system-ui-mixed-ref.html b/testing/web-platform/tests/css/css-fonts/system-ui-mixed-ref.html
new file mode 100644
index 0000000000..9604708bdc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/system-ui-mixed-ref.html
@@ -0,0 +1,11 @@
+<!doctype html>
+<html lang="en">
+<meta charset="utf-8">
+<title>CSS Test Reference</title>
+<style>
+p {
+ font-family: system-ui, sans-serif;
+ font-size: 4em;
+}
+</style>
+<p lang="zh">你好 <span lang="es">¡hola!</span> <span lang="ar">سلام</span></p>
diff --git a/testing/web-platform/tests/css/css-fonts/system-ui-mixed.html b/testing/web-platform/tests/css/css-fonts/system-ui-mixed.html
new file mode 100644
index 0000000000..a62bd216c7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/system-ui-mixed.html
@@ -0,0 +1,14 @@
+<!doctype html>
+<html lang="en">
+<meta charset="utf-8">
+<title>Tests that system-ui font-family works for mixed-script content</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#system-ui-def">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="match" href="system-ui-mixed-ref.html">
+<style>
+p {
+ font-family: system-ui, serif;
+ font-size: 4em;
+}
+</style>
+<p lang="zh">你好 ¡hola! سلام</p>
diff --git a/testing/web-platform/tests/css/css-fonts/system-ui-notref.html b/testing/web-platform/tests/css/css-fonts/system-ui-notref.html
new file mode 100644
index 0000000000..244f74d4fc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/system-ui-notref.html
@@ -0,0 +1,9 @@
+<!doctype html>
+<title>CSS Test Reference</title>
+<link rel="stylesheet" href="/fonts/ahem.css">
+<style>
+p {
+ font-family: Ahem;
+}
+</style>
+<p>ABC</p>
diff --git a/testing/web-platform/tests/css/css-fonts/system-ui-ur-notref.html b/testing/web-platform/tests/css/css-fonts/system-ui-ur-notref.html
new file mode 100644
index 0000000000..90529ea4ac
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/system-ui-ur-notref.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<html lang="ur">
+<meta charset="utf-8">
+<title>CSS Test Reference</title>
+<link rel="stylesheet" href="/fonts/ahem.css">
+<style>
+@font-face {
+ font-family: noto-naskh;
+ src: url(/fonts/noto/NotoNaskhArabic-regular.woff2),
+ url(/fonts/noto/NotoNaskhArabic-regular.ttf);
+ size-adjust: 50%; /* cause mismatch even if system-ui maps to Noto Naskh */
+}
+p {
+ font-family: Ahem, noto-naskh, serif;
+ font-size: 4em;
+}
+</style>
+<p>سلام</p>
diff --git a/testing/web-platform/tests/css/css-fonts/system-ui-ur-vs-ar.html b/testing/web-platform/tests/css/css-fonts/system-ui-ur-vs-ar.html
new file mode 100644
index 0000000000..210534fd86
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/system-ui-ur-vs-ar.html
@@ -0,0 +1,21 @@
+<!doctype html>
+<html lang="ur">
+<meta charset="utf-8">
+<title>Tests that system-ui font-family for Urdu differs from Arabic</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#system-ui-def">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="mismatch" href="system-ui-ar.html">
+<link rel="stylesheet" href="/fonts/ahem.css">
+<style>
+@font-face {
+ font-family: noto-naskh;
+ src: url(/fonts/noto/NotoNaskhArabic-regular.woff2),
+ url(/fonts/noto/NotoNaskhArabic-regular.ttf);
+ size-adjust: 50%; /* cause mismatch even if system-ui maps to Noto Naskh */
+}
+p {
+ font-family: Ahem, system-ui, noto-naskh, serif;
+ font-size: 4em;
+}
+</style>
+<p>سلام</p>
diff --git a/testing/web-platform/tests/css/css-fonts/system-ui-ur.html b/testing/web-platform/tests/css/css-fonts/system-ui-ur.html
new file mode 100644
index 0000000000..bd26d29720
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/system-ui-ur.html
@@ -0,0 +1,21 @@
+<!doctype html>
+<html lang="ur">
+<meta charset="utf-8">
+<title>Tests that system-ui font-family works for Urdu</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#system-ui-def">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="mismatch" href="system-ui-ur-notref.html">
+<link rel="stylesheet" href="/fonts/ahem.css">
+<style>
+@font-face {
+ font-family: noto-naskh;
+ src: url(/fonts/noto/NotoNaskhArabic-regular.woff2),
+ url(/fonts/noto/NotoNaskhArabic-regular.ttf);
+ size-adjust: 50%; /* cause mismatch even if system-ui maps to Noto Naskh */
+}
+p {
+ font-family: Ahem, system-ui, noto-naskh, serif;
+ font-size: 4em;
+}
+</style>
+<p>سلام</p>
diff --git a/testing/web-platform/tests/css/css-fonts/system-ui-zh-notref.html b/testing/web-platform/tests/css/css-fonts/system-ui-zh-notref.html
new file mode 100644
index 0000000000..ca072086c4
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/system-ui-zh-notref.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<html lang="zh">
+<meta charset="utf-8">
+<title>CSS Test Reference</title>
+<link rel="stylesheet" href="/fonts/ahem.css">
+<style>
+@font-face {
+ font-family: mplus;
+ src: url(/fonts/mplus-1p-regular.woff);
+ size-adjust: 50%; /* cause mismatch even if system-ui maps to M+ */
+}
+p {
+ font-family: Ahem, mplus, serif;
+ font-size: 4em;
+}
+</style>
+<p>&#x76F4;</p>
diff --git a/testing/web-platform/tests/css/css-fonts/system-ui-zh.html b/testing/web-platform/tests/css/css-fonts/system-ui-zh.html
new file mode 100644
index 0000000000..c99a393316
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/system-ui-zh.html
@@ -0,0 +1,20 @@
+<!doctype html>
+<html lang="zh">
+<title>Tests that system-ui font-family works for Chinese</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#system-ui-def">
+<link rel="help" href="https://www.unicode.org/faq/han_cjk.html#3">
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+<link rel="mismatch" href="system-ui-zh-notref.html">
+<link rel="stylesheet" href="/fonts/ahem.css">
+<style>
+@font-face {
+ font-family: mplus;
+ src: url(/fonts/mplus-1p-regular.woff);
+ size-adjust: 50%; /* cause mismatch even if system-ui maps to M+ */
+}
+p {
+ font-family: Ahem, system-ui, mplus, serif;
+ font-size: 4em;
+}
+</style>
+<p>&#x76F4;</p> <!-- U+76F4 has distinct Japanese vs Chinese shapes, see Unicode FAQ -->
diff --git a/testing/web-platform/tests/css/css-fonts/system-ui.html b/testing/web-platform/tests/css/css-fonts/system-ui.html
new file mode 100644
index 0000000000..8ad66aeb89
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/system-ui.html
@@ -0,0 +1,13 @@
+<!doctype html>
+<title>Tests that system-ui font-family works</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#system-ui-def">
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<link rel="author" title="Mozilla" href="https://mozilla.org">
+<link rel="mismatch" href="system-ui-notref.html">
+<link rel="stylesheet" href="/fonts/ahem.css">
+<style>
+p {
+ font-family: system-ui, Ahem;
+}
+</style>
+<p>ABC</p>
diff --git a/testing/web-platform/tests/css/css-fonts/test-synthetic-bold.xht b/testing/web-platform/tests/css/css-fonts/test-synthetic-bold.xht
new file mode 100644
index 0000000000..2d34f02a92
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/test-synthetic-bold.xht
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: Test for synthetic bold rendering</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-weight" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-boldness" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-weight-prop" />
+ <meta name="assert" content="Synthetic bold text should render differently than normal text" />
+ <style type="text/css">
+ div { font-size: 36px; }
+ span#verify {font-family: "CSSTest Verify";}
+ div#test1 {
+ font-family: CSSTest Verify;
+ }
+ div#test2 {
+ font-family: CSSTest Verify;
+ font-weight: bold;
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>Browser supports synthetic bolding if PASS appears on both lines and the second line appears bolder:</p>
+ <div id="test1">FAIL</div>
+ <div id="test2">FAIL</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/test-synthetic-italic-2-ref.html b/testing/web-platform/tests/css/css-fonts/test-synthetic-italic-2-ref.html
new file mode 100644
index 0000000000..d3165b681c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/test-synthetic-italic-2-ref.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>CSS Reference file</title>
+ <meta charset="utf-8" />
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style type="text/css">
+ div {
+ /* use Ahem font which has no italic/oblique face, so that the oblique
+ will be synthesized with the given angle */
+ font: 50px/1 Ahem;
+ position: absolute;
+ }
+ /* test elements will use Ahem with various values of obliqueness */
+ .test {
+ writing-mode: vertical-rl;
+ -webkit-text-orientation: upright;
+ text-orientation: upright;
+ color: green;
+ }
+ #test1 {
+ font-style: oblique 14deg;
+ top: 100px;
+ left: 100px;
+ }
+ #test2 {
+ font-style: oblique -45deg;
+ top: 100px;
+ left: 200px;
+ }
+ </style>
+ </head>
+ <body>
+ <p>Test passes if no red shows, just two sheared green blocks:</p>
+ <div id=test1 class=test>ABC</div>
+ <div id=test2 class=test>ABC</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/test-synthetic-italic-2.html b/testing/web-platform/tests/css/css-fonts/test-synthetic-italic-2.html
new file mode 100644
index 0000000000..6e8910e22c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/test-synthetic-italic-2.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>CSS Test: Test for synthetic italics in vertical upright mode</title>
+ <meta charset="utf-8" />
+ <link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com" />
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <link rel="match" href="test-synthetic-italic-2-ref.html">
+ <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/2869#issuecomment-402034497"/>
+ <meta name="assert" content="Synthetic italics in vertical upright mode should skew vertically" />
+ <style type="text/css">
+ div {
+ /* use Ahem font which has no italic/oblique face, so that the oblique
+ will be synthesized with the given angle */
+ font: 50px/1 Ahem;
+ position: absolute;
+ }
+ /* test elements will use Ahem with various values of obliqueness */
+ .test {
+ writing-mode: vertical-rl;
+ -webkit-text-orientation: upright;
+ text-orientation: upright;
+ color: green;
+ }
+ #test1 {
+ font-style: oblique 14deg;
+ top: 100px;
+ left: 100px;
+ }
+ #test2 {
+ font-style: oblique -45deg;
+ top: 100px;
+ left: 200px;
+ }
+ /* create a set of background shapes that should be entirely covered by the
+ appropriately sheared Ahem glyphs in the test elements */
+ .bg {
+ width: 50px;
+ height: 150px;
+ }
+ .inner {
+ /* we shrink the inner red shape slightly to try and avoid pixels
+ "bleeding through" around antialiased glyph edges */
+ margin: 2px;
+ width: calc(100% - 4px);
+ height: calc(100% - 4px);
+ background-color: red;
+ }
+ #bg1 {
+ top: 100px;
+ left: 100px;
+ transform: skewY(14deg);
+ }
+ #bg2 {
+ top: 100px;
+ left: 200px;
+ transform: skewY(-45deg);
+ }
+ </style>
+ </head>
+ <body>
+ <p>Test passes if no red shows, just two sheared green blocks:</p>
+ <div id=bg1 class=bg><div class=inner></div></div>
+ <div id=bg2 class=bg><div class=inner></div></div>
+ <div id=test1 class=test>ABC</div>
+ <div id=test2 class=test>ABC</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/test-synthetic-italic-3-ref.html b/testing/web-platform/tests/css/css-fonts/test-synthetic-italic-3-ref.html
new file mode 100644
index 0000000000..a072142601
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/test-synthetic-italic-3-ref.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>CSS Reference file</title>
+ <meta charset="utf-8" />
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <style type="text/css">
+ div {
+ /* use Ahem font which has no italic/oblique face, so that the oblique
+ will be synthesized with the given angle */
+ font: 50px/1 Ahem;
+ position: absolute;
+ }
+ /* test elements will use Ahem with various values of obliqueness */
+ .test {
+ writing-mode: vertical-rl;
+ -webkit-text-orientation: upright;
+ text-orientation: upright;
+ color: green;
+ }
+ /* check that the sheared glyphs are still correct when transforms are
+ also in effect */
+ #test3 {
+ font-style: oblique 25deg;
+ top: 150px;
+ left: 100px;
+ transform: scale(1.5) rotate(45deg) skew(30deg);
+ }
+ </style>
+ </head>
+ <body>
+ <p>Test passes if no red shows, just a sheared green block:</p>
+ <div id=test3 class=test>ABC</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/test-synthetic-italic-3.html b/testing/web-platform/tests/css/css-fonts/test-synthetic-italic-3.html
new file mode 100644
index 0000000000..f3c1a37156
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/test-synthetic-italic-3.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>CSS Test: Test for synthetic italics in vertical upright mode</title>
+ <meta charset="utf-8" />
+ <link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com" />
+ <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+ <link rel="match" href="test-synthetic-italic-3-ref.html">
+ <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/2869#issuecomment-402034497"/>
+ <meta name="assert" content="Synthetic italics in vertical upright mode should skew vertically" />
+ <style type="text/css">
+ div {
+ /* use Ahem font which has no italic/oblique face, so that the oblique
+ will be synthesized with the given angle */
+ font: 50px/1 Ahem;
+ position: absolute;
+ }
+ /* test elements will use Ahem with various values of obliqueness */
+ .test {
+ writing-mode: vertical-rl;
+ -webkit-text-orientation: upright;
+ text-orientation: upright;
+ color: green;
+ }
+ /* check that the sheared glyphs are still correct when transforms are
+ also in effect */
+ #test3 {
+ font-style: oblique 25deg;
+ top: 150px;
+ left: 100px;
+ transform: scale(1.5) rotate(45deg) skew(30deg);
+ }
+ /* create a set of background shapes that should be entirely covered by the
+ appropriately sheared Ahem glyphs in the test elements */
+ .bg {
+ width: 50px;
+ height: 150px;
+ }
+ .inner {
+ /* we shrink the inner red shape slightly to try and avoid pixels
+ "bleeding through" around antialiased glyph edges */
+ margin: 2px;
+ width: calc(100% - 4px);
+ height: calc(100% - 4px);
+ background-color: red;
+ }
+ #bg3 {
+ top: 150px;
+ left: 100px;
+ /* same transform as the test element, plus skewY for the oblique */
+ transform: scale(1.5) rotate(45deg) skew(30deg) skewY(25deg);
+ }
+ </style>
+ </head>
+ <body>
+ <p>Test passes if no red shows, just a sheared green block:</p>
+ <div id=bg3 class=bg><div class=inner></div></div>
+ <div id=test3 class=test>ABC</div>
+ </body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/test-synthetic-italic.xht b/testing/web-platform/tests/css/css-fonts/test-synthetic-italic.xht
new file mode 100644
index 0000000000..05b9cf6798
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/test-synthetic-italic.xht
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: Test for synthetic italic rendering</title>
+ <link rel="author" title="Mozilla" href="http://www.mozilla.com/" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-style" />
+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-styling" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-style-prop"/>
+ <meta name="assert" content="Synthetic italic text should render differently than normal text" />
+ <style type="text/css">
+ div { font-size: 36px; }
+ span#verify {font-family: "CSSTest Verify";}
+ div#test1 {
+ font-family: CSSTest Verify;
+ }
+ div#test2 {
+ font-family: CSSTest Verify;
+ font-style: italic;
+ }
+ </style>
+ </head>
+ <body>
+ <div><a href="http://www.w3.org/Style/CSS/Test/Fonts/">Test fonts</a> must be installed for this test: <span id="verify">FAIL</span></div>
+ <p>Browser supports synthetic italics if PASS appears on both lines and the second line is slanted right:</p>
+ <div id="test1">FAIL</div>
+ <div id="test2">FAIL</div>
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/test_datafont_same_origin.html b/testing/web-platform/tests/css/css-fonts/test_datafont_same_origin.html
new file mode 100644
index 0000000000..937c8c38e0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/test_datafont_same_origin.html
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset=utf-8>
+ <title>data:font same-origin test</title>
+ <link rel="author" title="Henry Chang" href="mailto:hchang@mozilla.com">
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-prop" />
+ <meta name="assert" content="tests data:font would be treated same origin." />
+ <script type="text/javascript" src="/resources/testharness.js"></script>
+ <script type="text/javascript" src="/resources/testharnessreport.js"></script>
+ <style type="text/css">
+ @font-face {
+ font-family: 'DataFont';
+ src: url(data:font/opentype;base64,AAEAAAANAIAAAwBQRkZUTU6u6MkAAAXcAAAAHE9TLzJWYWQKAAABWAAAAFZjbWFwAA8D7wAAAcAAAAFCY3Z0IAAhAnkAAAMEAAAABGdhc3D//wADAAAF1AAAAAhnbHlmCC6aTwAAAxQAAACMaGVhZO8ooBcAAADcAAAANmhoZWEIkAV9AAABFAAAACRobXR4EZQAhQAAAbAAAAAQbG9jYQBwAFQAAAMIAAAACm1heHAASQA9AAABOAAAACBuYW1lehAVOgAAA6AAAAIHcG9zdP+uADUAAAWoAAAAKgABAAAAAQAAMhPyuV8PPPUACwPoAAAAAMU4Lm0AAAAAxTgubQAh/5wFeAK8AAAACAACAAAAAAAAAAEAAAK8/5wAWgXcAAAAAAV4AAEAAAAAAAAAAAAAAAAAAAAEAAEAAAAEAAwAAwAAAAAAAgAAAAEAAQAAAEAALgAAAAAAAQXcAfQABQAAAooCvAAAAIwCigK8AAAB4AAxAQIAAAIABgkAAAAAAAAAAAABAAAAAAAAAAAAAAAAUGZFZABAAEEAQQMg/zgAWgK8AGQAAAABAAAAAAAABdwAIQAAAAAF3AAABdwAZAAAAAMAAAADAAAAHAABAAAAAAA8AAMAAQAAABwABAAgAAAABAAEAAEAAABB//8AAABB////wgABAAAAAAAAAQYAAAEAAAAAAAAAAQIAAAACAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhAnkAAAAqACoAKgBGAAAAAgAhAAABKgKaAAMABwAusQEALzyyBwQA7TKxBgXcPLIDAgDtMgCxAwAvPLIFBADtMrIHBgH8PLIBAgDtMjMRIREnMxEjIQEJ6MfHApr9ZiECWAAAAwBk/5wFeAK8AAMABwALAAABNSEVATUhFQE1IRUB9AH0/UQDhPu0BRQB9MjI/tTIyP7UyMgAAAAAAA4ArgABAAAAAAAAACYATgABAAAAAAABAAUAgQABAAAAAAACAAYAlQABAAAAAAADACEA4AABAAAAAAAEAAUBDgABAAAAAAAFABABNgABAAAAAAAGAAUBUwADAAEECQAAAEwAAAADAAEECQABAAoAdQADAAEECQACAAwAhwADAAEECQADAEIAnAADAAEECQAEAAoBAgADAAEECQAFACABFAADAAEECQAGAAoBRwBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADAAOAAgAE0AbwB6AGkAbABsAGEAIABDAG8AcgBwAG8AcgBhAHQAaQBvAG4AAENvcHlyaWdodCAoYykgMjAwOCBNb3ppbGxhIENvcnBvcmF0aW9uAABNAGEAcgBrAEEAAE1hcmtBAABNAGUAZABpAHUAbQAATWVkaXVtAABGAG8AbgB0AEYAbwByAGcAZQAgADIALgAwACAAOgAgAE0AYQByAGsAQQAgADoAIAA1AC0AMQAxAC0AMgAwADAAOAAARm9udEZvcmdlIDIuMCA6IE1hcmtBIDogNS0xMS0yMDA4AABNAGEAcgBrAEEAAE1hcmtBAABWAGUAcgBzAGkAbwBuACAAMAAwADEALgAwADAAMAAgAABWZXJzaW9uIDAwMS4wMDAgAABNAGEAcgBrAEEAAE1hcmtBAAAAAgAAAAAAAP+DADIAAAABAAAAAAAAAAAAAAAAAAAAAAAEAAAAAQACACQAAAAAAAH//wACAAAAAQAAAADEPovuAAAAAMU4Lm0AAAAAxTgubQ==);
+ }
+ </style>
+</head>
+<body>
+<div id="log"></div>
+<pre id="display"></pre>
+<style type="text/css" id="testbox"></style>
+
+<script type="text/javascript">
+ async_test(function(t) {
+ var text = document.createElement('p');
+ // Cross-domain font will not load according to [1] so we try to apply
+ // data:font to this text and see if the font can be loaded.
+ // [1] https://www.w3.org/TR/css-fonts-3/#same-origin-restriction
+ text.style = 'font-family: DataFont';
+ text.innerHTML = "This text should trigger 'TestFont' to load.";
+ document.body.appendChild(text);
+
+ document.fonts.onloadingdone = function (fontFaceSetEvent) {
+ assert_equals(fontFaceSetEvent.fontfaces.length, 1, "Same origin font should be loaded.");
+ t.done();
+ };
+ document.fonts.onloadingerror = function (fontFaceSetEvent) {
+ assert_unreached("data:font is not same origin!");
+ };
+ }, "Test if data:font would be treated same origin.")
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/test_font_family_parsing.html b/testing/web-platform/tests/css/css-fonts/test_font_family_parsing.html
new file mode 100644
index 0000000000..d56a7f712d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/test_font_family_parsing.html
@@ -0,0 +1,282 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset=utf-8>
+ <title>Font family name parsing tests</title>
+ <link rel="author" title="John Daggett" href="mailto:jdaggett@mozilla.com">
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-family-prop" />
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-prop" />
+ <meta name="assert" content="tests that valid font family names parse and invalid ones don't" />
+ <script type="text/javascript" src="/resources/testharness.js"></script>
+ <script type="text/javascript" src="/resources/testharnessreport.js"></script>
+ <style type="text/css">
+ </style>
+</head>
+<body>
+<div id="log"></div>
+<pre id="display"></pre>
+<style type="text/css" id="testbox"></style>
+
+<script type="text/javascript">
+
+function fontProp(n, size, s1, s2) { return (s1 ? s1 + " " : "") + (s2 ? s2 + " " : "") + size + " " + n; }
+function font(n, size, s1, s2) { return "font: " + fontProp(n, size, s1, s2); }
+
+// testrules
+// namelist - font family list
+// invalid - true if declarations won't parse in either font-family or font
+// fontonly - only test with the 'font' property
+// single - namelist includes only a single name (@font-face rules only allow a single name)
+
+var testFontFamilyLists = [
+
+ /* basic syntax */
+ { namelist: "simple", single: true },
+ { namelist: "'simple'", single: true },
+ { namelist: '"simple"', single: true },
+ { namelist: "-simple", single: true },
+ { namelist: "_simple", single: true },
+ { namelist: "quite simple", single: true },
+ { namelist: "quite _simple", single: true },
+ { namelist: "quite -simple", single: true },
+ { namelist: "0simple", invalid: true, single: true },
+ { namelist: "simple!", invalid: true, single: true },
+ { namelist: "simple()", invalid: true, single: true },
+ { namelist: "quite@simple", invalid: true, single: true },
+ { namelist: "#simple", invalid: true, single: true },
+ { namelist: "quite 0simple", invalid: true, single: true },
+ { namelist: "納豆嫌い", single: true },
+ { namelist: "納豆嫌い, ick, patooey" },
+ { namelist: "ick, patooey, 納豆嫌い" },
+ { namelist: "納豆嫌い, 納豆大嫌い" },
+ { namelist: "納豆嫌い, 納豆大嫌い, 納豆本当に嫌い" },
+ { namelist: "納豆嫌い, 納豆大嫌い, 納豆本当に嫌い, 納豆は好みではない" },
+ { namelist: "arial, helvetica, sans-serif" },
+ { namelist: "arial, helvetica, 'times' new roman, sans-serif", invalid: true },
+ { namelist: "arial, helvetica, \"times\" new roman, sans-serif", invalid: true },
+
+ // bug 660397 - quotes contained within family names are not escaped
+ // { namelist: "arial, helvetica, \"\\\"times new roman\", sans-serif" },
+ { namelist: "arial, helvetica, '\\\"times new roman', sans-serif" },
+ { namelist: "arial, helvetica, times 'new' roman, sans-serif", invalid: true },
+ { namelist: "arial, helvetica, times \"new\" roman, sans-serif", invalid: true },
+ // { namelist: "\"simple", invalid: true, single: true },
+ // { namelist: "\\\"simple", single: true },
+ // { namelist: "\"\\\"simple\"", single: true },
+ { namelist: "İsimple", single: true },
+ { namelist: "ßsimple", single: true },
+ { namelist: "ẙsimple", single: true },
+
+ /* escapes */
+ { namelist: "\\s imple", single: true },
+ { namelist: "\\073 imple", single: true },
+
+ // bug 475216 - css serialization doesn't escape characters that need escaping
+ // { namelist: "\\035 simple", single: true },
+ { namelist: "sim\\035 ple", single: true },
+ // { namelist: "simple\\02cinitial", single: true },
+ // { namelist: "simple, \\02cinitial" },
+ // { namelist: "sim\\020 \\035 ple", single: true },
+ // { namelist: "sim\\020 5ple", single: true },
+ // { namelist: "\\;", single: true },
+ // { namelist: "\\;,\\;", single: true },
+ // { namelist: "\\,\\;", single: true },
+ // { namelist: "\\{", single: true },
+ // { namelist: "\\{\\;", single: true },
+ // { namelist: "\\}", single: true },
+ // { namelist: "\\}\\;", single: true },
+ // { namelist: "\\@simple", single: true },
+ // { namelist: "\\@simple\\;", single: true },
+ // { namelist: "\\@font-face", single: true },
+ // { namelist: "\\@font-face\\;", single: true },
+ // { namelist: "\\031 \\036 px", single: true },
+ // { namelist: "\\031 \\036 px", single: true },
+ { namelist: "\\1f4a9", single: true },
+ { namelist: "\\01f4a9", single: true },
+ { namelist: "\\0001f4a9", single: true },
+ { namelist: "\\AbAb", single: true },
+
+ /* keywords */
+ { namelist: "italic", single: true },
+ { namelist: "bold", single: true },
+ { namelist: "bold italic", single: true },
+ { namelist: "italic bold", single: true },
+ { namelist: "larger", single: true },
+ { namelist: "smaller", single: true },
+ { namelist: "bolder", single: true },
+ { namelist: "lighter", single: true },
+ { namelist: "default", invalid: true, fontonly: true, single: true },
+ { namelist: "initial", invalid: true, fontonly: true, single: true },
+ { namelist: "inherit", invalid: true, fontonly: true, single: true },
+ { namelist: "normal", single: true },
+ { namelist: "default, simple", invalid: true },
+ { namelist: "initial, simple", invalid: true },
+ { namelist: "inherit, simple", invalid: true },
+ { namelist: "normal, simple" },
+ { namelist: "simple, default", invalid: true },
+ { namelist: "simple, initial", invalid: true },
+ { namelist: "simple, inherit", invalid: true },
+ { namelist: "simple, default bongo" },
+ { namelist: "simple, initial bongo" },
+ { namelist: "simple, inherit bongo" },
+ { namelist: "simple, bongo default" },
+ { namelist: "simple, bongo initial" },
+ { namelist: "simple, bongo inherit" },
+ { namelist: "simple, normal" },
+ { namelist: "simple default", single: true },
+ { namelist: "simple initial", single: true },
+ { namelist: "simple inherit", single: true },
+ { namelist: "simple normal", single: true },
+ { namelist: "default simple", single: true },
+ { namelist: "initial simple", single: true },
+ { namelist: "inherit simple", single: true },
+ { namelist: "normal simple", single: true },
+ { namelist: "caption", single: true }, // these are keywords for the 'font' property but only when in the first position
+ { namelist: "icon", single: true },
+ { namelist: "menu", single: true },
+
+ /* Unset */
+ { namelist: "unset", invalid: true, fontonly: true, single: true },
+ { namelist: "unset, simple", invalid: true },
+ { namelist: "simple, unset", invalid: true },
+ { namelist: "simple, unset bongo" },
+ { namelist: "simple, bongo unset" },
+ { namelist: "simple unset", single: true },
+ { namelist: "unset simple", single: true },
+];
+
+var gTest = 0;
+
+/* strip out just values */
+function extractDecl(rule)
+{
+ var t = rule.replace(/[ \n]+/g, " ");
+ t = t.replace(/.*{[ \n]*/, "");
+ t = t.replace(/[ \n]*}.*/, "");
+ return t;
+}
+
+
+function testStyleRuleParse(decl, invalid) {
+ var sheet = document.styleSheets[1];
+ var rule = ".test" + gTest++ + " { " + decl + "; }";
+
+ while(sheet.cssRules.length > 0) {
+ sheet.deleteRule(0);
+ }
+
+ // shouldn't throw but improper handling of punctuation may cause some parsers to throw
+ try {
+ sheet.insertRule(rule, 0);
+ } catch (e) {
+ assert_unreached("unexpected error with " + decl + " ==> " + e.name);
+ }
+
+ assert_equals(sheet.cssRules.length, 1,
+ "strange number of rules (" + sheet.cssRules.length + ") with " + decl);
+
+ var s = extractDecl(sheet.cssRules[0].cssText);
+
+ if (invalid) {
+ assert_equals(s, "", "rule declaration shouldn't parse - " + rule + " ==> " + s);
+ } else {
+ assert_not_equals(s, "", "rule declaration should parse - " + rule);
+
+ // check that the serialization also parses
+ var r = ".test" + gTest++ + " { " + s + " }";
+ while(sheet.cssRules.length > 0) {
+ sheet.deleteRule(0);
+ }
+ try {
+ sheet.insertRule(r, 0);
+ } catch (e) {
+ assert_unreached("exception occurred parsing serialized form of rule - " + rule + " ==> " + r + " " + e.name);
+ }
+ var s2 = extractDecl(sheet.cssRules[0].cssText);
+ assert_not_equals(s2, "", "serialized form of rule should also parse - " + rule + " ==> " + r);
+ }
+}
+
+var kDefaultFamilySetting = "onelittlepiggywenttomarket";
+
+function testFontFamilySetterParse(namelist, invalid) {
+ var el = document.getElementById("display");
+
+ el.style.fontFamily = kDefaultFamilySetting;
+ var def = el.style.fontFamily;
+ el.style.fontFamily = namelist;
+ if (!invalid) {
+ assert_not_equals(el.style.fontFamily, def, "fontFamily setter should parse - " + namelist);
+ var parsed = el.style.fontFamily;
+ el.style.fontFamily = kDefaultFamilySetting;
+ el.style.fontFamily = parsed;
+ assert_equals(el.style.fontFamily, parsed, "fontFamily setter should parse serialized form to identical serialization - " + parsed + " ==> " + el.style.fontFamily);
+ } else {
+ assert_equals(el.style.fontFamily, def, "fontFamily setter shouldn't parse - " + namelist);
+ }
+}
+
+var kDefaultFontSetting = "16px onelittlepiggywenttomarket";
+
+function testFontSetterParse(n, size, s1, s2, invalid) {
+ var el = document.getElementById("display");
+
+ el.style.font = kDefaultFontSetting;
+ var def = el.style.font;
+ var fp = fontProp(n, size, s1, s2);
+ el.style.font = fp;
+ if (!invalid) {
+ assert_not_equals(el.style.font, def, "font setter should parse - " + fp);
+ var parsed = el.style.font;
+ el.style.font = kDefaultFontSetting;
+ el.style.font = parsed;
+ assert_equals(el.style.font, parsed, "font setter should parse serialized form to identical serialization - " + parsed + " ==> " + el.style.font);
+ } else {
+ assert_equals(el.style.font, def, "font setter shouldn't parse - " + fp);
+ }
+}
+
+var testFontVariations = [
+ { size: "16px" },
+ { size: "900px" },
+ { size: "900em" },
+ { size: "35%" },
+ { size: "7832.3%" },
+ { size: "xx-large" },
+ { size: "larger", s1: "lighter" },
+ { size: "16px", s1: "italic" },
+ { size: "16px", s1: "italic", s2: "bold" },
+ { size: "smaller", s1: "normal" },
+ { size: "16px", s1: "normal", s2: "normal" },
+ { size: "16px", s1: "400", s2: "normal" },
+ { size: "16px", s1: "bolder", s2: "oblique" }
+];
+
+function testFamilyNameParsing() {
+ var i;
+ for (i = 0; i < testFontFamilyLists.length; i++) {
+ var tst = testFontFamilyLists[i];
+ var n = tst.namelist;
+ var t;
+
+ if (!tst.fontonly) {
+ t = "font-family: " + n;
+ test(function() { testStyleRuleParse(t, tst.invalid); }, t);
+ test(function() { testFontFamilySetterParse(n, tst.invalid); }, t + " (setter)");
+ }
+
+ var v;
+ for (v = 0; v < testFontVariations.length; v++) {
+ var f = testFontVariations[v];
+ t = font(n, f.size, f.s1, f.s2);
+ test(function() { testStyleRuleParse(t, tst.invalid); }, t);
+ test(function() { testFontSetterParse(n, f.size, f.s1, f.s2, tst.invalid); }, t + " (setter)");
+ }
+ }
+}
+
+testFamilyNameParsing();
+
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/test_font_feature_values_parsing.html b/testing/web-platform/tests/css/css-fonts/test_font_feature_values_parsing.html
new file mode 100644
index 0000000000..7a5844d560
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/test_font_feature_values_parsing.html
@@ -0,0 +1,355 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset=utf-8>
+ <title>@font-feature-values rule parsing tests</title>
+ <link rel="author" title="John Daggett" href="mailto:jdaggett@mozilla.com">
+ <link rel="help" href="http://www.w3.org/TR/css-fonts-4/#font-feature-values" />
+ <meta name="assert" content="tests that valid @font-feature-values rules parse and invalid ones don't" />
+ <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=549861 -->
+ <script type="text/javascript" src="/resources/testharness.js"></script>
+ <script type="text/javascript" src="/resources/testharnessreport.js"></script>
+ <style type="text/css">
+ </style>
+</head>
+<body>
+<div id="log"></div>
+<pre id="display"></pre>
+<style type="text/css" id="testbox"></style>
+
+<script type="text/javascript">
+var gPrefix = "";
+var kFontFeatureValuesRuleType = 14;
+
+function ruleName() { return "@" + gPrefix + "font-feature-values"; }
+function makeRule(f, v) {
+ return ruleName() + " " + f + " { " + v + " }";
+}
+
+function _()
+{
+ var i, decl = [];
+ for (i = 0; i < arguments.length; i++) {
+ decl.push(arguments[i]);
+ }
+ return makeRule("bongo", decl.join(" "));
+}
+
+// note: because of bugs in the way family names are serialized,
+// 'serializationSame' only implies that the value definition block
+// is the same (i.e. not including the family name list)
+
+var testrules = [
+
+ /* basic syntax */
+ { rule: ruleName() + ";", invalid: true },
+ { rule: ruleName() + " bongo;", invalid: true },
+ { rule: ruleName().replace("values", "value") + " {;}", invalid: true },
+ { rule: ruleName().replace("feature", "features") + " {;}", invalid: true },
+ { rule: makeRule("bongo", ""), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", ";"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", ",;"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", ";,"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", ",;,"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", "@styleset;"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", "@styleset,;"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", "@styleset abc;"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", "@styleset { abc }"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", "@styleset { ;;abc }"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", "@styleset { abc;; }"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", "@styleset { abc: }"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", "@styleset { abc,: }"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", "@styleset { abc:, }"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", "@styleset { abc:,; }"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", "@styleset { a,b }"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", "@styleset { a;b }"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", "@styleset { a:;b: }"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", "@styleset { a:,;b: }"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", "@styleset { a:1,;b: }"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", "@styleset { abc 1 2 3 }"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", "@styleset { abc:, 1 2 3 }"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", "@styleset { abc:; 1 2 3 }"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", "@styleset { abc: 1 2 3a }"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", "@styleset { abc: 1 2 3, def: 1; }"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", "@blah @styleset { abc: 1 2 3; }"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", "@blah } @styleset { abc: 1 2 3; }"), serializationNoValueDefn: true },
+ { rule: makeRule("bongo", "@blah , @styleset { abc: 1 2 3; }"), serializationNoValueDefn: true },
+ { rule: ruleName() + " bongo { @styleset { abc: 1 2 3; }", serialization: _("@styleset { abc: 1 2 3; }") },
+ { rule: ruleName() + " bongo { @styleset { abc: 1 2 3 }", serialization: _("@styleset { abc: 1 2 3; }") },
+ { rule: ruleName() + " bongo { @styleset { abc: 1 2 3;", serialization: _("@styleset { abc: 1 2 3; }") },
+ { rule: ruleName() + " bongo { @styleset { abc: 1 2 3", serialization: _("@styleset { abc: 1 2 3; }") },
+ { rule: _("@styleset { ok-1: 1; }"), serializationSame: true },
+ { rule: _("@annotation { ok-1: 3; }"), serializationSame: true },
+ { rule: _("@stylistic { blah: 3; }"), serializationSame: true },
+ { rule: makeRule("bongo", "\n@styleset\n { blah: 3; super-blah: 4 5;\n more-blah: 5 6 7;\n }"), serializationSame: true },
+ { rule: makeRule("bongo", "\n@styleset\n {\n blah:\n 3\n;\n super-blah:\n 4\n 5\n;\n more-blah:\n 5 6\n 7;\n }"), serializationSame: true },
+
+ /* limits on number of values */
+ { rule: _("@stylistic { blah: 1; }"), serializationSame: true },
+ { rule: _("@styleset { blah: 1 2 3 4; }"), serializationSame: true },
+ { rule: _("@character-variant { blah: 1 2; }"), serializationSame: true },
+ { rule: _("@swash { blah: 1; }"), serializationSame: true },
+ { rule: _("@ornaments { blah: 1; }"), serializationSame: true },
+ { rule: _("@annotation { blah: 1; }"), serializationSame: true },
+
+ /* values ignored when used */
+ { rule: _("@styleset { blah: 0; }"), serializationSame: true },
+ { rule: _("@styleset { blah: 120 124; }"), serializationSame: true },
+ { rule: _("@character-variant { blah: 0; }"), serializationSame: true },
+ { rule: _("@character-variant { blah: 111; }"), serializationSame: true },
+ { rule: _("@character-variant { blah: 111 13; }"), serializationSame: true },
+
+ /* invalid value name */
+ { rulesrc: ["styleset { blah: 1 }"], serializationNoValueDefn: true },
+ { rulesrc: ["stylistic { blah: 1 }"], serializationNoValueDefn: true },
+ { rulesrc: ["character-variant { blah: 1 }"], serializationNoValueDefn: true },
+ { rulesrc: ["swash { blah: 1 }"], serializationNoValueDefn: true },
+ { rulesrc: ["ornaments { blah: 1 }"], serializationNoValueDefn: true },
+ { rulesrc: ["annotation { blah: 1 }"], serializationNoValueDefn: true },
+ { rulesrc: ["@bongo { blah: 1 }"], serializationNoValueDefn: true },
+ { rulesrc: ["@bongo { blah: 1 2 3 }"], serializationNoValueDefn: true },
+ { rulesrc: ["@bongo { blah: 1 2 3; burp: 1;;; }"], serializationNoValueDefn: true },
+
+ /* values */
+ { rulesrc: ["@styleset { blah: -1 }"], serializationNoValueDefn: true },
+ { rulesrc: ["@styleset { blah: 1 -1 }"], serializationNoValueDefn: true },
+ { rulesrc: ["@styleset { blah: 1.5 }"], serializationNoValueDefn: true },
+ { rulesrc: ["@styleset { blah: 15px }"], serializationNoValueDefn: true },
+ { rulesrc: ["@styleset { blah: red }"], serializationNoValueDefn: true },
+ { rulesrc: ["@styleset { blah: (1) }"], serializationNoValueDefn: true },
+ { rulesrc: ["@styleset { blah:(1) }"], serializationNoValueDefn: true },
+ { rulesrc: ["@styleset { blah:, 1 }"], serializationNoValueDefn: true },
+ { rulesrc: ["@styleset { blah: <1> }"], serializationNoValueDefn: true },
+ { rulesrc: ["@styleset { blah: 1! }"], serializationNoValueDefn: true },
+ { rulesrc: ["@styleset { blah: 1,, }"], serializationNoValueDefn: true },
+ { rulesrc: ["@styleset { blah: 1 1 1 1; }"], serializationSame: true },
+
+ /* limits on number of values */
+ { rulesrc: ["@stylistic { blah: 1 2 }"], serializationNoValueDefn: true },
+ { rulesrc: ["@character-variant { blah: 1 2 3 }"], serializationNoValueDefn: true },
+ { rulesrc: ["@swash { blah: 1 2 }"], serializationNoValueDefn: true },
+ { rulesrc: ["@ornaments { blah: 1 2 }"], serializationNoValueDefn: true },
+ { rulesrc: ["@annotation { blah: 1 2 }"], serializationNoValueDefn: true },
+ { rulesrc: ["@styleset { blah: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19; }"], serializationSame: true },
+
+ /* family names */
+ { rule: makeRule("bongo", "@styleset { blah: 1; }"), serializationSame: true },
+ { rule: makeRule("\"bongo\"", "@styleset { blah: 1; }"), serializationSame: true },
+ { rule: makeRule("'bongo'", "@styleset { blah: 1; }"), serializationSame: true },
+ { rule: makeRule("\\62 ongo", "@styleset { blah: 1; }"), serializationSame: true },
+ { rule: makeRule("bongo, super bongo, bongo the supreme", "@styleset { blah: 1; }"), serializationSame: true },
+ { rule: makeRule("bongo,, super bongo", "@styleset { blah: 1; }"), invalid: true },
+ { rule: makeRule("bongo,*", "@styleset { blah: 1; }"), invalid: true },
+ { rule: makeRule("bongo, sans-serif", "@styleset { blah: 1; }"), invalid: true },
+ { rule: makeRule("serif, sans-serif", "@styleset { blah: 1; }"), invalid: true },
+ { rule: makeRule("'serif', 'sans-serif'", "@styleset { blah: 1; }"), serializationSame: true },
+ { rule: makeRule("bongo, \"super bongo\", 'bongo the supreme'", "@styleset { blah: 1; }"), serializationSame: true },
+ { rule: makeRule("毎日カレーを食べたい!", "@styleset { blah: 1; }"), serializationSame: true },
+ { rule: makeRule("毎日カレーを食べたい!, 納豆嫌い", "@styleset { blah: 1; }"), serializationSame: true },
+
+ { rule: makeRule("bongo, \"super\" bongo, bongo the supreme", "@styleset { blah: 1; }"), invalid: true },
+ { rule: makeRule("--bongo", "@styleset { blah: 1; }"), invalid: true },
+
+ /* ident tests */
+ { rule: _("@styleset { blah: 1; blah: 1; }"), serializationSame: true },
+ { rule: _("@styleset { blah: 1; de-blah: 1; blah: 2; }"), serializationSame: true },
+ { rule: _("@styleset { \\tra-la: 1; }"), serialization: _("@styleset { tra-la: 1; }") },
+ { rule: _("@styleset { b\\lah: 1; }"), serialization: _("@styleset { blah: 1; }") },
+ { rule: _("@styleset { \\62 lah: 1; }"), serialization: _("@styleset { blah: 1; }") },
+ { rule: _("@styleset { \\:blah: 1; }"), serialization: _("@styleset { \\:blah: 1; }") },
+ { rule: _("@styleset { \\;blah: 1; }"), serialization: _("@styleset { \\;blah: 1; }") },
+ { rule: _("@styleset { complex\\20 blah: 1; }"), serialization: _("@styleset { complex\\ blah: 1; }") },
+ { rule: _("@styleset { complex\\ blah: 1; }"), serializationSame: true },
+ { rule: _("@styleset { Håkon: 1; }"), serializationSame: true },
+ { rule: _("@styleset { Åквариум: 1; }"), serializationSame: true },
+ { rule: _("@styleset { \\1f449\\1f4a9\\1f448: 1; }"), serialization: _("@styleset { 👉💩👈: 1; }") },
+ { rule: _("@styleset { 魅力: 1; }"), serializationSame: true },
+ { rule: _("@styleset { 毎日カレーを食べたい!: 1; }"), serializationSame: true },
+ /* from http://en.wikipedia.org/wiki/Metal_umlaut */
+ { rule: _("@styleset { TECHNICIÄNS\\ ÖF\\ SPÅCE\\ SHIP\\ EÅRTH\\ THIS\\ IS\\ YÖÜR\\ CÄPTÅIN\\ SPEÄKING\\ YÖÜR\\ ØÅPTÅIN\\ IS\\ DEA̋D: 1; }"), serializationSame: true },
+
+ { rulesrc: ["@styleset { 123blah: 1; }"], serializationNoValueDefn: true },
+ { rulesrc: ["@styleset { :123blah 1; }"], serializationNoValueDefn: true },
+ { rulesrc: ["@styleset { :123blah: 1; }"], serializationNoValueDefn: true },
+ { rulesrc: ["@styleset { ?123blah: 1; }"], serializationNoValueDefn: true },
+ { rulesrc: ["@styleset { \"blah\": 1; }"], serializationNoValueDefn: true },
+ { rulesrc: ["@styleset { complex blah: 1; }"], serializationNoValueDefn: true },
+ { rulesrc: ["@styleset { complex\\ blah: 1; }"], serializationNoValueDefn: true }
+
+];
+
+// test that invalid value declarations don't affect the parsing of surrounding
+// declarations. So before + invalid + after should match the serialization
+// given in s.
+
+var gSurroundingTests = [
+ // -- invalid, valid ==> valid
+ { before: "", after: "@ornaments { whatchamacallit-1: 23; thingy-dingy: 3; }", s: _("@ornaments { whatchamacallit-1: 23; thingy-dingy: 3; }") },
+
+ // -- valid, invalid ==> valid
+ { before: "@ornaments { whatchamacallit-1: 23; thingy-dingy: 7; }", after: "", s: _("@ornaments { whatchamacallit-1: 23; thingy-dingy: 7; }") },
+
+ // -- valid, invalid, valid ==> valid, valid
+ { before: "@ornaments { whatchamacallit-1: 23; thingy-dingy: 3; }", after: "@character-variant { whatchamacallit-2: 23 4; }", s: _("@ornaments { whatchamacallit-1: 23; thingy-dingy: 3; } @character-variant { whatchamacallit-2: 23 4; }") },
+
+ // -- invalid, valid, invalid ==> valid
+ { between: "@ornaments { whatchamacallit-1: 23; thingy-dingy: 4; }", s: _("@ornaments { whatchamacallit-1: 23; thingy-dingy: 4; }") }
+];
+
+/* strip out just values, along with empty value blocks (e.g. @swash { })*/
+function valuesText(ruletext)
+{
+ var t = ruletext.replace(/@[a-zA-Z0-9\-]+[ \n]*{[ \n]*}/g, "");
+ t = t.replace(/[ \n]+/g, " ");
+ t = t.replace(/^[^{]+{[ \n]*/, "");
+ t = t.replace(/[ \n]*}[^}]*$/, "");
+ t = t.replace(/[ \n]*;/g, ";");
+ return t;
+}
+
+function testParse(rulesrc)
+{
+ var sheet = document.styleSheets[1];
+ var rule = _.apply(this, rulesrc);
+
+ while(sheet.cssRules.length > 0)
+ sheet.deleteRule(0);
+ try {
+ sheet.insertRule(rule, 0);
+ } catch (e) {
+ return e.toString();
+ }
+
+ if (sheet.cssRules.length == 1 && sheet.cssRules[0].type == kFontFeatureValuesRuleType) {
+ return sheet.cssRules[0].cssText.replace(/[ \n]+/g, " ");
+ }
+
+ return "";
+}
+
+function testOneRule(testrule) {
+ var sheet = document.styleSheets[1];
+ var rule;
+
+ if ("rulesrc" in testrule) {
+ rule = _.apply(this, testrule.rulesrc);
+ } else {
+ rule = testrule.rule;
+ }
+
+ var parseErr = false;
+ var expectedErr = false;
+ var invalid = false;
+ if ("invalid" in testrule && testrule.invalid) invalid = true;
+
+ while(sheet.cssRules.length > 0)
+ sheet.deleteRule(0);
+ try {
+ sheet.insertRule(rule, 0);
+ } catch (e) {
+ expectedErr = (e.name == "SyntaxError"
+ && e instanceof DOMException
+ && e.code == DOMException.SYNTAX_ERR
+ && invalid);
+ parseErr = true;
+ }
+
+ test(function() {
+ assert_true(!parseErr || expectedErr, "unexpected syntax error");
+ if (!parseErr) {
+ assert_equals(sheet.cssRules.length, 1, "bad rule count");
+ assert_equals(sheet.cssRules[0].type, kFontFeatureValuesRuleType, "bad rule type");
+ }
+ }, "basic parse tests - " + rule);
+
+ var sanitizedRule = rule.replace(/[ \n]+/g, " ");
+ if (parseErr) {
+ return;
+ }
+
+ // should result in one @font-feature-values rule constructed
+
+ // serialization matches expectation
+ // -- note: due to inconsistent font family serialization problems,
+ // only the serialization of the values is tested currently
+
+ var ruleValues = valuesText(rule);
+ var serialized = sheet.cssRules[0].cssText;
+ var serializedValues = valuesText(serialized);
+ var haveSerialization = true;
+
+ if (testrule.serializationSame) {
+ test(function() {
+ assert_equals(serializedValues, ruleValues, "canonical cssText serialization doesn't match");
+ }, "serialization check - " + rule);
+ } else if ("serialization" in testrule) {
+ var s = valuesText(testrule.serialization);
+ test(function() {
+ assert_equals(serializedValues, s, "non-canonical cssText serialization doesn't match - ");
+ }, "serialization check - " + rule);
+ } else if (testrule.serializationNoValueDefn) {
+ test(function() {
+ assert_equals(serializedValues, "", "cssText serialization should have no value defintions - ");
+ }, "no value definitions in serialization - " + rule);
+
+ haveSerialization = false;
+
+ if ("rulesrc" in testrule) {
+ test(function() {
+ var j, rulesrc = testrule.rulesrc;
+
+ // invalid value definitions shouldn't affect the parsing of valid
+ // definitions before or after an invalid one
+ for (var j = 0; j < gSurroundingTests.length; j++) {
+ var t = gSurroundingTests[j];
+ var srulesrc = [];
+
+ if ("between" in t) {
+ srulesrc = srulesrc.concat(rulesrc);
+ srulesrc = srulesrc.concat(t.between);
+ srulesrc = srulesrc.concat(rulesrc);
+ } else {
+ if (t.before != "")
+ srulesrc = srulesrc.concat(t.before);
+ srulesrc = srulesrc.concat(rulesrc);
+ if (t.after != "")
+ srulesrc = srulesrc.concat(t.after);
+ }
+
+ var result = testParse(srulesrc);
+ assert_equals(valuesText(result), valuesText(t.s), "invalid declarations should not affect valid ones - ");
+ }
+ }, "invalid declarations don't affect valid ones - " + rule);
+ }
+ }
+
+ // if serialization non-empty, serialization should round-trip to itself
+ if (haveSerialization) {
+ var roundTripText = testParse([serializedValues]);
+ test(function() {
+ assert_equals(valuesText(roundTripText), serializedValues,
+ "serialization should round-trip to itself - ");
+ }, "serialization round-trip - " + rule);
+ }
+}
+
+function testFontFeatureValuesRuleParsing() {
+ var i;
+ for (i = 0; i < testrules.length; i++) {
+ var testrule = testrules[i];
+ var rule;
+
+ if ("rulesrc" in testrule) {
+ rule = _.apply(this, testrule.rulesrc);
+ } else {
+ rule = testrule.rule;
+ }
+
+ testOneRule(testrule);
+ //test(function() { testOneRule(testrule); }, "parsing " + rule);
+ }
+}
+
+testFontFeatureValuesRuleParsing();
+</script>
+</body></html>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/META.yml b/testing/web-platform/tests/css/css-fonts/variations/META.yml
new file mode 100644
index 0000000000..53487a6d85
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/META.yml
@@ -0,0 +1,5 @@
+suggested_reviewers:
+ - drott
+ - fantasai
+ - litherum
+ - svgeesus
diff --git a/testing/web-platform/tests/css/css-fonts/variations/at-font-face-descriptors.html b/testing/web-platform/tests/css/css-fonts/variations/at-font-face-descriptors.html
new file mode 100644
index 0000000000..1935422d7c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/at-font-face-descriptors.html
@@ -0,0 +1,174 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Testing @font-face descriptor values introduced in CSS Fonts level 4</title>
+ <link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-face-rule" />
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <style id="testStyle">
+ @font-face { font-family: Test; src: local('Courier New'), local('Courier'); }
+ </style>
+</head>
+<body>
+ <div>@font-face descriptor tests</div>
+ <script>
+
+ function updateFontFaceRule(descriptorName, descriptorValue) {
+ let testRule = document.getElementById("testStyle").sheet.cssRules[0];
+
+ testRule.style.fontWeight = "normal";
+ testRule.style.fontStyle = "normal";
+ testRule.style.fontStretch = "normal";
+ assert_equals(testRule.style.fontWeight, "normal", "Can't clear @font-face.");
+ assert_equals(testRule.style.fontStyle, "normal", "Can't clear @font-face.");
+ assert_equals(testRule.style.fontStretch, "normal", "Can't clear @font-face.");
+
+ testRule.style.fontWeight = "";
+ testRule.style.fontStyle = "";
+ testRule.style.fontStretch = "";
+ assert_true(!testRule.style.fontWeight, "", "Can't clear @font-face.");
+ assert_true(!testRule.style.fontStyle, "", "Can't clear @font-face.");
+ assert_true(!testRule.style.fontStretch, "", "Can't clear @font-face.");
+
+ testRule.style[descriptorName] = descriptorValue;
+
+ return testRule;
+ }
+
+ function testDescriptor(descriptorName, testCases) {
+ var propertyName = { 'font-weight':'fontWeight', 'font-stretch':'fontStretch', 'font-style':'fontStyle' }[descriptorName];
+ testCases.forEach(function (testCase) {
+ test(() => {
+ let rule = updateFontFaceRule(descriptorName, testCase.value);
+
+ if (testCase.isValid) {
+ assert_not_equals(rule.style[propertyName], "", "Valid value should be accepted.");
+
+ let expectedValue = (testCase.expectedValue) ? testCase.expectedValue : testCase.value;
+ assert_equals(rule.style[propertyName], expectedValue, "Unexpected resulting value.");
+ }
+ else {
+ assert_equals(rule.style[propertyName], "", "No properties should be set.");
+ }
+ }, descriptorName + (testCase.isValid ? "(valid): " : "(invalid): ") + testCase.description + ": " + testCase.value);
+
+ });
+ }
+
+ testDescriptor("font-weight", [
+ // Single value, keyword
+ { value: "normal", isValid: true, description: "'normal' keyword" },
+ { value: "bold", isValid: true, description: "'bold' keyword" },
+ { value: "auto", isValid: true, description: "'auto' keyword inside @font-face" },
+ { value: "lighter", isValid: false, description: "'lighter' keyword inside @font-face" },
+ { value: "bolder", isValid: false, description: "'bolder' keyword inside @font-face" },
+ { value: "bold a", isValid: false, description: "Extra content after keyword" },
+
+ // Single value, number
+ { value: "401", isValid: true, description: "Values that are not multiple of 100 should be parsed successfully" },
+ { value: "400.1", isValid: true, description: "Non-integer values should be parsed successfully" },
+ { value: "1", isValid: true, description: "Minimum allowed value should be parsed successfully" },
+ { value: "0.999", isValid: false, description: "Values below minimum should be rejected" },
+ { value: "-100", isValid: false, description: "Values below zero should be rejected" },
+ { value: "1000", isValid: true, description: "Maximum allowed value should be parsed successfully" },
+ { value: "1000.001", isValid: false, description: "Values above maximum should be rejected" },
+ { value: "100 a", isValid: false, description: "Extra content after value" },
+
+ // Single value, calc
+ { value: "calc(100.5)", isValid: true, expectedValue: "100.5", description: "Simple calc value" },
+ { value: "calc(1001)", isValid: true, description: "Out-of-range simple calc value (should be clamped)" },
+ { value: "calc(100.5*3 + 50.5)", isValid: true, expectedValue: "352", description: "Valid calc expression" },
+ { value: "calc(100.5*3 + 800)", isValid: true, description: "Valid calc expression with out-of-range value (should be clamped)" },
+ { value: "calc(100.5px + 50.5px)", isValid: false, description: "Valid calc expression with units" },
+
+ // Value range
+ { value: "100 900", isValid: true, description: "Simple range" },
+ { value: "500 500", isValid: true, expectedValue: "500", description: "Simple range with equal upper and lower bounds" },
+ { value: "0.9 100", isValid: false, description: "Lower bound out of range" },
+ { value: "100 1001", isValid: false, description: "Upper bound out of range" },
+ { value: "calc(100 + 100) 400", isValid: true, expectedValue: "200 400", description: "Lower bound calc()" },
+ { value: "200 calc(200 + 200)", isValid: true, expectedValue: "200 400", description: "Upper bound calc()" },
+ { value: "calc(100 + 100) calc(200 + 200)", isValid: true, expectedValue: "200 400", description: "Both bounds are calc()" },
+ { value: "400 200", isValid: true, expectedValue: "400 200", description: "Bounds out of order are valid" },
+ { value: "100 200 300", isValid: false, description: "Extra content after upper bound" },
+ ]);
+
+ testDescriptor("font-stretch", [
+ // Single value, keyword
+ { value: "ultra-condensed", isValid: true, description: "'ultra-condensed' keyword" },
+ { value: "extra-condensed", isValid: true, description: "'extra-condensed' keyword" },
+ { value: "condensed", isValid: true, description: "'condensed' keyword" },
+ { value: "semi-condensed", isValid: true, description: "'semi-condensed' keyword" },
+ { value: "normal", isValid: true, description: "'normal' keyword" },
+ { value: "semi-expanded", isValid: true, description: "'semi-expanded' keyword" },
+ { value: "expanded", isValid: true, description: "'expanded' keyword" },
+ { value: "extra-expanded", isValid: true, description: "'extra-expanded' keyword" },
+ { value: "ultra-expanded", isValid: true, description: "'ultra-expanded' keyword" },
+ { value: "expanded a", isValid: false, description: "Extra content after value" },
+ { value: "auto", isValid: true, description: "'auto' keyword inside @font-face" },
+
+ // Single value, number
+ { value: "1%", isValid: true, description:"Legal percentage" },
+ { value: "10.5%", isValid: true, description:"Legal percentage" },
+ { value: "100%", isValid: true, description:"Legal percentage" },
+ { value: "1000%", isValid: true, description:"Legal percentage" },
+ { value: "100", isValid: false, description:"Only percentages, not numbers allowed" },
+ { value: "-1%", isValid: false, description:"Negative values are illegal" },
+ { value: "0%", isValid: true, description:"Zero is legal" },
+ { value: "100% a", isValid: false, description:"Extra content after value" },
+
+ // Single value, calc
+ { value: "calc(200.5%)", isValid: true, expectedValue: "200.5%", description: "Simple calc value" },
+ { value: "calc(50%*2 - 20%)", isValid: true, expectedValue: "80%", description: "Valid calc expression" },
+ { value: "calc(-100%)", isValid: true, description: "Negative calc value (to be clamped)" },
+ { value: "calc(50% - 50%*2)", isValid: true, expectedValue: "calc(-50%)", description: "Negative calc expression (to be clamped)" },
+ { value: "calc(100)", isValid: false, description: "Unit-less calc value" },
+ { value: "calc(100px)", isValid: false, description: "Calc value with units" },
+
+ // Value range
+ { value: "100% 200%", isValid: true, description: "Simple range" },
+ { value: "100% 100%", isValid: true, expectedValue: "100%", description: "Simple range with equal upper and lower bounds" },
+ { value: "-100% 100%", isValid: false, description: "Lower bound out of range" },
+ { value: "calc(10% + 10%) 30%", isValid: true, expectedValue: "20% 30%", description: "Lower bound calc()" },
+ { value: "10% calc(10% + 10%)", isValid: true, expectedValue: "10% 20%", description: "Upper bound calc()" },
+ { value: "calc(10% + 10%) calc(20% + 20%)", isValid: true, expectedValue: "20% 40%", description: "Both bounds are calc()" },
+ { value: "200% 100%", isValid: true, expectedValue: "200% 100%", description: "Bounds out of order" },
+ { value: "100% 200% 300%", isValid: false, description: "Extra content after upper bound" },
+ ]);
+
+ testDescriptor("font-style", [
+ // Single value, keyword
+ { value: "normal", isValid: true, description: "'normal' keyword" },
+ { value: "italic", isValid: true, description: "'italic' keyword" },
+ { value: "oblique", isValid: true, description: "'oblique' keyword" },
+ { value: "auto", isValid: true, description: "'auto' keyword inside @font-face" },
+
+ // Single value
+ { value: "italic 20deg", isValid: false, description: "'italic' followed by angle" },
+ { value: "italic a", isValid: false, description: "Extra content after keyword" },
+ { value: "oblique 0deg", isValid: true, description: "'oblique' followed by zero degrees" },
+ { value: "oblique 20deg", isValid: true, description: "'oblique' followed by former default 20deg angle" },
+ { value: "oblique 90deg", isValid: true, description: "'oblique' followed by maxumum 90 degree angle" },
+ { value: "oblique -90deg", isValid: true, description: "'oblique' followed by minimum -90 degree angle" },
+ { value: "oblique calc(91deg)", isValid: true, description: "'oblique' followed by calc with out of range value (should be clamped)" },
+ { value: "oblique calc(-91deg)", isValid: true, description: "'oblique' followed by calc with out of range value (should be clamped)" },
+ { value: "oblique 0rad", isValid: true, expectedValue: "oblique 0deg", description: "'oblique' followed by angle in radians" },
+ { value: "oblique 20", isValid: false, description: "'oblique' followed by unit-less number" },
+ { value: "oblique 20px", isValid: false, description: "'oblique' followed by non-angle" },
+ { value: "oblique a", isValid: false, description: "'oblique' followed by non-number" },
+ { value: "oblique -", isValid: false, description: "'oblique' followed by isolated minus" },
+ { value: "oblique - 20deg", isValid: false, description: "'oblique' followed by minus and angle separated by space" },
+ { value: "oblique -a", isValid: false, description: "'oblique' followed by minus and non-number" },
+
+ // Value range
+ { value: "oblique 10deg 20deg", isValid: true, description: "Simple range" },
+ { value: "oblique 10deg 10deg", isValid: true, expectedValue: "oblique 10deg", description: "Simple range with equal upper and lower bounds" },
+ { value: "oblique 20deg 20deg", isValid: true, description: "Simple range with former default angle for both bounds" },
+ { value: "oblique 20deg 10deg", isValid: true, expectedValue: "oblique 20deg 10deg", description: "Bounds out of order" },
+ { value: "oblique -100deg 20deg", isValid: false, description: "Lower bound out of range" },
+ { value: "oblique 20deg 100deg", isValid: false, description: "Upper bound out of range" },
+ { value: "oblique 10deg 20deg 30deg", isValid: false, description: "Extra content after upper bound" },
+ ]);
+ </script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/at-font-face-font-matching.html b/testing/web-platform/tests/css/css-fonts/variations/at-font-face-font-matching.html
new file mode 100644
index 0000000000..e56334f2da
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/at-font-face-font-matching.html
@@ -0,0 +1,195 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Testing @font-face font matching logic introduced in CSS Fonts level 4</title>
+ <link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-matching-algorithm" />
+ <meta name="timeout" content="long">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <style>
+ .test
+ {
+ float:left;
+ border:1px solid red;
+ font-size:24pt;
+ white-space: nowrap;
+ clear:both;
+ }
+
+ @font-face { font-family: W100; src: url('./resources/csstest-weights-100-kerned.ttf'); }
+ @font-face { font-family: W200; src: url('./resources/csstest-weights-200-kerned.ttf'); }
+ @font-face { font-family: W300; src: url('./resources/csstest-weights-300-kerned.ttf'); }
+
+
+ @font-face { font-family: descriptorPriorityTest; src: url('./resources/csstest-weights-100-kerned.ttf'); font-stretch : 125%; }
+ @font-face { font-family: descriptorPriorityTest; src: url('./resources/csstest-weights-200-kerned.ttf'); font-style: italic; }
+ @font-face { font-family: descriptorPriorityTest; src: url('./resources/csstest-weights-300-kerned.ttf'); font-weight: 350; }
+ </style>
+ <style id="dynamicStyles">
+ </style>
+</head>
+<body>
+
+ <span style="position: absolute; top: -100vh;">
+ <span style="font-family: 'W100';">A</span>
+ <span style="font-family: 'W200';">A</span>
+ <span style="font-family: 'W300';">A</span>
+ <span style="font-family: 'descriptorPriorityTest'; font-stretch: 125%;">A</span>
+ <span style="font-family: 'descriptorPriorityTest'; font-style: italic;">A</span>
+ <span style="font-family: 'descriptorPriorityTest'; font-weight: 350;">A</span>
+ </span>
+
+ <div id="master" class="test">A1 A2 A2 A3 A3 A3</div>
+ <div id="test" class="test">A1 A2 A2 A3 A3 A3</div>
+ <div style="clear:both"></div>
+ <script>
+
+ // wait for the fonts to load
+ // -- this should not be necessary if the fonts are installed as required
+ // -- but if they are not, the test is otherwise unstable
+ var once_fonts_are_ready = (document.fonts ? document.fonts.ready : new Promise(function(ready) { window.onload = time => [...document.querySelectorAll('body > span:nth-child(1) > span')].every(e => e.offsetWidth > 20) ? ready() : requestAnimationFrame(window.onload) }));
+
+ var masterElement = document.getElementById("master");
+ var testElement = document.getElementById("test");
+ var dynamicStyles = document.getElementById("dynamicStyles");
+
+ function verifyFont(testFamily, testWeight, testStyle, testStretch, expectedFamily) {
+
+ testElement.style.fontWeight = "normal";
+ testElement.style.fontStyle = "normal";
+ testElement.style.fontStretch = "normal";
+
+ masterElement.style.fontFamily = expectedFamily;
+ let masterWidth = masterElement.offsetWidth;
+
+ testElement.style.fontFamily = expectedFamily;
+ assert_equals(masterWidth, testElement.offsetWidth, "Sanity test: same family name gets same width" + dynamicStyles.innerHTML);
+
+ testElement.style.fontFamily = "serif";
+ assert_not_equals(masterWidth, testElement.offsetWidth, "Sanity test: different family get different width");
+
+ testElement.style.fontWeight = testWeight;
+ testElement.style.fontStyle = testStyle;
+ testElement.style.fontStretch = testStretch;
+ testElement.style.fontFamily = testFamily;
+
+ assert_equals(masterWidth, testElement.offsetWidth, "Unexpected font on test element");
+ }
+
+ var descriptorPriorityCases = [
+ { weight: "normal", style: "oblique -5deg", stretch: "125%", expectedFamily: "'W100'", description: "Stretch has higher priority than style"},
+ { weight: "350", style: "normal", stretch: "125%", expectedFamily: "'W100'", description: "Stretch has higher priority than weight"},
+ { weight: "350", style: "oblique -5deg", stretch: "normal", expectedFamily: "'W200'", description: "Style has higher priority than weight"}
+ ];
+
+ descriptorPriorityCases.forEach(function (testCase) {
+ promise_test(() => {
+ return once_fonts_are_ready
+ .then(() => verifyFont("descriptorPriorityTest", testCase.weight, testCase.style, testCase.stretch, testCase.expectedFamily));
+ },
+ "Descriptor matching priority: " + testCase.description
+ );
+ });
+
+ function load(family, name, value) {
+ const el1 = document.createElement("span");
+ const el2 = document.createElement("span");
+ el1.innerText = "A";
+ el2.innerText = "A";
+ let value1, value2;
+ if (value.indexOf("deg") > 0) {
+ value1 = "oblique " + value.split(" ")[1];
+ value2 = "oblique " + (value.split(" ")[2] || value.split(" ")[1]);
+ } else {
+ value1 = value.split(" ")[0];
+ value2 = value.split(" ")[1] || value1;
+ }
+ el1.style[name] = value1;
+ el2.style[name] = value2;
+ document.body.appendChild(el1);
+ document.body.appendChild(el2);
+ const initialWidth1 = el1.offsetWidth;
+ const initialWidth2 = el2.offsetWidth;
+ return new Promise((resolve) => {
+ el1.style.fontFamily = family;
+ el2.style.fontFamily = family;
+ (function check() {
+ if (el1.offsetWidth !== initialWidth1 && el2.offsetWidth !== initialWidth2) {
+ el1.remove();
+ el2.remove();
+ resolve();
+ } else {
+ requestAnimationFrame(check);
+ }
+ }());
+ });
+ }
+ function createFontFaceRules(fontFaceFamily, descriptorName, expectedMatch, unexpectedMatch) {
+ dynamicStyles.innerHTML =
+ "@font-face { font-family: " + fontFaceFamily + "; src: url('./resources/csstest-weights-100-kerned.ttf'); "+ descriptorName + ": " + expectedMatch + "; }" +
+ "@font-face { font-family: " + fontFaceFamily + "; src: url('./resources/csstest-weights-200-kerned.ttf'); " + descriptorName + ": " + unexpectedMatch + "; }";
+
+ return Promise.all([
+ load(fontFaceFamily, descriptorName, expectedMatch),
+ load(fontFaceFamily, descriptorName, unexpectedMatch)
+ ]);
+ }
+
+ let familyId = 0;
+
+ function testDescriptor(descriptorName, testCases) {
+ testCases.forEach(function (testCase) {
+ // Go though test cases, checking each descriptor has higher priority than next in the list
+ for(let i = 0; i < testCase.testDescriptors.length - 1; i++) {
+ let expectedMatch = testCase.testDescriptors[i];
+ let unexpectedMatch = testCase.testDescriptors[i + 1];
+ familyId += 1;
+ const family = "MatchTestFamily" + familyId;
+
+ promise_test(
+ () => {
+ return createFontFaceRules(family, descriptorName, expectedMatch, unexpectedMatch)
+ .then(() => {
+ let testWeight = (descriptorName == "font-weight") ? testCase.value : "normal";
+ let testStyle = (descriptorName == "font-style") ? testCase.value : "normal";
+ let testStretch = (descriptorName == "font-stretch") ? testCase.value : "normal";
+
+ verifyFont(family, testWeight, testStyle, testStretch, "'W100'");
+ });
+ },
+ "Matching " + descriptorName + ": '" + testCase.value + "' should prefer '" + expectedMatch + "' over '" + unexpectedMatch + "'");
+ }
+ });
+ }
+
+ // Each case defines property value being tested and set of descriptor values in order of matching priority from highest to lowest
+
+ testDescriptor("font-weight", [
+ { value: "400", testDescriptors: ["400", "450 460", "500", "350 399", "351 398", "501 550", "502 560"] },
+ { value: "430", testDescriptors: ["420 440", "450 460", "500", "400 425", "350 399", "340 398", "501 550", "502 560"] },
+ { value: "500", testDescriptors: ["500", "450 460", "400", "350 399", "351 398", "501 550", "502 560"] },
+ { value: "501", testDescriptors: ["501", "502 510", "503 520", "500", "450 460", "390 410", "300 350"] },
+ { value: "399", testDescriptors: ["350 399", "340 360", "200 300", "400", "450 460", "500 501", "502 510"] }
+ ]);
+
+ testDescriptor("font-stretch", [
+ { value: "100%", testDescriptors: ["100%", "110% 120%", "115% 116%"] },
+ { value: "110%", testDescriptors: ["110% 120%", "115% 116%", "105%", "100%", "50% 80%", "60% 70%"] },
+ { value: "90%", testDescriptors: ["90% 100%", "50% 80%", "60% 70%", "110% 140%", "120% 130%"] },
+ ]);
+
+ testDescriptor("font-style", [
+ { value: "normal", testDescriptors: ["normal", "oblique 0deg", "oblique 10deg 40deg", "oblique 20deg 30deg", "oblique -50deg -20deg", "oblique -40deg -30deg" ] },
+ { value: "italic", testDescriptors: ["italic", "oblique 20deg", "oblique 30deg 60deg", "oblique 40deg 50deg", "oblique 5deg 10deg", "oblique 5deg", "normal", "oblique 0deg", "oblique -60deg -30deg", "oblique -50deg -40deg" ] },
+ { value: "oblique 20deg", testDescriptors: ["oblique 20deg", "oblique 30deg 60deg", "oblique 40deg 50deg", "oblique 10deg", "italic", "oblique 0deg", "oblique -50deg -20deg", "oblique -40deg -30deg" ] },
+ { value: "oblique 21deg", testDescriptors: ["oblique 21deg", "oblique 30deg 60deg", "oblique 40deg 50deg", "oblique 20deg", "oblique 10deg", "italic", "oblique 0deg", "oblique -50deg -20deg", "oblique -40deg -30deg" ] },
+ { value: "oblique 10deg", testDescriptors: ["oblique 10deg", "oblique 5deg", "oblique 15deg 20deg", "oblique 30deg 60deg", "oblique 40deg 50deg", "italic", "oblique 0deg", "oblique -50deg -20deg", "oblique -40deg -30deg" ] },
+ { value: "oblique 0deg", testDescriptors: ["oblique 0deg", "oblique 5deg", "oblique 15deg 20deg", "oblique 30deg 60deg", "oblique 40deg 50deg", "italic", "oblique -50deg -20deg", "oblique -40deg -30deg" ] },
+ { value: "oblique -10deg", testDescriptors: ["oblique -10deg", "oblique -5deg", "oblique -1deg 0deg", "oblique -20deg -15deg", "oblique -60deg -30deg", "oblique -50deg -40deg", "italic", "oblique 0deg 10deg", "oblique 40deg 50deg" ] },
+ { value: "oblique -20deg", testDescriptors: ["oblique -20deg", "oblique -60deg -40deg", "oblique -10deg", "italic", "oblique 0deg", "oblique 30deg 60deg", "oblique 40deg 50deg"] },
+ { value: "oblique -21deg", testDescriptors: ["oblique -21deg", "oblique -60deg -40deg", "oblique -10deg", "italic", "oblique 0deg", "oblique 30deg 60deg", "oblique 40deg 50deg"] },
+ ]);
+
+ </script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/font-descriptor-range-reversed-ref.html b/testing/web-platform/tests/css/css-fonts/variations/font-descriptor-range-reversed-ref.html
new file mode 100644
index 0000000000..fc2b7aca29
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/font-descriptor-range-reversed-ref.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<title>CSS Reference</title>
+
+<style>
+@font-face {
+ font-family: TestWeight;
+ src: url(resources/csstest-weights-100-kerned.ttf);
+ font-weight: 200 300;
+}
+@font-face {
+ font-family: TestWeight;
+ src: url(resources/csstest-weights-900-kerned.ttf);
+ font-weight: 300 400;
+}
+@font-face {
+ font-family: TestStyle;
+ src: url(resources/csstest-weights-100-kerned.ttf);
+ font-style: oblique 20deg 30deg;
+}
+@font-face {
+ font-family: TestStyle;
+ src: url(resources/csstest-weights-900-kerned.ttf);
+ font-style: oblique 30deg 40deg;
+}
+@font-face {
+ font-family: TestStretch;
+ src: url(resources/csstest-weights-100-kerned.ttf);
+ font-stretch: 110% 120%;
+}
+@font-face {
+ font-family: TestStretch;
+ src: url(resources/csstest-weights-900-kerned.ttf);
+ font-stretch: 120% 130%;
+}
+</style>
+
+<p style="font-family: TestWeight; font-weight: 250;">A</p>
+<p style="font-family: TestStyle; font-style: oblique 25deg;">A</p>
+<p style="font-family: TestStretch; font-stretch: 115%;">A</p>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/font-descriptor-range-reversed.html b/testing/web-platform/tests/css/css-fonts/variations/font-descriptor-range-reversed.html
new file mode 100644
index 0000000000..14d426245d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/font-descriptor-range-reversed.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<title>CSS Test: Matching @font-face font-weight, font-style, and font-stretch descriptors with reversed ranges</title>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-prop-desc">
+<link rel="match" href="font-descriptor-range-reversed-ref.html">
+
+<!-- Using csstest-weights-{100,900}-kerned.ttf just as two convenient
+ different fonts here with different "A" glyphs -->
+
+<style>
+@font-face {
+ font-family: TestWeight;
+ src: url(resources/csstest-weights-100-kerned.ttf);
+ font-weight: 300 200;
+}
+@font-face {
+ font-family: TestWeight;
+ src: url(resources/csstest-weights-900-kerned.ttf);
+ font-weight: 300 400;
+}
+@font-face {
+ font-family: TestStyle;
+ src: url(resources/csstest-weights-100-kerned.ttf);
+ font-style: oblique 30deg 20deg;
+}
+@font-face {
+ font-family: TestStyle;
+ src: url(resources/csstest-weights-900-kerned.ttf);
+ font-style: oblique 30deg 40deg;
+}
+@font-face {
+ font-family: TestStretch;
+ src: url(resources/csstest-weights-100-kerned.ttf);
+ font-stretch: 120% 110%;
+}
+@font-face {
+ font-family: TestStretch;
+ src: url(resources/csstest-weights-900-kerned.ttf);
+ font-stretch: 120% 130%;
+}
+</style>
+
+<!-- Matches `font-weight: 300 200;` -->
+<p style="font-family: TestWeight; font-weight: 250;">A</p>
+
+<!-- Matches `font-style: oblique 30deg 20deg;` -->
+<p style="font-family: TestStyle; font-style: oblique 25deg;">A</p>
+
+<!-- Matches `font-style: oblique 120% 110%;` -->
+<p style="font-family: TestStretch; font-stretch: 115%;">A</p>
+
+<script>
+document.fonts.ready.then(function() {
+ document.documentElement.className = "";
+});
+</script>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/font-opentype-collections.html b/testing/web-platform/tests/css/css-fonts/variations/font-opentype-collections.html
new file mode 100644
index 0000000000..1b403b3246
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/font-opentype-collections.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Testing support for OpenType collections in @font-face rules</title>
+ <link rel="help" href="https://www.w3.org/TR/css-fonts-4/#src-desc" />
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <style>
+ @font-face {
+ font-family: OpenType;
+ src: url(/fonts/Ahem.ttf);
+ }
+
+ @font-face {
+ font-family: OpenType-Collection;
+ src: url(./resources/ahem.ttc);
+ }
+ </style>
+</head>
+<body onload="test()">
+ <div id="opentype" style="display:inline-block; font-family:OpenType,Georgia;">Test</div><br>
+ <div id="collection" style="display:inline-block; font-family:OpenType-Collection,Verdana;">Test</div>
+ <script>
+
+ var opentypeElement = document.getElementById("opentype");
+ var collectionElement = document.getElementById("collection");
+
+ var loadTest = async_test("Verify that collection font is loaded");
+
+ function test() {
+ if (opentypeElement.offsetWidth == collectionElement.offsetWidth) {
+ loadTest.done();
+ }
+ else {
+ window.requestAnimationFrame(test);
+ }
+ }
+
+ </script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/font-parse-numeric-stretch-style-weight.html b/testing/web-platform/tests/css/css-fonts/variations/font-parse-numeric-stretch-style-weight.html
new file mode 100644
index 0000000000..19c0ded19e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/font-parse-numeric-stretch-style-weight.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<script>
+setup({explicit_done : true});
+
+var styleValidTests = {
+ 'weight': [
+ 'bold',
+ '700',
+ '900',
+ '850',
+ '850.3',
+ 'calc(100 + 300)',
+ 'calc(0.2 + 205.5)',
+ 'calc(0 - 100)',
+ 'calc(200 + 801)',
+ ],
+ 'stretch': ['51%', '199%', 'calc(10% + 20%)', '0%'],
+ 'style' : [ 'normal', 'italic', 'oblique', 'oblique 50deg', 'oblique -90deg', 'oblique 90deg',
+ 'oblique calc(90deg + 20deg)', 'oblique calc(30deg + 20deg)' ]
+};
+
+var styleInvalidTests = {
+ 'weight': ['100 400'],
+ 'stretch': ['100% 110%', '100% 150%', 'calc(1 + 10%)'],
+ 'style' : [ 'normal 10deg', 'italic 10deg', 'oblique -91deg', 'oblique 91deg' ]
+};
+
+function testParseStyle() {
+ for (validStyleTestCategory of Object.keys(styleValidTests)) {
+ for (validStyleTest of styleValidTests[validStyleTestCategory]) {
+ test(
+ function() {
+ assert_true(
+ CSS.supports('font-' + validStyleTestCategory, validStyleTest));
+ },
+ 'Valid value ' + validStyleTest + ' for font property ' +
+ validStyleTestCategory + ' used for styling.')
+ }
+ }
+ for (invalidStyleTestCategory of Object.keys(styleInvalidTests)) {
+ for (invalidStyleTest of styleInvalidTests[invalidStyleTestCategory]) {
+ test(
+ function() {
+ assert_false(CSS.supports(
+ 'font-' + invalidStyleTestCategory, invalidStyleTest));
+ },
+ 'Invalid value ' + invalidStyleTest + ' for font property ' +
+ invalidStyleTestCategory + ' used for styling.')
+ }
+ }
+}
+
+var faceTests = {
+ 'weight': [
+ ['100', '100'], ['700', '700'], ['900', '900'], ['bold', 'bold'],
+ ['normal', 'normal'], ['100 400', '100 400'], ['100 101.5', '100 101.5'],
+ ['999.8 999.9', '999.8 999.9'],
+ [ '500 400', '500 400']
+ ],
+ 'stretch': [
+ ['0%', '0%'],
+ ['calc(0% - 10%)', 'calc(-10%)' ],
+ ['100%', '100%'],
+ ['110%', '110%'],
+ ['111.5%', '111.5%'],
+ [ "50% 200%", "50% 200%" ],
+ [ "0.1% 1%", "0.1% 1%" ],
+ [ "900% 901%", "900% 901%" ],
+ ['ultra-condensed', 'ultra-condensed'],
+ ['ultra-expanded', 'ultra-expanded'],
+ ],
+ 'style' : [
+ [ "normal", "normal" ],
+ [ "italic", "italic" ],
+ [ "oblique", "oblique" ],
+ [ "oblique 10deg", "oblique 10deg" ],
+ [ "oblique 10deg 20deg", "oblique 10deg 20deg" ]
+ ]
+};
+
+var faceInvalidTests = {
+ 'weight': [
+ '0',
+ '0.9',
+ '-100 200',
+ '100 -200',
+ '100 1001',
+ '1001',
+ '1000.5',
+ '100 200 300',
+ 'a',
+ 'a b c',
+ ],
+ 'stretch': [
+ '-0.5%', '-1%', '60% 70% 80%', 'a%', 'a b c', '0.1',
+ '-60% 80%', 'ultra-expannnned', '50% 0'
+ ],
+ 'style' : [ 'oblique 100deg', 'oblique italic', 'oblique -91deg', 'oblique 0',
+ 'oblique 10', 'iiitalic', '90deg', '11', 'italic 90deg' ]
+};
+
+function testParseFace() {
+ for (var theProperty of Object.keys(faceTests)) {
+ for (var faceTest of faceTests[theProperty]) {
+ test(
+ () => {
+ var fontFace = new FontFace('testfont', 'url()');
+ assert_equals(fontFace[theProperty], 'normal');
+ fontFace[theProperty] = faceTest[0];
+ assert_equals(fontFace[theProperty], faceTest[1]);
+ },
+ 'Valid value ' + faceTest[0] + ' matches ' + faceTest[1] + ' for ' +
+ theProperty + ' in @font-face.');
+ }
+ }
+
+ for (var theProperty of Object.keys(faceInvalidTests)) {
+ for (var faceTest of faceInvalidTests[theProperty]) {
+ test(
+ () => {
+ var fontFace = new FontFace('testfont', 'url()');
+ assert_throws_dom('SyntaxError', () => {
+ fontFace[theProperty] = faceTest;
+ }, 'Value must not be accepted as weight value.');
+ },
+ 'Value ' + faceTest + ' must not be accepted as ' + theProperty +
+ ' in @font-face.')
+ }
+ }
+}
+
+window.addEventListener('load', function() {
+ testParseStyle();
+ testParseFace();
+ done();
+});
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/font-shorthand.html b/testing/web-platform/tests/css/css-fonts/variations/font-shorthand.html
new file mode 100644
index 0000000000..c0f1f54196
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/font-shorthand.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Testing font shorthand for new values introduced in CSS Fonts level 4</title>
+ <link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-prop" />
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+ <div id="shorthand-test">Shorthand test</div>
+
+ <script>
+
+ testFontShorthand = [
+ { value: "calc(24px) Arial", isValid:true, message: "Font size specified as calc()" },
+
+ // font-weight as number
+ { value: "700.5 24px Arial", isValid:true, expectedWeight:"700.5", message: "Font weight specified as number" },
+ { value: "0.9 24px Arial", isValid:false, message: "Font weight specified as number, value less than 1" },
+ { value: "1700.5 24px Arial", isValid:false, message: "Font weight specified as number, value greater than 1000" },
+
+ // font-weight as calc()
+ { value: "calc(900.7 - 200.1 * 2) calc(12px + 12px) Arial", isValid:true, expectedWeight:"500.5", message: "Font weight specified as calc()" },
+ { value: "calc(400.5 - 200.1 * 2) 24px Arial", isValid:true, expectedWeight:"1", message: "Font weight specified as calc(), value smaller than 1" },
+ { value: "calc(400.5 + 300.1 * 2) 24px Arial", isValid:true, expectedWeight:"1000", message: "Font weight specified as calc(), value greater than 1000" },
+
+ // font-style
+ { value: "oblique 45deg 24px Arial", isValid:true, expectedStyle: "oblique 45deg", message: "'oblique' with positive angle" },
+ { value: "oblique -45deg 24px Arial", isValid:true, expectedStyle: "oblique -45deg", message: "'oblique' with negative angle" },
+ { value: "oblique 24px Arial", isValid:true, expectedStyle: "oblique", message: "'oblique' without slant angle" },
+ { value: "oblique 100deg 24px Arial", isValid:false, message: "'oblique' with positive angle, value out of range" },
+ { value: "oblique -100deg 24px Arial", isValid:false, message: "'oblique' with negative angle, value out of range" },
+
+ // font-weight and font-style combined
+ { value: "oblique 50 24px Arial", isValid:true, expectedStyle: "oblique", expectedWeight:"50", message: "'oblique' followed by valid small weight" },
+ { value: "oblique 500 24px Arial", isValid:true, expectedStyle: "oblique", expectedWeight:"500", message: "'oblique' followed by valid large weight" },
+ { value: "oblique 45deg 500 24px Arial", isValid:true, expectedStyle: "oblique 45deg", expectedWeight:"500", message: "'oblique' with positive angle followed by valid weight" },
+ { value: "oblique -45deg 500 24px Arial", isValid:true, expectedStyle: "oblique -45deg", expectedWeight:"500", message: "'oblique' with negative angle followed by valid weight" },
+
+ // font-weight and font-style combined, with calc()
+ { value: "oblique calc(200 + 300) 24px Arial", isValid:true, expectedStyle: "oblique", expectedWeight:"500", message: "'oblique' followed by valid calc() weight" },
+ { value: "oblique 30deg calc(200 + 300) 24px Arial", isValid:true, expectedStyle: "oblique 30deg", expectedWeight:"500", message: "'oblique' with angle followed by valid calc() weight" },
+ { value: "oblique calc(900 + 300) 24px Arial", isValid:true, expectedStyle: "oblique", expectedWeight:"1000", message: "'oblique' followed by a to-be-clamped calc() weight" },
+ { value: "calc(200 + 300) oblique 24px Arial", isValid:true, expectedStyle: "oblique", expectedWeight:"500", message: "calc() weight folowed by 'oblique'" },
+ { value: "calc(200 + 300) oblique 45deg 24px Arial", isValid:true, expectedStyle: "oblique 45deg", expectedWeight:"500", message: "calc() weight folowed by 'oblique' and slant angle" },
+ { value: "calc(900 + 300) oblique 45deg 24px Arial", isValid:true, expectedStyle: "oblique 45deg", expectedWeight:"1000", message: "To-be-clamped calc() weight folowed by 'oblique' and slant angle" },
+ ];
+
+ testFontShorthand.forEach(function (testCase) {
+ test(() => {
+ assert_equals(window.CSS.supports("font", testCase.value), testCase.isValid, "Font shorthand: " + testCase.message);
+
+ let expectedStyle = (testCase.expectedStyle) ? testCase.expectedStyle : "normal";
+ let expectedWeight = (testCase.expectedWeight) ? testCase.expectedWeight : "400";
+ let expectedSize = (testCase.isValid) ? "24px" : "16px";
+
+ var testElement = document.getElementById("shorthand-test");
+ testElement.setAttribute("style", "font:" + testCase.value);
+ var style = window.getComputedStyle(testElement);
+ assert_equals(style.fontStyle, expectedStyle, "Font shorthand expected style: " + testCase.message);
+ assert_equals(style.fontWeight, expectedWeight, "Font shorthand expected weight: " + testCase.message);
+ assert_equals(style.fontSize, expectedSize, "Font shorthand expected size: " + testCase.message);
+ }, "Font shorthand: " + testCase.message);
+
+ });
+
+ </script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/font-slant-1-ref.html b/testing/web-platform/tests/css/css-fonts/variations/font-slant-1-ref.html
new file mode 100644
index 0000000000..7b819bfa56
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/font-slant-1-ref.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>CSS reference file: mapping of font-style:oblique to opentype 'slnt' axis</title>
+<style>
+@font-face {
+ font-family: test;
+ font-style: oblique 10deg;
+ src: url(resources/Inter.var.subset.ttf);
+}
+.test {
+ font: 32px/1.5 test;
+ font-variation-settings: 'slnt' -10;
+}
+</style>
+<body>
+<p>Test passes if all the following lines are displayed with a 10-degree rightward slant.</p>
+<div class="test">slant</div>
+<div class="test">slant</div>
+<div class="test">slant</div>
+<div class="test">slant</div>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/font-slant-1.html b/testing/web-platform/tests/css/css-fonts/variations/font-slant-1.html
new file mode 100644
index 0000000000..f3985defde
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/font-slant-1.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>CSS test: mapping of font-style:oblique to opentype 'slnt' axis</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#valdef-font-style-oblique-angle"/>
+<link rel="match" href="font-slant-1-ref.html"/>
+<style>
+@font-face {
+ font-family: test;
+ font-style: oblique 0deg 10deg;
+ src: url(resources/Inter.var.subset.ttf);
+}
+.test {
+ font-synthesis: none;
+ font: 32px/1.5 test;
+}
+</style>
+<body>
+<p>Test passes if all the following lines are displayed with a 10-degree rightward slant.</p>
+<div class="test" style="font-variation-settings: 'slnt' -10">slant</div>
+<div class="test" style="font-style: oblique">slant</div>
+<div class="test" style="font-style: oblique 10deg">slant</div>
+<div class="test" style="font-style: italic">slant</div>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/font-slant-2-ref.html b/testing/web-platform/tests/css/css-fonts/variations/font-slant-2-ref.html
new file mode 100644
index 0000000000..4f109aa219
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/font-slant-2-ref.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>CSS reference file: mapping of font-style:oblique to opentype 'slnt' axis</title>
+<style>
+@font-face {
+ font-family: test;
+ src: url(resources/Inter.var.subset.ttf);
+}
+.test {
+ font: 32px/1.5 test;
+}
+</style>
+<body>
+<p>Test passes if none of the following lines are displayed with a slanted font.</p>
+<div class="test">slant</div>
+<div class="test">slant</div>
+<div class="test">slant</div>
+<div class="test">slant</div>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/font-slant-2a.html b/testing/web-platform/tests/css/css-fonts/variations/font-slant-2a.html
new file mode 100644
index 0000000000..386ff83f8d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/font-slant-2a.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>CSS test: mapping of font-style:oblique to opentype 'slnt' axis</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#valdef-font-style-oblique-angle"/>
+<link rel="match" href="font-slant-2-ref.html"/>
+<style>
+@font-face {
+ font-family: test;
+ font-style: oblique 0deg 10deg;
+ src: url(resources/Inter.var.subset.ttf);
+}
+.test {
+ font: 32px/1.5 test;
+}
+</style>
+<body>
+<p>Test passes if none of the following lines are displayed with a slanted font.</p>
+<div class="test">slant</div>
+<div class="test" style="font-variation-settings: 'slnt' 10">slant</div>
+<div class="test" style="font-style: oblique 0deg">slant</div>
+<div class="test" style="font-style: oblique -10deg">slant</div>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/font-slant-2b.html b/testing/web-platform/tests/css/css-fonts/variations/font-slant-2b.html
new file mode 100644
index 0000000000..0fb280827e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/font-slant-2b.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>CSS test: mapping of font-style:oblique to opentype 'slnt' axis</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#valdef-font-style-oblique-angle"/>
+<link rel="match" href="font-slant-2-ref.html"/>
+<style>
+@font-face {
+ font-family: test;
+ font-style: oblique -10deg 0deg;
+ src: url(resources/Inter.var.subset.ttf);
+}
+.test {
+ font-synthesis: none;
+ font: 32px/1.5 test;
+}
+</style>
+<body>
+<p>Test passes if none of the following lines are displayed with a slanted font.</p>
+<div class="test">slant</div>
+<div class="test" style="font-variation-settings: 'slnt' 10">slant</div>
+<div class="test" style="font-style: oblique">slant</div>
+<div class="test" style="font-style: italic">slant</div>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/font-slant-2c.html b/testing/web-platform/tests/css/css-fonts/variations/font-slant-2c.html
new file mode 100644
index 0000000000..5436fc1b67
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/font-slant-2c.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>CSS test: mapping of font-style:oblique to opentype 'slnt' axis</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#valdef-font-style-oblique-angle"/>
+<link rel="match" href="font-slant-2-ref.html"/>
+<style>
+@font-face {
+ font-family: test;
+ font-style: normal;
+ src: url(resources/Inter.var.subset.ttf);
+}
+.test {
+ font-synthesis: none;
+ font: 32px/1.5 test;
+}
+</style>
+<body>
+<p>Test passes if none of the following lines are displayed with a slanted font.</p>
+<div class="test" style="font-style: oblique">slant</div>
+<div class="test" style="font-style: oblique 10deg">slant</div>
+<div class="test" style="font-style: oblique -10deg">slant</div>
+<div class="test" style="font-style: italic">slant</div>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/font-slant-3-ref.html b/testing/web-platform/tests/css/css-fonts/variations/font-slant-3-ref.html
new file mode 100644
index 0000000000..542479db51
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/font-slant-3-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>CSS reference file: mapping of font-style:oblique to opentype 'slnt' axis</title>
+<style>
+@font-face {
+ font-family: test;
+ /* Version of Inter subset with OpenType tables stripped,
+ so the browser's synthetic styling should take effect. */
+ src: url(resources/Inter.no-var.subset.ttf);
+ font-style: normal;
+ font-weight: normal;
+ font-stretch: normal;
+}
+.test {
+ font: 32px/1.5 test;
+}
+</style>
+<body>
+<p>Test passes if the following lines are displayed with a variety of synthetic slants.</p>
+<div class="test" style="font-style: oblique 10deg">slant</div>
+<div class="test" style="font-style: oblique 20deg">slant</div>
+<div class="test" style="font-style: oblique -10deg">slant</div>
+<div class="test" style="font-style: oblique 14deg">slant</div>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/font-slant-3.html b/testing/web-platform/tests/css/css-fonts/variations/font-slant-3.html
new file mode 100644
index 0000000000..047409ec35
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/font-slant-3.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>CSS test: mapping of font-style:oblique to opentype 'slnt' axis</title>
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts/#valdef-font-style-oblique-angle"/>
+<link rel="match" href="font-slant-3-ref.html"/>
+<style>
+@font-face {
+ font-family: test;
+ /* The font resource includes a 'slnt' axis, but our font-style descriptor
+ should prevent it being used to render oblique/italic styles. */
+ src: url(resources/Inter.var.subset.ttf);
+ font-style: normal;
+ font-weight: normal;
+ font-stretch: normal;
+}
+.test {
+ font-synthesis: style;
+ font: 32px/1.5 test;
+}
+</style>
+<body>
+<p>Test passes if the following lines are displayed with a variety of synthetic slants.</p>
+<div class="test" style="font-style: oblique 10deg">slant</div>
+<div class="test" style="font-style: oblique 20deg">slant</div>
+<div class="test" style="font-style: oblique -10deg">slant</div>
+<div class="test" style="font-style: italic">slant</div>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/font-stretch.html b/testing/web-platform/tests/css/css-fonts/variations/font-stretch.html
new file mode 100644
index 0000000000..a27b251f48
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/font-stretch.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Testing new font-stretch values introduced in CSS Fonts level 4</title>
+ <link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-stretch-prop" />
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+ <div id="computedStyleTest">Abc</span></div>
+ <div id="inheritanceTest"><span style="font-stretch:125%;">Abc</span><span style="font-stretch:expanded;">Abc</span><span style="font-weight: 700;">Abc</span></div>
+ <script>
+
+ testStretchValues = [
+ { stretch: "100", expectedComputedStretch: "100%" , expectedIsSupported: false, message: "only percentages, not numbers allowed" },
+ { stretch: "-1%", expectedComputedStretch: "" , expectedIsSupported: false, message: "negative values are illegal" },
+ { stretch: "0%", expectedComputedStretch: "0%", expectedIsSupported: true, message: "zero is legal" },
+ { stretch: "1%", expectedComputedStretch: "1%", expectedIsSupported: true, message: "legal percentage" },
+ { stretch: "10%", expectedComputedStretch: "10%", expectedIsSupported: true, message: "legal percentage" },
+ { stretch: "100%", expectedComputedStretch: "100%", expectedIsSupported: true, message: "legal percentage" },
+ { stretch: "1000%", expectedComputedStretch: "1000%", expectedIsSupported: true, message: "legal percentage" },
+ { stretch: "1e9%", expectedComputedStretch: "1e+009%", expectedIsSupported: true, message: "huge legal percentage" },
+ { stretch: "ultra-condensed", expectedComputedStretch: "50%", expectedIsSupported: true, message: "legal enum" },
+ { stretch: "extra-condensed", expectedComputedStretch: "62.5%", expectedIsSupported: true, message: "legal enum" },
+ { stretch: "condensed", expectedComputedStretch: "75%", expectedIsSupported: true, message: "legal enum" },
+ { stretch: "semi-condensed", expectedComputedStretch: "87.5%", expectedIsSupported: true, message: "legal enum" },
+ { stretch: "normal", expectedComputedStretch: "100%", expectedIsSupported: true, message: "legal enum" },
+ { stretch: "semi-expanded", expectedComputedStretch: "112.5%", expectedIsSupported: true, message: "legal enum" },
+ { stretch: "expanded", expectedComputedStretch: "125%", expectedIsSupported: true, message: "legal enum" },
+ { stretch: "extra-expanded", expectedComputedStretch: "150%", expectedIsSupported: true, message: "legal enum" },
+ { stretch: "ultra-expanded", expectedComputedStretch: "200%", expectedIsSupported: true, message: "legal enum" },
+ { stretch: "narrower", expectedComputedStretch: "", expectedIsSupported: false, message: "deprecated" },
+ { stretch: "wider", expectedComputedStretch: "", expectedIsSupported: false, message: "deprecated" },
+ { stretch: "calc(200.5%)", expectedComputedStretch: "200.5%", expectedIsSupported: true, message: "Simple calc value" },
+ { stretch: "calc(50%*2 - 20%)", expectedComputedStretch: "80%", expectedIsSupported: true, message: "Valid calc expression" },
+ { stretch: "calc(-100%)", expectedComputedStretch: "0%", expectedIsSupported: true, message: "Negative calc value (to be clamped)" },
+ { stretch: "calc(50% - 50%*2)", expectedComputedStretch: "0%", expectedIsSupported: true, message: "Negative calc expression (to be clamped)" },
+ { stretch: "calc(100)", expectedComputedStretch: "", expectedIsSupported: false, message: "Unit-less calc value" },
+ { stretch: "calc(100px)", expectedComputedStretch: "", expectedIsSupported: false, message: "Calc value with units" },
+ { stretch: "100% 700%", expectedComputedStretch: "", expectedIsSupported: false, message: "Extra percentage after numeric value" },
+ { stretch: "100% 100", expectedComputedStretch: "", expectedIsSupported: false, message: "Extra content after numeric value" },
+ { stretch: "condensed expanded",expectedComputedStretch: "", expectedIsSupported: false, message: "Extra content after keyword value" },
+ { stretch: "calc(100%) 100%", expectedComputedStretch: "", expectedIsSupported: false, message: "Extra content after calc value" }
+ ];
+
+ testStretchValues.forEach(function (element) {
+ test(() => { assert_equals(window.CSS.supports("font-stretch", element.stretch), element.expectedIsSupported, element.message); }, "@supports: " + element.stretch + " - " + element.message);
+
+ // If supported, verify the computed style.
+ if (element.expectedIsSupported)
+ {
+ var testSpan = document.getElementById("computedStyleTest");
+ testSpan.style.fontStretch = element.stretch;
+ var actualStretch = window.getComputedStyle(testSpan).fontStretch;
+
+ test(() => { assert_equals(actualStretch, element.expectedComputedStretch, element.message); }, "@getComputedStyle: " + element.stretch + " - " + element.message);
+ }
+ });
+
+ // Verify computed inheritance of nested elements.
+ {
+ var base = document.getElementById("inheritanceTest");
+ var parentStretch = "condensed";
+ base.style.fontStretch = parentStretch;
+
+ test(() => {
+ var actualStretch = window.getComputedStyle(base.children[0]).fontStretch;
+ assert_equals(actualStretch, "125%", "Overridden value for " + parentStretch + " should match expected value.");
+ }, "Test font-stretch for overridden number " + parentStretch);
+
+ test(() => {
+ var actualStretch = window.getComputedStyle(base.children[1]).fontStretch;
+ assert_equals(actualStretch, "125%", "Inherited value " + parentStretch + " should match expected value.");
+ }, "Test font-stretch for overridden enum name resolved to number " + parentStretch);
+
+ test(() => {
+ var actualStretch = window.getComputedStyle(base.children[2]).fontStretch;
+ assert_equals(actualStretch, "75%", "Inherited value " + parentStretch + " should match expected value.");
+ }, "Test font-stretch for inherited named enum resolved to number " + parentStretch);
+ }
+
+ </script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/font-style-interpolation.html b/testing/web-platform/tests/css/css-fonts/variations/font-style-interpolation.html
new file mode 100644
index 0000000000..0fb8850c4a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/font-style-interpolation.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Testing the interpolation of new font-style values introduced in CSS Fonts level 4</title>
+ <meta name="timeout" content="long">
+ <link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-style-prop" />
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <style>
+ @keyframes fontStyleAnimation {
+ from { font-style: oblique -12deg; }
+ to { font-style: oblique 12deg; }
+ }
+
+ #animation-test.animate {
+ animation: fontStyleAnimation 1s infinite alternate;
+ }
+
+ #transition-test {
+ font-style: oblique -12deg;
+ transition-property: font-style;
+ transition-duration: 10s;
+ }
+
+ #transition-test.animate {
+ font-style: oblique 12deg;
+ }
+
+ </style>
+</head>
+<body>
+ <div style="font-family: serif;">
+ <div id="animation-test">Animation test</div>
+ <div id="transition-test">Transition test</div>
+ </div>
+
+ <script>
+
+ async_test(function (test) {
+ var animationElement = document.getElementById("animation-test");
+
+ // Verify starting value
+ assert_equals(window.getComputedStyle(animationElement).fontStyle, "normal", "Font style before animation");
+
+ // Start animation
+ animationElement.classList.add("animate");
+
+ var waitForAnimationStep = test.step_func(function() {
+ var computedFontStyle = window.getComputedStyle(animationElement).fontStyle;
+ if (computedFontStyle != "normal" &&
+ computedFontStyle != "oblique -12deg" &&
+ computedFontStyle != "oblique 12deg") {
+ test.done();
+ }
+ else {
+ window.requestAnimationFrame(waitForAnimationStep);
+ }
+ });
+ waitForAnimationStep();
+
+ }, "font-style animation");
+
+ async_test(function (test) {
+ var transitionElement = document.getElementById("transition-test");
+
+ // Verify starting value
+ assert_equals(window.getComputedStyle(transitionElement).fontStyle, "oblique -12deg", "Font style before transition");
+
+ // Start transition
+ transitionElement.classList.add("animate");
+
+ var waitForTransitionStep = test.step_func(function() {
+ var computedFontStyle = window.getComputedStyle(transitionElement).fontStyle;
+ if (computedFontStyle != "normal" &&
+ computedFontStyle != "oblique -12deg" &&
+ computedFontStyle != "oblique 12deg") {
+ test.done();
+ }
+ else {
+ window.requestAnimationFrame(waitForTransitionStep);
+ }
+ });
+ waitForTransitionStep();
+
+ }, "font-style transition");
+
+ </script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/font-style-parsing.html b/testing/web-platform/tests/css/css-fonts/variations/font-style-parsing.html
new file mode 100644
index 0000000000..8a9ad50b93
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/font-style-parsing.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Testing the new font-style values introduced in CSS Fonts level 4</title>
+ <link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-style-prop" />
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+ <div id="test"></div>
+ <script>
+ var testFontStyle = [
+ { style: "italic", expectedResult: true, message: "'italic' is valid" },
+ { style: "italic 20deg", expectedResult: false, message: "'italic' followed by angle is invalid" },
+ { style: "italic a", expectedResult: false, message: "'italic' followed by non-number is invalid" },
+ { style: "oblique", expectedResult: true, message: "'oblique' is valid" },
+ { style: "oblique 0deg", expectedResult: true, message: "'oblique' followed by zero degrees is valid" },
+ { style: "oblique 20deg", expectedResult: true, message: "'oblique' followed by positive angle in degrees is valid" },
+ { style: "oblique 0.5rad", expectedResult: true, message: "'oblique' followed by positive angle in radians is valid", expectedValue: /^oblique 28\.64\d*deg$/ },
+ { style: "oblique 20grad", expectedResult: true, message: "'oblique' followed by positive angle in gradians is valid", expectedValue: "oblique 18deg" },
+ { style: "oblique 0.1turn", expectedResult: true, message: "'oblique' followed by positive angle in turns is valid", expectedValue: "oblique 36deg" },
+ { style: "oblique 20px", expectedResult: false, message: "'oblique' followed by number with invalid unit type is in valid" },
+ { style: "oblique -20deg", expectedResult: true, message: "'oblique' followed by negative angle is valid" },
+ { style: "oblique 20.5deg", expectedResult: true, message: "'oblique' followed by fractional angle is valid" },
+ { style: "oblique 90deg", expectedResult: true, message: "'oblique' followed by maxumum 90 degree angle is valid" },
+ { style: "oblique -90deg", expectedResult: true, message: "'oblique' followed by minimum -90 degree angle is valid" },
+ { style: "oblique 90.01deg", expectedResult: false, message: "'oblique' followed by positive out of range angle is in invalid" },
+ { style: "oblique -90.01deg", expectedResult: false, message: "'oblique' followed by negative out of range angle is in invalid" },
+ { style: "oblique 10", expectedResult: false, message: "'oblique' followed by unit-less value is invalid" },
+ { style: "oblique 30deg", expectedResult: true, message: "'oblique' followed by positive angle is valid" },
+ { style: "oblique a", expectedResult: false, message: "'oblique' followed by non-number is invalid" },
+ { style: "oblique 20deg a", expectedResult: false, message: "'oblique' and angle followed by non-number is invalid" },
+ { style: "oblique -", expectedResult: false, message: "'oblique' followed by isolated minus is invalid" },
+ { style: "oblique - 20deg", expectedResult: false, message: "'oblique' followed by minus and angle separated by space is invalid" },
+ { style: "oblique -a", expectedResult: false, message: "'oblique' followed by minus and non-number is invalid" },
+ { style: "oblique calc(50deg)", expectedResult: true, message: "'oblique' followed by calc is valid", expectedValue: "oblique 50deg" },
+ { style: "oblique calc(-120deg)", expectedResult: true, message: "'oblique' followed by calc is valid even if it must be clamped (no computation)", expectedValue: "oblique -90deg" },
+ { style: "oblique calc(6 * 20deg)", expectedResult: true, message: "'oblique' followed by calc is valid even if it must be clamped (with computation)", expectedValue: "oblique 90deg" },
+ { style: "oblique calc(10grad + 5deg)", expectedResult: true, message: "'oblique' followed by calc is valid even if it mixes units (with computation)", expectedValue: "oblique" }
+ ];
+
+ testFontStyle.forEach(function (testCase) {
+ test(() => {
+ assert_equals(window.CSS.supports("font-style", testCase.style), testCase.expectedResult, "Font-style supports: " + testCase.message);
+ }, "Font-style (supports): " + testCase.message);
+ });
+
+ testFontStyle.forEach(function (testCase) {
+ if (testCase.expectedResult) {
+ test(() => {
+ let element = document.getElementById("test");
+ element.style = "font-style: " + testCase.style;
+ let actualValue = getComputedStyle(element).fontStyle;
+ let expectedValue = testCase.expectedValue ?? testCase.style;
+ let assert_fn = expectedValue instanceof RegExp ? assert_regexp_match : assert_equals;
+ assert_fn(actualValue, expectedValue, "Font-style computed style: " + testCase.message);
+ }, "Font-style (computed): " + testCase.message);
+ }
+ });
+ </script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/font-variation-settings-inherit.html b/testing/web-platform/tests/css/css-fonts/variations/font-variation-settings-inherit.html
new file mode 100644
index 0000000000..f0d8f0b2a5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/font-variation-settings-inherit.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Testing the inheritance of the font-variation-settings property</title>
+ <link rel="help" href="https://www.w3.org/TR/css-fonts-4/#propdef-font-variation-settings" />
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+ <div id="inheritanceTestParent" style="font-variation-settings: 'xxxx' 1, 'xxxx' 2;">
+ <span id="inheritanceTestChildInherited">Abc</span>
+ <span id="inheritanceTestChildOverride" style="font-variation-settings: 'cccc' 1, 'bbbb' 2, 'aaaa' 3, 'aaaa' calc(2 + 2);">Abc</span>
+ </div>
+ <script>
+
+ // Verify computed inheritance of nested elements.
+ var elementParent = document.getElementById("inheritanceTestParent");
+ var elementChildInherited = document.getElementById("inheritanceTestChildInherited");
+ var elementChildOverride = document.getElementById("inheritanceTestChildOverride");
+
+ var parentValue = "'yyyy' 1, 'yyyy' 2";
+ elementParent.style.fontVariationSettings = parentValue;
+
+ test(() => {
+ var actualValue = window.getComputedStyle(elementParent).fontVariationSettings;
+ // The following strict test is subject to debate; softening for now:
+ // assert_equals(actualValue, "\"yyyy\" 2", "Duplicate axis tags should be removed, favoring the latter axis tag's value.");
+ assert_equals((/.*(?:"|')yyyy(?:"|') (\d)/.exec(actualValue)||[])[1], '2', "Child should override parent value.");
+ }, "Test font-variation-settings for duplicates using " + parentValue);
+
+ test(() => {
+ var actualValue = window.getComputedStyle(elementChildInherited).fontVariationSettings;
+ // The following strict test is subject to debate; softening for now:
+ // assert_equals(actualValue, "\"yyyy\" 2", "Child should inherit the parent value directly.");
+ assert_equals((/.*(?:"|')yyyy(?:"|') (\d)/.exec(actualValue)||[])[1], '2', "Child should override parent value.");
+ }, "Test font-variation-settings for child inheritance");
+
+ test(() => {
+ var actualValue = window.getComputedStyle(elementChildOverride).fontVariationSettings;
+ // The following strict test is subject to debate; softening for now:
+ // assert_equals(actualValue, "\"aaaa\" 4, \"bbbb\" 2, \"cccc\" 1", "Child should override parent value.");
+ assert_equals((/.*(?:"|')aaaa(?:"|') (\d)/.exec(actualValue)||[])[1], '4', "Child should override parent value.");
+ assert_equals((/.*(?:"|')yyyy(?:"|') (\d)/.exec(actualValue)||[])[1], undefined, "Child should override parent value.");
+ }, "Test font-variation-settings for child override");
+
+ </script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/font-weight-interpolation.html b/testing/web-platform/tests/css/css-fonts/variations/font-weight-interpolation.html
new file mode 100644
index 0000000000..745be060ab
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/font-weight-interpolation.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Testing the interpolation of new font-weight values introduced in CSS Fonts level 4</title>
+ <link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-weight-prop" />
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <style>
+ @keyframes fontWeightAnimation {
+ from { font-weight: 100; }
+ to { font-weight: 900; }
+ }
+
+ #animation-test.animate {
+ animation: fontWeightAnimation 1s infinite alternate;
+ }
+
+ #transition-test {
+ font-weight: 100;
+ transition-property: font-weight;
+ transition-duration: 10s;
+ }
+
+ #transition-test.animate {
+ font-weight: 900;
+ }
+
+ </style>
+</head>
+<body>
+ <div style="font-family: 'CSSTest Weights Full';">
+ <div id="animation-test">A</div>
+ <div id="transition-test">A</div>
+ </div>
+
+ <script>
+
+ async_test(function (test) {
+ var animationElement = document.getElementById("animation-test");
+
+ // Verify starting value
+ assert_equals(window.getComputedStyle(animationElement).fontWeight, "400", "Font weight before animation");
+
+ // Start animation
+ animationElement.classList.add("animate");
+
+ var waitForAnimationStep = test.step_func(function() {
+ var computedFontWeight = window.getComputedStyle(animationElement).fontWeight;
+ if (computedFontWeight[1] != "0" || computedFontWeight[2] != 0) { // the value should eventually not be a multiple of 100
+ test.done();
+ }
+ else {
+ window.requestAnimationFrame(waitForAnimationStep);
+ }
+ });
+ waitForAnimationStep();
+
+ }, "font-weight animation");
+
+ async_test(function (test) {
+ var transitionElement = document.getElementById("transition-test");
+
+ // Verify starting value
+ assert_equals(window.getComputedStyle(transitionElement).fontWeight, "100", "Font weight before transition");
+
+ // Start transition
+ transitionElement.classList.add("animate");
+
+ var waitForTransitionStep = test.step_func(function() {
+ var computedFontWeight = window.getComputedStyle(transitionElement).fontWeight;
+ if (computedFontWeight[1] != "0" || computedFontWeight[2] != 0) { // the value should eventually not be a multiple of 100
+ test.done();
+ }
+ else {
+ window.requestAnimationFrame(waitForTransitionStep);
+ }
+ });
+ waitForTransitionStep();
+
+ }, "font-weight transition");
+
+ </script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/font-weight-lighter-bolder.html b/testing/web-platform/tests/css/css-fonts/variations/font-weight-lighter-bolder.html
new file mode 100644
index 0000000000..68321c5075
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/font-weight-lighter-bolder.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Testing new font-weight lighter/bolder table introduced in CSS Fonts level 4</title>
+ <link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-weight-prop" />
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+
+ <div id="testcases">
+ <div class="testcase" style="font-family: 'CSSTest Weights Full';">
+ <span style="font-weight:lighter;color:red;">A</span>A<span style="font-weight:bolder;color:red;">A</span>
+ <span style="font: menu; font-size: 10px;">(default)</span>
+ </div>
+ </div>
+
+ <script>
+
+ testRelativeWeights = [
+ { baseWeight: 99, lighter: "99", bolder: "400" },
+ { baseWeight: 100, lighter: "100", bolder: "400" },
+ { baseWeight: 349, lighter: "100", bolder: "400" },
+ { baseWeight: 350, lighter: "100", bolder: "700" },
+ { baseWeight: 549, lighter: "100", bolder: "700" },
+ { baseWeight: 550, lighter: "400", bolder: "900" },
+ { baseWeight: 749, lighter: "400", bolder: "900" },
+ { baseWeight: 750, lighter: "700", bolder: "900" },
+ { baseWeight: 899, lighter: "700", bolder: "900" },
+ { baseWeight: 900, lighter: "700", bolder: "900" },
+ { baseWeight: 901, lighter: "700", bolder: "901" },
+ ];
+
+ var testcases = document.getElementById("testcases");
+ var testcase_template = testcases.firstElementChild; testcases.removeChild(testcase_template);
+ testRelativeWeights.forEach(function(element) {
+
+ var base = testcase_template.cloneNode(true);
+ base.children[2].textContent = element.baseWeight;
+ base.style.fontWeight = element.baseWeight;
+ testcases.appendChild(base);
+
+ test(() => {
+ var actualLighter = window.getComputedStyle(base.children[0]).fontWeight;
+ assert_equals(actualLighter, element.lighter, "Lighter value for " + element.baseWeight + " should match expected value.");
+ base.children[0].style.color = 'green';
+ }, "Test lighter font-weight for base weight " + element.baseWeight);
+
+ test(() => {
+ var actualBolder = window.getComputedStyle(base.children[1]).fontWeight;
+ assert_equals(actualBolder, element.bolder, "Bolder value " + element.baseWeight + " should match expected value.");
+ base.children[1].style.color = 'green';
+ }, "Test bolder font-weight for base weight " + element.baseWeight);
+ });
+
+ </script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/font-weight-matching-installed-fonts.html b/testing/web-platform/tests/css/css-fonts/variations/font-weight-matching-installed-fonts.html
new file mode 100644
index 0000000000..a290fb64fc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/font-weight-matching-installed-fonts.html
@@ -0,0 +1,114 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Testing new font-matching algorithm for font-weight values introduced in CSS Fonts level 4 (for system fonts)</title>
+ <link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-matching-algorithm" />
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <!-- THIS TEST REQUIRES THAT YOU INSTALL THE [csstest-*.ttf] FONTS OF THE [resources] FOLDER -->
+ <style>
+
+ .testcase {
+ float:left;
+ margin: 5px;
+ font-size:48pt;
+ font-feature-settings: "kern" 1;
+ color: rgba(0,0,0,0.5);
+ background: linear-gradient(to left, lime 0%, lime 91px, red 91px);
+ }
+
+ @font-face {
+ font-family: fontMatch;
+ src: local('CSSTest Weights 900');
+ font-weight: 100;
+ }
+
+ @font-face {
+ font-family: fontMatch;
+ src: local('CSSTest Weights 800');
+ font-weight: 250;
+ }
+
+ @font-face {
+ font-family: fontMatch;
+ src: local('CSSTest Weights 700');
+ font-weight: 400;
+ }
+
+ @font-face {
+ font-family: fontMatch;
+ src: local('CSSTest Weights 600');
+ font-weight: 450;
+ }
+
+ @font-face {
+ font-family: fontMatch;
+ src: local('CSSTest Weights 300');
+ font-weight: 500;
+ }
+
+ @font-face {
+ font-family: fontMatch;
+ src: local('CSSTest Weights 200');
+ font-weight: 750;
+ }
+
+ @font-face {
+ font-family: fontMatch;
+ src: local('CSSTest Weights 100');
+ font-weight: 900;
+ }
+
+ </style>
+</head>
+<body>
+
+ <span style="position: absolute; top: -100vh;">
+ <span style="font-family: fontMatch; font-weight: 100;">A</span>
+ <span style="font-family: fontMatch; font-weight: 250;">A</span>
+ <span style="font-family: fontMatch; font-weight: 400;">A</span>
+ <span style="font-family: fontMatch; font-weight: 450;">A</span>
+ <span style="font-family: fontMatch; font-weight: 500;">A</span>
+ <span style="font-family: fontMatch; font-weight: 750;">A</span>
+ <span style="font-family: fontMatch; font-weight: 900;">A</span>
+ </span>
+
+ <div id="testcases" style="overflow: hidden">
+ <!--
+ These testcases work using the new kerned CSSTest Weights fonts.
+ The letter A and its corresponding numeric digit kern as one character.
+ -->
+ <div class="testcase" style="font-family:'CSSTest Weights W2569'; font-weight: 375;">
+ A2
+ </div>
+ <div class="testcase" style="font-family:'CSSTest Weights Full'; font-weight: 375;">
+ A3
+ </div>
+ <div class="testcase" style="font-family:'CSSTest Weights W1479'; font-weight: 475;">
+ A4
+ </div>
+ <div class="testcase" style="font-family:'CSSTest Weights Full'; font-weight: 425;">
+ A5
+ </div>
+ <div class="testcase" style="font-family:'CSSTest Weights Full'; font-weight: 525;">
+ A6
+ </div>
+ <div class="testcase" style="font-family:'CSSTest Weights Full'; font-weight: 675;">
+ A7
+ </div>
+ <br clear="all">
+ </div>
+
+ <script>
+
+ var base_testcases = document.querySelectorAll('.testcase');
+ for(var i = 0; i < base_testcases.length; i++) {
+ test(
+ assert => { assert_approx_equals(base_testcases[i].getBoundingClientRect().width, 90, 2, "@font-face should be mapped to " + base_testcases[i].style.fontFamily + "."); },
+ "Test native font matching on " + base_testcases[i].style.fontFamily + " for weight " + base_testcases[i].style.fontWeight
+ );
+ }
+
+ </script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/font-weight-matching.html b/testing/web-platform/tests/css/css-fonts/variations/font-weight-matching.html
new file mode 100644
index 0000000000..5eb9a99f87
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/font-weight-matching.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Testing new font-matching algorithm for font-weight values introduced in CSS Fonts level 4</title>
+ <link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-matching-algorithm" />
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <style>
+
+ .testcase {
+ float:left;
+ margin: 5px;
+ font-size:48pt;
+ font-feature-settings: "kern" 1;
+ color: rgba(0,0,0,0.5);
+ background: linear-gradient(to left, lime 0%, lime 91px, red 91px);
+ }
+
+ @font-face {
+ font-family: fontMatch;
+ src: local('CSSTest Weights 900'), url('./resources/csstest-weights-900-kerned.ttf');
+ font-weight: 100;
+ }
+
+ @font-face {
+ font-family: fontMatch;
+ src: local('CSSTest Weights 800'), url('./resources/csstest-weights-800-kerned.ttf');
+ font-weight: 250;
+ }
+
+ @font-face {
+ font-family: fontMatch;
+ src: local('CSSTest Weights 700'), url('./resources/csstest-weights-700-kerned.ttf');
+ font-weight: 400;
+ }
+
+ @font-face {
+ font-family: fontMatch;
+ src: local('CSSTest Weights 600'), url('./resources/csstest-weights-600-kerned.ttf');
+ font-weight: 450;
+ }
+
+ @font-face {
+ font-family: fontMatch;
+ src: local('CSSTest Weights 300'), url('./resources/csstest-weights-300-kerned.ttf');
+ font-weight: 500;
+ }
+
+ @font-face {
+ font-family: fontMatch;
+ src: local('CSSTest Weights 200'), url('./resources/csstest-weights-200-kerned.ttf');
+ font-weight: 750;
+ }
+
+ @font-face {
+ font-family: fontMatch;
+ src: local('CSSTest Weights 100'), url('./resources/csstest-weights-100-kerned.ttf');
+ font-weight: 900;
+ }
+
+ </style>
+</head>
+<body>
+
+ <span style="position: absolute; top: -100vh;">
+ <span style="font-family: fontMatch; font-weight: 100;">A</span>
+ <span style="font-family: fontMatch; font-weight: 250;">A</span>
+ <span style="font-family: fontMatch; font-weight: 400;">A</span>
+ <span style="font-family: fontMatch; font-weight: 450;">A</span>
+ <span style="font-family: fontMatch; font-weight: 500;">A</span>
+ <span style="font-family: fontMatch; font-weight: 750;">A</span>
+ <span style="font-family: fontMatch; font-weight: 900;">A</span>
+ </span>
+
+ <div id="testcases" style="overflow: hidden">
+ <!--
+ These testcases work using the new kerned CSSTest Weights fonts.
+ The letter A and its corresponding numeric digit kern as one character.
+ -->
+ <div class="testcase" style="font-family:'CSSTest Weights W2569'; font-weight: 375;">
+ A2
+ </div>
+ </div>
+
+ <script>
+
+ var testFontFaceMatch = [
+ { weight: 99, expectedFont: "CSSTest Weights 900" },
+ { weight: 100, expectedFont: "CSSTest Weights 900" },
+ { weight: 249, expectedFont: "CSSTest Weights 900" },
+ { weight: 250, expectedFont: "CSSTest Weights 800" },
+ { weight: 399, expectedFont: "CSSTest Weights 800" },
+ { weight: 400, expectedFont: "CSSTest Weights 700" },
+ { weight: 420, expectedFont: "CSSTest Weights 600" },
+ { weight: 470, expectedFont: "CSSTest Weights 300" },
+ { weight: 500, expectedFont: "CSSTest Weights 300" },
+ { weight: 600, expectedFont: "CSSTest Weights 200" },
+ { weight: 750, expectedFont: "CSSTest Weights 200" },
+ { weight: 751, expectedFont: "CSSTest Weights 100" },
+ { weight: 900, expectedFont: "CSSTest Weights 100" },
+ { weight:1000, expectedFont: "CSSTest Weights 100" },
+ ];
+
+ // wait for the fonts to load
+ // -- this should not be necessary if the fonts are installed as required
+ // -- but if they are not, the test is otherwise unstable
+ var once_fonts_are_ready = (document.fonts ? document.fonts.ready : new Promise(function(ready) { window.onload = time => [...document.querySelectorAll('body > span:nth-child(1) > span')].every(e => e.offsetWidth > 20) ? ready() : requestAnimationFrame(window.onload) }));
+
+ var testcases = document.querySelector("#testcases");
+ var testcaseTemplate = document.querySelector('.testcase'); testcaseTemplate.remove();
+ testFontFaceMatch.forEach(function(element) {
+
+ var testcase = testcaseTemplate.cloneNode(true);
+
+ // setup the test case style
+ testcase.style.fontFamily = 'fontMatch';
+ testcase.style.fontWeight = element.weight;
+
+ // create the assertion
+ var assertText = 'A' + /\d/.exec(element.expectedFont)[0];
+ testcase.textContent = assertText;
+
+ // append the testcase
+ testcases.appendChild(testcase);
+
+ // verify the testcase
+ promise_test(
+ assert => once_fonts_are_ready.then(assert => { assert_approx_equals(testcase.getBoundingClientRect().width, 90, 2, "@font-face should be mapped to " + element.expectedFont + "."); }),
+ "Test @font-face matching for weight " + element.weight
+ );
+ });
+
+ </script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/font-weight-metrics-ref.html b/testing/web-platform/tests/css/css-fonts/variations/font-weight-metrics-ref.html
new file mode 100644
index 0000000000..021586c154
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/font-weight-metrics-ref.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+<title>CSS Fonts - reference</title>
+<link rel="author" title="Jonathan Kew" href="jkew@mozilla.com">
+<meta charset="utf-8">
+
+<style>
+@font-face {
+ font-family: test;
+ font-weight: 900;
+ src: url(resources/Inter.var.subset.ttf);
+}
+div {
+ font: 32px test;
+ position: absolute;
+ margin: 1em;
+}
+.heavy {
+ background: green;
+ color: green;
+ font-weight: 900;
+}
+</style>
+
+Test passes if there is a green rectangle and <strong>no red</strong>:
+
+<div class=heavy>
+aaaaaaaaaaaaaaaaaaaaaaaaaaaa
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/font-weight-metrics.html b/testing/web-platform/tests/css/css-fonts/variations/font-weight-metrics.html
new file mode 100644
index 0000000000..f10e591def
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/font-weight-metrics.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html>
+<title>CSS Fonts - Test that variable-font glyph advances depend on applied weight</title>
+<link rel="author" title="Jonathan Kew" href="jkew@mozilla.com">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-weight-prop"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-prop-desc"/>
+<link rel="match" href="font-weight-metrics-ref.html">
+<meta name="assert" content="Ensures that glyph advances are adjusted appropriately when the weight axis is varied."/>
+<meta charset="utf-8">
+
+<style>
+@font-face {
+ font-family: test;
+ font-weight: 100 900;
+ src: url(resources/Inter.var.subset.ttf);
+}
+div {
+ font: 32px test;
+ position: absolute;
+ margin: 1em;
+}
+.light {
+ background: red;
+ color: red;
+ font-weight: 100;
+}
+.heavy {
+ background: green;
+ color: green;
+ font-weight: 900;
+}
+</style>
+
+Test passes if there is a green rectangle and <strong>no red</strong>:
+
+<!-- Red background that should be entirely covered by the div with the heavy face -->
+<div class=light>
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+</div>
+
+<!-- The string here is two characters shorter, but the advance width of the heavy
+ glyphs should be large enough that the light div is still completely covered. -->
+<div class=heavy>
+aaaaaaaaaaaaaaaaaaaaaaaaaaaa
+</div>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/font-weight-parsing.html b/testing/web-platform/tests/css/css-fonts/variations/font-weight-parsing.html
new file mode 100644
index 0000000000..657616cd29
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/font-weight-parsing.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Testing the new font-weight values introduced in CSS Fonts level 4</title>
+ <link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-weight-prop" />
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+
+ <div id="computedStyleTest">A</div>
+
+ <script>
+
+ var testContinuousWeights = [
+ { weight: "401", isValid: true, message: "Values that are not multiple of 100 should be parsed successfully" },
+ { weight: "400.5", isValid: true, message: "Non-integer Values should be parsed successfully" },
+ { weight: "1", isValid: true, message: "Minimum allowed value should be parsed successfully" },
+ { weight: "0.999", isValid: false, message: "Values below minimum should be rejected" },
+ { weight: "-100", isValid: false, message: "Values below zero should be rejected" },
+ { weight: "1000", isValid: true, message: "Maximum allowed value should be parsed successfully" },
+ { weight: "1000.001", isValid: false, message: "Values above maximum should be rejected" },
+ { weight: "calc(100.5)", isValid: true, expectedWeight: "100.5", message: "Simple calc value" },
+ { weight: "calc(-100)", isValid: true, expectedWeight: "1", message: "Negative simple calc value (to be clamped)" },
+ { weight: "calc(1001)", isValid: true, expectedWeight: "1000", message: "Out-of-range simple calc value (to be clamped)" },
+ { weight: "calc(100.5*3 + 50.5)", isValid: true, expectedWeight: "352", message: "Valid calc expression" },
+ { weight: "calc(100.5*3 + 800)", isValid: true, expectedWeight: "1000", message: "Valid calc expression with out-of-range value (to be clamped)" },
+ { weight: "calc(100.5px + 50.5px)", isValid: false, message: "Valid calc expression with units" },
+ { weight: "400 700", isValid: false, message: "Extra number after numeric value" },
+ { weight: "400 10px", isValid: false, message: "Extra content after numeric value" },
+ { weight: "bold 400", isValid: false, message: "Extra content after keyword value" },
+ { weight: "calc(100.5) 400", isValid: false, message: "Extra content after calc value" }
+ ];
+
+ testContinuousWeights.forEach(function (element) {
+ test(() => { assert_equals(window.CSS.supports("font-weight", element.weight), element.isValid, element.message); }, "@supports: " + element.message);
+ });
+
+ testContinuousWeights.forEach(function (element) {
+ var testElement = document.getElementById("computedStyleTest");
+
+ if (element.isValid) {
+ testElement.style.fontWeight = "300";
+ testElement.style.fontWeight = element.weight;
+ var expectedWeight = (element.expectedWeight) ? element.expectedWeight : element.weight;
+
+ test(() => { assert_equals(window.getComputedStyle(testElement).fontWeight, expectedWeight, element.message); }, "Computed style: " + element.message);
+ }
+ });
+
+ </script>
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/FontStyleTest-slnt-VF.woff2 b/testing/web-platform/tests/css/css-fonts/variations/resources/FontStyleTest-slnt-VF.woff2
new file mode 100644
index 0000000000..c4d365e88e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/FontStyleTest-slnt-VF.woff2
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/FontStyleTest-slnt_backslant-VF.woff2 b/testing/web-platform/tests/css/css-fonts/variations/resources/FontStyleTest-slnt_backslant-VF.woff2
new file mode 100644
index 0000000000..ea542eb06f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/FontStyleTest-slnt_backslant-VF.woff2
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/Inter.no-var.subset.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/Inter.no-var.subset.ttf
new file mode 100644
index 0000000000..3f9669541a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/Inter.no-var.subset.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/Inter.var.subset.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/Inter.var.subset.ttf
new file mode 100644
index 0000000000..d042cabef1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/Inter.var.subset.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/ahem.ttc b/testing/web-platform/tests/css/css-fonts/variations/resources/ahem.ttc
new file mode 100644
index 0000000000..096dd600a3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/ahem.ttc
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-100-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-100-kerned.ttf
new file mode 100644
index 0000000000..33553bc3d0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-100-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-1479-w1-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-1479-w1-kerned.ttf
new file mode 100644
index 0000000000..d3add1934c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-1479-w1-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-1479-w4-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-1479-w4-kerned.ttf
new file mode 100644
index 0000000000..813e5da8f2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-1479-w4-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-1479-w7-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-1479-w7-kerned.ttf
new file mode 100644
index 0000000000..a446f23f58
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-1479-w7-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-1479-w9-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-1479-w9-kerned.ttf
new file mode 100644
index 0000000000..4eb89ad399
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-1479-w9-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-15-w1-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-15-w1-kerned.ttf
new file mode 100644
index 0000000000..78b0f9e5c3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-15-w1-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-15-w5-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-15-w5-kerned.ttf
new file mode 100644
index 0000000000..ffbb5daa1f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-15-w5-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-200-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-200-kerned.ttf
new file mode 100644
index 0000000000..9713a7de45
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-200-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-24-w2-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-24-w2-kerned.ttf
new file mode 100644
index 0000000000..838d54ae91
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-24-w2-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-24-w4-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-24-w4-kerned.ttf
new file mode 100644
index 0000000000..70bb0529f1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-24-w4-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-2569-w2-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-2569-w2-kerned.ttf
new file mode 100644
index 0000000000..0af6a94c3b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-2569-w2-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-2569-w5-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-2569-w5-kerned.ttf
new file mode 100644
index 0000000000..7ffd46fae1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-2569-w5-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-2569-w6-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-2569-w6-kerned.ttf
new file mode 100644
index 0000000000..62c61c6c3f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-2569-w6-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-2569-w9-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-2569-w9-kerned.ttf
new file mode 100644
index 0000000000..dd4fdc0549
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-2569-w9-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-258-w2-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-258-w2-kerned.ttf
new file mode 100644
index 0000000000..8a8a09568b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-258-w2-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-258-w5-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-258-w5-kerned.ttf
new file mode 100644
index 0000000000..e7597aadef
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-258-w5-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-258-w8-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-258-w8-kerned.ttf
new file mode 100644
index 0000000000..dd274d2d69
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-258-w8-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-300-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-300-kerned.ttf
new file mode 100644
index 0000000000..7668bc70ac
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-300-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-3589-w3-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-3589-w3-kerned.ttf
new file mode 100644
index 0000000000..409bbb5fc7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-3589-w3-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-3589-w5-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-3589-w5-kerned.ttf
new file mode 100644
index 0000000000..639cf41a17
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-3589-w5-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-3589-w8-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-3589-w8-kerned.ttf
new file mode 100644
index 0000000000..e5c85c6348
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-3589-w8-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-3589-w9-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-3589-w9-kerned.ttf
new file mode 100644
index 0000000000..25e46520f0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-3589-w9-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-400-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-400-kerned.ttf
new file mode 100644
index 0000000000..3046e3c634
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-400-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-47-w4-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-47-w4-kerned.ttf
new file mode 100644
index 0000000000..9d95fd95ef
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-47-w4-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-47-w7-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-47-w7-kerned.ttf
new file mode 100644
index 0000000000..796f4d56ad
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-47-w7-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-500-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-500-kerned.ttf
new file mode 100644
index 0000000000..d8d136d5d2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-500-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-600-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-600-kerned.ttf
new file mode 100644
index 0000000000..ce7307e9aa
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-600-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-700-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-700-kerned.ttf
new file mode 100644
index 0000000000..a80d8688d7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-700-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-800-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-800-kerned.ttf
new file mode 100644
index 0000000000..1fb2730be7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-800-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-900-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-900-kerned.ttf
new file mode 100644
index 0000000000..faf4bbcf2e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-900-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w1-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w1-kerned.ttf
new file mode 100644
index 0000000000..8b4fc0ddc7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w1-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w2-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w2-kerned.ttf
new file mode 100644
index 0000000000..112683da20
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w2-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w3-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w3-kerned.ttf
new file mode 100644
index 0000000000..d0ffa58d98
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w3-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w4-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w4-kerned.ttf
new file mode 100644
index 0000000000..faab448951
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w4-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w5-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w5-kerned.ttf
new file mode 100644
index 0000000000..df6e7909ae
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w5-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w6-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w6-kerned.ttf
new file mode 100644
index 0000000000..9d4819220e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w6-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w7-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w7-kerned.ttf
new file mode 100644
index 0000000000..a358362db5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w7-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w8-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w8-kerned.ttf
new file mode 100644
index 0000000000..458e401df8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w8-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w9-kerned.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w9-kerned.ttf
new file mode 100644
index 0000000000..006a280997
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/csstest-weights-full-w9-kerned.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/resources/variabletest_box.ttf b/testing/web-platform/tests/css/css-fonts/variations/resources/variabletest_box.ttf
new file mode 100644
index 0000000000..0d5bf3e267
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/resources/variabletest_box.ttf
Binary files differ
diff --git a/testing/web-platform/tests/css/css-fonts/variations/slnt-backslant-variable-ref.html b/testing/web-platform/tests/css/css-fonts/variations/slnt-backslant-variable-ref.html
new file mode 100644
index 0000000000..bbb18ebbaf
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/slnt-backslant-variable-ref.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8" />
+<title>CSS Test: Variable fonts with slant axis</title>
+<style>
+ @font-face {
+ font-family: "slnt test font";
+ src: url('resources/FontStyleTest-slnt_backslant-VF.woff2');
+ font-style: oblique -15deg 15deg;
+ }
+
+ .test {
+ font-family: "slnt test font";
+ font-size: 3em;
+ }
+
+ .slnt14 {
+ font-variation-settings: 'slnt' -14;
+ }
+
+ .backslant14 {
+ font-variation-settings: 'slnt' 14;
+ }
+
+</style>
+
+<p class="test backslant14">varfont</p>
+<p class="test slnt14">varfont</p>
+<p class="test slnt14">varfont</p>
+<p class="test">varfont</p>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/slnt-backslant-variable.html b/testing/web-platform/tests/css/css-fonts/variations/slnt-backslant-variable.html
new file mode 100644
index 0000000000..36a4305da7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/slnt-backslant-variable.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8" />
+<title>CSS Test: Variable fonts with slant axis</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#descdef-font-face-font-variation-settings" />
+<link rel="help" href="http://drafts.csswg.org/css-fonts-4/#valdef-font-style-oblique-angle-90deg-90deg" />
+<link rel="match" href="slnt-backslant-variable-ref.html">
+<meta name="assert"
+ content="For variable fonts, setting font-style to oblique or italic should apply forward and backward slant to variable axis.">
+<!-- Fonts used in this test are authored by Stephen Nixon, more information in the link:
+https://arrowtype.github.io/vf-slnt-test/index.html -->
+<style>
+ @font-face {
+ font-family: "slnt test font";
+ src: url('resources/FontStyleTest-slnt_backslant-VF.woff2');
+ font-style: oblique -15deg 15deg;
+ }
+
+ .test {
+ font-family: "slnt test font";
+ font-size: 3em;
+ }
+
+ .backslant {
+ font-style: oblique -14deg;
+ }
+
+ .oblique {
+ font-style: oblique;
+ }
+
+ .italic {
+ font-style: italic;
+ }
+
+</style>
+
+<p class="test backslant">varfont</p>
+<p class="test oblique">varfont</p>
+<p class="test italic">varfont</p>
+<p class="test">varfont</p>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/slnt-variable-ref.html b/testing/web-platform/tests/css/css-fonts/variations/slnt-variable-ref.html
new file mode 100644
index 0000000000..75a237c6b2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/slnt-variable-ref.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8" />
+<title>CSS Test: Variable fonts with slant axis</title>
+<style>
+ @font-face {
+ font-family: "slnt test font";
+ src: url('resources/FontStyleTest-slnt-VF.woff2');
+ font-style: oblique 0deg 15deg;
+ }
+
+ .test {
+ font-family: "slnt test font";
+ font-size: 3em;
+ }
+
+ .slnt14 {
+ font-variation-settings: 'slnt' -14;
+ }
+
+</style>
+
+<p class="test slnt14">varfont</p>
+<p class="test slnt14">varfont</p>
+<p class="test">varfont</p>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/slnt-variable.html b/testing/web-platform/tests/css/css-fonts/variations/slnt-variable.html
new file mode 100644
index 0000000000..ae93703794
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/slnt-variable.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8" />
+<title>CSS Test: Variable fonts with slant axis</title>
+<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#descdef-font-face-font-variation-settings" />
+<link rel="help" href="http://drafts.csswg.org/css-fonts-4/#valdef-font-style-oblique-angle-90deg-90deg" />
+<link rel="match" href="slnt-variable-ref.html">
+<meta name="assert"
+ content="For variable fonts, 'oblique' and 'italic' keywords should work equivalent to 14 degrees of slant">
+<!-- Fonts used in this test are authored by Stephen Nixon, more information in the link:
+https://arrowtype.github.io/vf-slnt-test/index.html -->
+<style>
+ @font-face {
+ font-family: "slnt test font";
+ src: url('resources/FontStyleTest-slnt-VF.woff2');
+ font-style: oblique 0deg 15deg;
+ }
+
+ .test {
+ font-family: "slnt test font";
+ font-size: 3em;
+ }
+
+ .oblique {
+ font-style: oblique;
+ }
+
+ .italic {
+ font-style: italic;
+ }
+
+</style>
+
+<p class="test oblique">varfont</p>
+<p class="test italic">varfont</p>
+<p class="test">varfont</p>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/variable-box-font-ref.html b/testing/web-platform/tests/css/css-fonts/variations/variable-box-font-ref.html
new file mode 100644
index 0000000000..142b0aa46b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/variable-box-font-ref.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<meta charset="utf-8">
+<style>
+ @font-face {
+ font-family: variabletest_box;
+ src: url(resources/variabletest_box.ttf);
+ }
+
+ body {
+ font-family: variabletest_box, sans-serif;
+ font-size: 200px;
+ }
+</style>
+▄ ▀
+<script>
+ document.fonts.ready.then(
+ () => { document.documentElement.classList.remove("reftest-wait"); });
+</script>
+
diff --git a/testing/web-platform/tests/css/css-fonts/variations/variable-box-font.html b/testing/web-platform/tests/css/css-fonts/variations/variable-box-font.html
new file mode 100644
index 0000000000..a9023fabe5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/variable-box-font.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="variable-box-font-ref.html">
+<meta charset="utf-8">
+<style>
+ @font-face {
+ font-family: variabletest_box;
+ src: url(resources/variabletest_box.ttf);
+ }
+
+ body {
+ font-family: variabletest_box,
+ sans-serif;
+ font-size: 200px;
+ }
+
+ .a_up {
+ font-variation-settings: "UPWD" 350;
+ }
+</style>
+<!-- The variabletest_box font has an A glyph that looks like a lower half box,
+ with deltas on the 'UPWD' variation axis that allow shifting the box up. At
+ 350, the box is at the top. The font also has two glyphs for UPPER HALF BLOCK
+ and LOWER HALF BLOCK, which look identical to the respective variations of A.
+-->
+A <span class="a_up">A</span>
+<script>
+ document.fonts.ready.then(
+ () => { document.documentElement.classList.remove("reftest-wait"); });
+</script>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/variable-gpos-m2b-ref.html b/testing/web-platform/tests/css/css-fonts/variations/variable-gpos-m2b-ref.html
new file mode 100644
index 0000000000..c6b80b1b11
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/variable-gpos-m2b-ref.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<meta charset="utf-8">
+<style>
+ @font-face {
+ font-family: variabletest_box;
+ src: url(resources/variabletest_box.ttf);
+ }
+
+ body {
+ font-family: variabletest_box, sans-serif;
+ sans-serif;
+ font-size: 100px;
+ }
+</style>
+M&#x033B; N&#x033B; O&#x033B;
+<script>
+ document.fonts.ready.then(
+ () => { document.documentElement.classList.remove("reftest-wait"); });
+</script>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/variable-gpos-m2b.html b/testing/web-platform/tests/css/css-fonts/variations/variable-gpos-m2b.html
new file mode 100644
index 0000000000..c39cce33a6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/variable-gpos-m2b.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="variable-gpos-m2b-ref.html">
+<meta charset="utf-8">
+<style>
+ @font-face {
+ font-family: variabletest_box;
+ src: url(resources/variabletest_box.ttf);
+ }
+
+ body {
+ font-family: variabletest_box, sans-serif;
+ sans-serif;
+ font-size: 100px;
+ }
+
+ .gpos_m2b_left {
+ font-variation-settings: "VM2B" 0;
+ }
+
+ .gpos_m2b_middle {
+ font-variation-settings: "VM2B" 500;
+ }
+
+ .gpos_m2b_right {
+ font-variation-settings: "VM2B" 1000;
+ }
+</style>
+<!-- The variabletest_box font has an M glyph saying "m2b pos" that combines
+ with the combining box below. And it has a glyph for combining box below
+ whose mark anchor can be shifted horizontally using the VM2B axis. The font
+ also has N and O glyphs which have fixed shifted base anchor points at the
+ middle and at the right position. In this reftest we check whether
+ applying the VM2B axis works as expected and shifts the mark anchor point
+ left so that the combining mark is placed correctly at the middle and at
+ the right position. The VM2B rendering must be identical to the
+ conventional rendering with the fixed base anchor points. -->
+<span class="gpos_m2b_left">M&#x033B;</span>
+<span class="gpos_m2b_middle">M&#x033B;</span>
+<span class="gpos_m2b_right">M&#x033B;</span>
+<script>
+ document.fonts.ready.then(
+ () => { document.documentElement.classList.remove("reftest-wait"); });
+</script>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/variable-gsub-ref.html b/testing/web-platform/tests/css/css-fonts/variations/variable-gsub-ref.html
new file mode 100644
index 0000000000..3b1f7f435c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/variable-gsub-ref.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<meta charset="utf-8">
+<style>
+ @font-face {
+ font-family: variabletest_box;
+ src: url(resources/variabletest_box.ttf);
+ }
+
+ body {
+ font-family: variabletest_box, sans-serif;
+ sans-serif;
+ font-size: 100px;
+ }
+</style>
+r R
+<script>
+ document.fonts.ready.then(
+ () => { document.documentElement.classList.remove("reftest-wait"); });
+</script>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/variable-gsub.html b/testing/web-platform/tests/css/css-fonts/variations/variable-gsub.html
new file mode 100644
index 0000000000..ed432f65eb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/variable-gsub.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="variable-gsub-ref.html">
+<meta charset="utf-8">
+<style>
+ @font-face {
+ font-family: variabletest_box;
+ src: url(resources/variabletest_box.ttf);
+ }
+
+ body {
+ font-family: variabletest_box, sans-serif;
+ sans-serif;
+ font-size: 100px;
+ }
+
+ .rvrn_replaced {
+ font-variation-settings: "FVTT" 10;
+ }
+</style>
+<!-- The variabletest_box font has an r glyph that says "rvrn base" and has
+ this as a name as well. And it has a glyph for R that says "rvrn subst"
+ where rvrn stands for the required Required Variation Alternates
+ feature. The font has an 'FVTT' axis ranging from 0 to 10, where it uses
+ a single substitution glyph lookup table for axis values starting from
+ 5, which then replaces the rvrn_base glyph with the rvrn_subst
+ glyph. So in this reftest the substituted glyph for lowercase r
+ should visually match the uppercase R glyph, both show "rvrn subst". -->
+r <span class="rvrn_replaced">r</span>
+<script>
+ document.fonts.ready.then(
+ () => { document.documentElement.classList.remove("reftest-wait"); });
+</script>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/variable-opsz-ref.html b/testing/web-platform/tests/css/css-fonts/variations/variable-opsz-ref.html
new file mode 100644
index 0000000000..24080345ba
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/variable-opsz-ref.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<meta charset="utf-8">
+<style>
+ @font-face {
+ font-family: variabletest_box;
+ src: url(resources/variabletest_box.ttf);
+ }
+
+ body {
+ font-family: variabletest_box, sans-serif;
+ font-optical-sizing: none;
+ }
+</style>
+<div style="font-size: 6px; font-variation-settings: 'opsz' 6;">B</div>
+<div style="font-size: 12px; font-variation-settings: 'opsz' 12;">B</div>
+<div style="font-size: 24px; font-variation-settings: 'opsz' 24;">B</div>
+<div style="font-size: 48px; font-variation-settings: 'opsz' 48;">B</div>
+<div style="font-size: 64px; font-variation-settings: 'opsz' 64;">B</div>
+<div style="font-size: 128px; font-variation-settings: 'opsz' 128;">B</div>
+<div style="font-size: 24px; font-variation-settings: 'opsz' 128;">B</div>
+<div style="font-size: 48px; font-variation-settings: 'opsz' 12;">B</div>
+<script>
+ document.fonts.ready.then(
+ () => { document.documentElement.classList.remove("reftest-wait"); });
+</script>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/variable-opsz-size-adjust-ref.html b/testing/web-platform/tests/css/css-fonts/variations/variable-opsz-size-adjust-ref.html
new file mode 100644
index 0000000000..4e88cace35
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/variable-opsz-size-adjust-ref.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<meta charset="utf-8">
+<style>
+ @font-face {
+ font-family: variabletest_box;
+ src: url(resources/variabletest_box.ttf);
+ }
+
+ body {
+ font-family: variabletest_box, sans-serif;
+ font-optical-sizing: none;
+ }
+
+ div {
+ line-height: 64px;
+ }
+
+</style>
+<div style="font-size: 9px; font-variation-settings: 'opsz' 9;">B</div>
+<div style="font-size: 18px; font-variation-settings: 'opsz' 18;">B</div>
+<div style="font-size: 36px; font-variation-settings: 'opsz' 36;">B</div>
+<div style="font-size: 72px; font-variation-settings: 'opsz' 72;">B</div>
+<div style="font-size: 96px; font-variation-settings: 'opsz' 96;">B</div>
+<div style="font-size: 36px; font-variation-settings: 'opsz' 128;">B</div>
+<div style="font-size: 72px; font-variation-settings: 'opsz' 12;">B</div>
+<script>
+ document.fonts.ready.then(
+ () => { document.documentElement.classList.remove("reftest-wait"); });
+</script>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/variable-opsz-size-adjust.html b/testing/web-platform/tests/css/css-fonts/variations/variable-opsz-size-adjust.html
new file mode 100644
index 0000000000..b673f3cb7b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/variable-opsz-size-adjust.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="author" title="Dominik Röttsches" href="drott@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-optical-sizing-def"/>
+<link rel="help" href="https://drafts.csswg.org/css-fonts-5/#size-adjust-desc"/>
+<meta name="assert" content="Ensures that optical size is adjusted with size-adjust to displayed font size."/>
+<link rel="match" href="variable-opsz-size-adjust-ref.html">
+<meta charset="utf-8">
+<style>
+ @font-face {
+ font-family: variabletest_box;
+ src: url(resources/variabletest_box.ttf);
+ size-adjust: 150%;
+ }
+
+ body {
+ font-family: variabletest_box, sans-serif;
+ }
+
+ div {
+ line-height: 64px;
+ }
+</style>
+<!-- The variabletest_box font file contains a glyph for letter B which moves a
+ horizontal bar up from the middle for opsz > 12 and moves it down for opsz <
+ 12 where the opsz axis ranges from 6 to 128. -->
+<div style="font-size: 6px;">B</div>
+<div style="font-size: 12px;">B</div>
+<div style="font-size: 24px;">B</div>
+<div style="font-size: 48px;">B</div>
+<div style="font-size: 64px;">B</div>
+<!-- Explicit value overrides auto. -->
+<div style="font-size: 24px; font-variation-settings: 'opsz' 128;">B</div>
+<div style="font-size: 48px; font-optical-sizing: none;">B</div>
+<script>
+ document.fonts.ready.then(
+ () => { document.documentElement.classList.remove("reftest-wait"); });
+</script>
+</html>
diff --git a/testing/web-platform/tests/css/css-fonts/variations/variable-opsz.html b/testing/web-platform/tests/css/css-fonts/variations/variable-opsz.html
new file mode 100644
index 0000000000..d274a47828
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/variable-opsz.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="author" title="Dominik Röttsches" href="drott@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-optical-sizing-def"/>
+<meta name="assert" content="Ensures that optical size is automatically applied."/>
+<link rel="match" href="variable-opsz-ref.html">
+<meta charset="utf-8">
+<style>
+ @font-face {
+ font-family: variabletest_box;
+ src: url(resources/variabletest_box.ttf);
+ }
+
+ body {
+ font-family: variabletest_box, sans-serif;
+ }
+</style>
+<!-- The variabletest_box font file contains a glyph for letter B which moves a
+ horizontal bar up from the middle for opsz > 12 and moves it down for opsz >
+ 12 where the opsz axis ranges from 12 to 128. -->
+<div style="font-size: 6px;">B</div>
+<div style="font-size: 12px;">B</div>
+<div style="font-size: 24px;">B</div>
+<div style="font-size: 48px;">B</div>
+<div style="font-size: 64px;">B</div>
+<div style="font-size: 128px;">B</div>
+<!-- Explicit value overrides auto. -->
+<div style="font-size: 24px; font-variation-settings: 'opsz' 128;">B</div>
+<div style="font-size: 48px; font-optical-sizing: none;">B</div>
+<script>
+ document.fonts.ready.then(
+ () => { document.documentElement.classList.remove("reftest-wait"); });
+</script>
+</html>