Update web-platform-tests to revision 2b80e6d28f3c1ca734384ebded282bf07df80657

This commit is contained in:
WPT Sync Bot 2019-10-18 10:32:38 +00:00
parent 32eb858a6a
commit aff72973cf
379 changed files with 13969 additions and 2161 deletions

File diff suppressed because it is too large Load diff

View file

@ -2,12 +2,12 @@
[#container 1]
expected: FAIL
[[data-expected-height\] 1]
expected: FAIL
[[data-expected-height\] 2]
expected: FAIL
[[data-expected-height\] 7]
expected: FAIL
[[data-expected-height\] 3]
expected: FAIL
[[data-expected-height\] 4]
expected: FAIL

View file

@ -0,0 +1,2 @@
[eol-spaces-bidi-001.html]
expected: FAIL

View file

@ -2,3 +2,15 @@
[<li>Outside 1</li>]
expected: FAIL
[<li>Image Outside 2</li>]
expected: FAIL
[<li>Outside 2</li>]
expected: FAIL
[<li>Image Outside 1</li>]
expected: FAIL
[<li>Outside 3</li>]
expected: FAIL

View file

@ -0,0 +1,2 @@
[matchMedia-display-none-iframe.html]
expected: ERROR

View file

@ -8,3 +8,6 @@
[throws if handleEvent is thruthy and not callable]
expected: FAIL
[doesn't look up handleEvent method on callable event listeners]
expected: FAIL

View file

@ -324,9 +324,9 @@
[<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
expected: FAIL

View file

@ -56,6 +56,6 @@
[separate text/javascript x/x]
expected: FAIL
[separate text/javascript;charset=windows-1252 error text/javascript]
[separate text/javascript;charset=windows-1252 text/javascript]
expected: FAIL

View file

@ -9,3 +9,21 @@
[Same-Origin embed]
expected: TIMEOUT
[Wrapper: Navigate to cross-site embed]
expected: NOTRUN
[Wrapper: cross-site embed]
expected: NOTRUN
[Wrapper: same-site embed]
expected: NOTRUN
[Wrapper: Navigate to same-origin embed]
expected: NOTRUN
[Wrapper: Navigate to same-site embed]
expected: NOTRUN
[Wrapper: same-origin embed]
expected: TIMEOUT

View file

@ -0,0 +1,4 @@
[appcache.tentative.https.sub.html]
[Appcache!]
expected: FAIL

View file

@ -0,0 +1,11 @@
[embed.tentative.https.sub.html]
expected: TIMEOUT
[Cross-Site embed]
expected: NOTRUN
[Same-Site embed]
expected: NOTRUN
[Same-Origin embed]
expected: TIMEOUT

View file

@ -0,0 +1,7 @@
[fetch-preflight.tentative.https.sub.html]
[Same-site fetch with preflight]
expected: FAIL
[Cross-site fetch with preflight]
expected: FAIL

View file

@ -0,0 +1,4 @@
[fetch-via-serviceworker--fallback.tentative.https.sub.html]
[Sec-Fetch headers after SW fallback]
expected: FAIL

View file

@ -0,0 +1,4 @@
[fetch-via-serviceworker--respondWith.tentative.https.sub.html]
[Sec-Fetch headers after SW fallback]
expected: FAIL

View file

@ -0,0 +1,19 @@
[fetch.tentative.https.sub.html]
[Same-origin fetch]
expected: FAIL
[Same-origin mode]
expected: FAIL
[Cross-site fetch]
expected: FAIL
[Same-site fetch]
expected: FAIL
[no-CORS mode]
expected: FAIL
[CORS mode]
expected: FAIL

View file

@ -0,0 +1,4 @@
[fetch.tentative.sub.html]
[http->https fetch (cross-scheme => cross-site)]
expected: FAIL

View file

@ -0,0 +1,4 @@
[font.tentative.https.sub.html]
[font]
expected: FAIL

View file

@ -0,0 +1,14 @@
[frame.tentative.sub.html]
expected: TIMEOUT
[Secure, cross-site (cross-scheme, same-host) frame]
expected: TIMEOUT
[Non-secure cross-site iframe => No headers.]
expected: TIMEOUT
[Non-secure same-site iframe => No headers]
expected: TIMEOUT
[Non-secure same-origin iframe => No headers]
expected: TIMEOUT

View file

@ -0,0 +1,10 @@
[history.tentative.https.sub.html]
[back to same-origin-initiated navigation]
expected: FAIL
[back to same-site-initiated navigation]
expected: FAIL
[back to cross-site-initiated navigation]
expected: FAIL

View file

@ -0,0 +1,4 @@
[iframe.tentative.sub.html]
[Secure, cross-site (cross-scheme, same-host) iframe]
expected: FAIL

View file

@ -0,0 +1,10 @@
[img.tentative.https.sub.html]
[Cross-site image]
expected: FAIL
[Same-origin image]
expected: FAIL
[Same-site image]
expected: FAIL

View file

@ -0,0 +1,2 @@
[navigation.https.sub.html]
expected: TIMEOUT

View file

@ -0,0 +1,11 @@
[object.tentative.https.sub.html]
expected: TIMEOUT
[Same-Origin object]
expected: TIMEOUT
[Cross-Site object]
expected: NOTRUN
[Same-Site object]
expected: NOTRUN

View file

@ -0,0 +1,14 @@
[prefetch.tentative.https.sub.html]
expected: TIMEOUT
[<link rel='prefetch' href='https://www.web-platform.test:8443/...'>]
expected: TIMEOUT
[<link rel='prefetch' href='https://www.not-web-platform.test:8443/...'>]
expected: TIMEOUT
[<link rel='prefetch' href='https://web-platform.test:8443/...'>]
expected: TIMEOUT
[Browser supports prefetch.]
expected: FAIL

View file

@ -0,0 +1,59 @@
[preload.tentative.https.sub.html]
expected: TIMEOUT
[<link rel='preload' as='fetch' href='https://web-platform.test:8443/...'>]
expected: TIMEOUT
[<link rel='preload' as='script' href='https://www.web-platform.test:8443/...'>]
expected: TIMEOUT
[<link rel='preload' as='font' href='https://www.not-web-platform.test:8443/...'>]
expected: TIMEOUT
[<link rel='preload' as='script' href='https://www.not-web-platform.test:8443/...'>]
expected: TIMEOUT
[<link rel='preload' as='track' href='https://www.not-web-platform.test:8443/...'>]
expected: TIMEOUT
[<link rel='preload' as='image' href='https://web-platform.test:8443/...'>]
expected: TIMEOUT
[<link rel='preload' as='image' href='https://www.not-web-platform.test:8443/...'>]
expected: TIMEOUT
[<link rel='preload' as='track' href='https://web-platform.test:8443/...'>]
expected: TIMEOUT
[Browser supports preload.]
expected: FAIL
[<link rel='preload' as='fetch' href='https://www.not-web-platform.test:8443/...'>]
expected: TIMEOUT
[<link rel='preload' as='style' href='https://www.web-platform.test:8443/...'>]
expected: TIMEOUT
[<link rel='preload' as='font' href='https://web-platform.test:8443/...'>]
expected: TIMEOUT
[<link rel='preload' as='fetch' href='https://www.web-platform.test:8443/...'>]
expected: TIMEOUT
[<link rel='preload' as='image' href='https://www.web-platform.test:8443/...'>]
expected: TIMEOUT
[<link rel='preload' as='font' href='https://www.web-platform.test:8443/...'>]
expected: TIMEOUT
[<link rel='preload' as='style' href='https://www.not-web-platform.test:8443/...'>]
expected: TIMEOUT
[<link rel='preload' as='script' href='https://web-platform.test:8443/...'>]
expected: TIMEOUT
[<link rel='preload' as='track' href='https://www.web-platform.test:8443/...'>]
expected: TIMEOUT
[<link rel='preload' as='style' href='https://web-platform.test:8443/...'>]
expected: TIMEOUT

View file

@ -0,0 +1,10 @@
[cross-site-redirect.tentative.https.sub.html]
[Cross-Site -> Cross-Site redirect]
expected: FAIL
[Cross-Site -> Same-Site redirect]
expected: FAIL
[Cross-Site -> Same-Origin redirect]
expected: FAIL

View file

@ -0,0 +1,4 @@
[multiple-redirect-cross-site.tentative.https.sub.html]
[Same-Origin -> Cross-Site -> Same-Origin redirect]
expected: FAIL

View file

@ -0,0 +1,4 @@
[multiple-redirect-https-downgrade-upgrade.tentative.sub.html]
[multiple-redirect-https-downgrade-upgrade]
expected: FAIL

View file

@ -0,0 +1,4 @@
[multiple-redirect-same-site.tentative.https.sub.html]
[Same-Origin -> Same-Site -> Same-Origin redirect]
expected: FAIL

View file

@ -0,0 +1,4 @@
[redirect-http-upgrade.tentative.sub.html]
[redirect-http-upgrade]
expected: FAIL

View file

@ -0,0 +1,4 @@
[redirect-https-downgrade.tentative.sub.html]
[redirect-https-downgrade]
expected: FAIL

View file

@ -0,0 +1,10 @@
[same-origin-redirect.tentative.https.sub.html]
[Same-Origin -> Cross-Site redirect]
expected: FAIL
[Same-Origin -> Same-Site redirect]
expected: FAIL
[Same-Origin -> Same-Origin redirect]
expected: FAIL

View file

@ -0,0 +1,10 @@
[same-site-redirect.tentative.https.sub.html]
[Same-Site -> Same-Origin redirect]
expected: FAIL
[Same-Site -> Same-Site redirect]
expected: FAIL
[Same-Site -> Cross-Site redirect]
expected: FAIL

View file

@ -0,0 +1,2 @@
[report.tentative.https.sub.html]
expected: TIMEOUT

View file

@ -0,0 +1,13 @@
[script.tentative.https.sub.html]
[Same-origin script]
expected: FAIL
[Cross-site script]
expected: FAIL
[Same-origin CORS script]
expected: FAIL
[Same-site script]
expected: FAIL

View file

@ -0,0 +1,4 @@
[serviceworker.tentative.https.sub.html]
[metadata for service worker scripts]
expected: FAIL

View file

@ -0,0 +1,4 @@
[sharedworker.tentative.https.sub.html]
[sharedworker]
expected: FAIL

View file

@ -0,0 +1,13 @@
[style.tentative.https.sub.html]
[Same-Origin, cors style]
expected: FAIL
[Cross-Site style]
expected: FAIL
[Same-Site style]
expected: FAIL
[Same-Origin style]
expected: FAIL

View file

@ -0,0 +1,14 @@
[track.tentative.https.sub.html]
expected: TIMEOUT
[Same-Site track]
expected: NOTRUN
[Same-Origin track]
expected: TIMEOUT
[Same-Origin, CORS track]
expected: NOTRUN
[Cross-Site track]
expected: NOTRUN

View file

@ -0,0 +1,10 @@
[trailing-dot.tentative.https.sub.html]
[Fetching a resource from a cross-site host, spelled with a trailing dot.]
expected: FAIL
[Fetching a resource from the same origin, but spelled with a trailing dot.]
expected: FAIL
[Fetching a resource from the same site, but spelled with a trailing dot.]
expected: FAIL

View file

@ -0,0 +1,4 @@
[worker.tentative.https.sub.html]
[Same-Origin worker]
expected: FAIL

View file

@ -0,0 +1,10 @@
[xslt.tentative.https.sub.html]
[Same-Origin xslt]
expected: FAIL
[Cross-site xslt]
expected: FAIL
[Same-site xslt]
expected: FAIL

View file

@ -11,3 +11,6 @@
[X-Content-Type-Options%3A%20nosniff%0C]
expected: FAIL
[X-Content-Type-Options%3A%0D%0AX-Content-Type-Options%3A%20nosniff]
expected: FAIL

View file

@ -1,4 +0,0 @@
[traverse_the_history_1.html]
[Multiple history traversals from the same task]
expected: FAIL

View file

@ -1,4 +0,0 @@
[traverse_the_history_2.html]
[Multiple history traversals, last would be aborted]
expected: FAIL

View file

@ -1,4 +0,0 @@
[traverse_the_history_4.html]
[Multiple history traversals, last would be aborted]
expected: FAIL

View file

@ -1,4 +0,0 @@
[traverse_the_history_5.html]
[Multiple history traversals, last would be aborted]
expected: FAIL

View file

@ -0,0 +1,4 @@
[cross-global-npo.html]
[Named access across globals]
expected: FAIL

View file

@ -0,0 +1,10 @@
[prototype.html]
[Property on EventTarget.prototype.]
expected: FAIL
[Property on window.]
expected: FAIL
[Property on Window.prototype.]
expected: FAIL

View file

@ -1,5 +1,4 @@
[embedded-opener-remove-frame.html]
expected: CRASH
[opener and "removed" embedded documents]
expected: FAIL

View file

@ -0,0 +1,10 @@
[non-active-document.html]
[DOMParser]
expected: FAIL
[createHTMLDocument]
expected: FAIL
[<template>]
expected: FAIL

View file

@ -0,0 +1,5 @@
[form-double-submit-2.html]
expected: ERROR
[preventDefault should allow onclick submit() to succeed]
expected: TIMEOUT

View file

@ -0,0 +1,5 @@
[form-double-submit-3.html]
expected: ERROR
[<button> should have the same double-submit protection as <input type=submit>]
expected: TIMEOUT

View file

@ -0,0 +1,5 @@
[form-double-submit.html]
expected: ERROR
[default submit action should supersede onclick submit()]
expected: TIMEOUT

View file

@ -0,0 +1,7 @@
[aborted-parser.window.html]
[document.open() after parser is aborted]
expected: FAIL
[async document.open() after parser is aborted]
expected: FAIL

View file

@ -0,0 +1,5 @@
[location-set-and-document-open.html]
expected: TIMEOUT
[Location sets should cancel current navigation and prevent later document.open() from doing anything]
expected: TIMEOUT

View file

@ -1,5 +1,5 @@
[disallow-crossorigin.html]
type: testharness
expected: ERROR
[Promise rejection event should be muted for cross-origin non-CORS script]
expected: FAIL

View file

@ -1,7 +0,0 @@
[events_referenceSpace_reset.https.html]
[XRSession resetpose from a device properly fires off the right events for non-immersive sessions]
expected: FAIL
[XRSession resetpose from a device properly fires off the right events for immersive sessions]
expected: FAIL

View file

@ -0,0 +1,4 @@
[events_referenceSpace_reset_immersive.https.html]
[XRSession resetpose from a device properly fires off the right events for immersive sessions]
expected: FAIL

View file

@ -0,0 +1,4 @@
[events_referenceSpace_reset_inline.https.html]
[XRSession resetpose from a device properly fires off the right events for non-immersive sessions]
expected: FAIL

View file

@ -1,2 +0,0 @@
[Worker-constructor.html]
expected: ERROR

View file

@ -1,2 +0,0 @@
[transition_calc_implicit.html]
expected: TIMEOUT

View file

@ -28,7 +28,7 @@ jobs:
displayName: 'affected tests: Safari Technology Preview'
condition: eq(variables['Build.Reason'], 'PullRequest')
pool:
vmImage: 'macOS-10.13'
vmImage: 'macOS-10.14'
steps:
- template: tools/ci/azure/affected_tests.yml
parameters:
@ -42,7 +42,7 @@ jobs:
displayName: 'affected tests without changes: Safari Technology Preview'
condition: eq(variables['Build.Reason'], 'PullRequest')
pool:
vmImage: 'macOS-10.13'
vmImage: 'macOS-10.14'
steps:
- template: tools/ci/azure/affected_tests.yml
parameters:
@ -76,7 +76,7 @@ jobs:
dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.wptrunner_infrastructure']
pool:
vmImage: 'macOS-10.13'
vmImage: 'macOS-10.14'
steps:
- template: tools/ci/azure/checkout.yml
- template: tools/ci/azure/pip_install.yml
@ -106,7 +106,7 @@ jobs:
dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.tools_unittest']
pool:
vmImage: 'macOS-10.13'
vmImage: 'macOS-10.14'
steps:
- template: tools/ci/azure/checkout.yml
- template: tools/ci/azure/tox_pytest.yml
@ -119,7 +119,7 @@ jobs:
dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.wptrunner_unittest']
pool:
vmImage: 'macOS-10.13'
vmImage: 'macOS-10.14'
steps:
- template: tools/ci/azure/checkout.yml
- template: tools/ci/azure/tox_pytest.yml
@ -131,7 +131,7 @@ jobs:
dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.wpt_integration']
pool:
vmImage: 'macOS-10.13'
vmImage: 'macOS-10.14'
steps:
# full checkout required
- template: tools/ci/azure/install_chrome.yml
@ -353,7 +353,7 @@ jobs:
parallel: 5 # chosen to make runtime ~2h
timeoutInMinutes: 360
pool:
vmImage: 'macOS-10.13'
vmImage: 'macOS-10.14'
steps:
- template: tools/ci/azure/checkout.yml
- template: tools/ci/azure/pip_install.yml

View file

@ -25,31 +25,27 @@ tasks:
}
each(browser):
$map:
- [testharness, 1, 15]
- [testharness, 2, 15]
- [testharness, 3, 15]
- [testharness, 4, 15]
- [testharness, 5, 15]
- [testharness, 6, 15]
- [testharness, 7, 15]
- [testharness, 8, 15]
- [testharness, 9, 15]
- [testharness, 10, 15]
- [testharness, 11, 15]
- [testharness, 12, 15]
- [testharness, 13, 15]
- [testharness, 14, 15]
- [testharness, 15, 15]
- [reftest, 1, 10]
- [reftest, 2, 10]
- [reftest, 3, 10]
- [reftest, 4, 10]
- [reftest, 5, 10]
- [reftest, 6, 10]
- [reftest, 7, 10]
- [reftest, 8, 10]
- [reftest, 9, 10]
- [reftest, 10, 10]
- [testharness, 1, 16]
- [testharness, 2, 16]
- [testharness, 3, 16]
- [testharness, 4, 16]
- [testharness, 5, 16]
- [testharness, 6, 16]
- [testharness, 7, 16]
- [testharness, 8, 16]
- [testharness, 9, 16]
- [testharness, 10, 16]
- [testharness, 11, 16]
- [testharness, 12, 16]
- [testharness, 13, 16]
- [testharness, 14, 16]
- [testharness, 15, 16]
- [testharness, 16, 16]
- [reftest, 1, 5]
- [reftest, 2, 5]
- [reftest, 3, 5]
- [reftest, 4, 5]
- [reftest, 5, 5]
- [wdspec, 1, 1]
each(chunk):
taskId: {$eval: 'as_slugid(browser.name + browser.channel + chunk[0] + str(chunk[1]))'}

View file

@ -0,0 +1,39 @@
// META: title=Blob Content Type
// META: script=support.js
// META: timeout=long
indexeddb_test(
function upgrade(t, db) {
db.createObjectStore('store');
},
function success(t, db) {
var type = 'x-files/trust-no-one';
var blob = new Blob(['mulder', 'scully'], {type: type});
assert_equals(blob.type, type, 'Blob type should match constructor option');
var tx = db.transaction('store', 'readwrite');
tx.objectStore('store').put(blob, 'key');
tx.oncomplete = t.step_func(function() {
var tx = db.transaction('store');
tx.objectStore('store').get('key').onsuccess = t.step_func(function(e) {
var result = e.target.result;
assert_equals(result.type, type, 'Blob type should survive round-trip');
var url = URL.createObjectURL(result);
var xhr = new XMLHttpRequest(), async = true;
xhr.open('GET', url, async);
xhr.send();
xhr.onreadystatechange = t.step_func(function() {
if (xhr.readyState !== XMLHttpRequest.DONE)
return;
assert_equals(xhr.getResponseHeader('Content-Type'), type,
'Blob type should be preserved when fetched');
t.done();
});
});
});
},
'Ensure that content type round trips when reading blob data'
);

View file

@ -0,0 +1,47 @@
// META: title=Blob Delete Object Store
// META: script=support.js
let key = "blob key";
indexeddb_test(
function upgrade(t, db) {
const store0 = db.createObjectStore('store0');
const store1 = db.createObjectStore('store1');
const blobAContent = "First blob content";
const blobA = new Blob([blobAContent], {"type" : "text/plain"});
store0.put(blobA, key);
},
function success(t, db) {
db.close();
const request = indexedDB.open(db.name, 2);
request.onupgradeneeded = t.step_func(function(e) {
const db = e.target.result;
db.deleteObjectStore('store0');
request.onsuccess = t.step_func(function() {
const blobBContent = "Second blob content";
const trans = db.transaction('store1', 'readwrite');
const store1 = trans.objectStore('store1');
const blobB = new Blob([blobBContent], {"type" : "text/plain"});
store1.put(blobB, key);
trans.oncomplete = t.step_func(function() {
db.close();
const delete_request = indexedDB.deleteDatabase(db.name);
// The test passes if it successfully completes.
delete_request.onsuccess = t.step_func_done();
delete_request.onerror = t.unreached_func("Request should not fail.");
});
trans.onabort = t.unreached_func("Transaction should not be aborted.");
});
});
request.onsuccess = t.unreached_func("Request should not succeed without an upgrade.");
request.onerror = t.unreached_func("Request should not fail.");
request.onblocked = t.unreached_func("Request should not be blocked.");
}, "Deleting an object store and a database containing blobs doesn't crash.");

View file

@ -0,0 +1,53 @@
// META: title=Blob Valid After Deletion
// META: script=support.js
let key = "key";
indexeddb_test(
function upgrade(t, db) {
db.createObjectStore('store');
},
function success(t, db) {
const blobAContent = "Blob A content";
const blobBContent = "Blob B content";
const blobA = new Blob([blobAContent], {"type" : "text/plain"});
const blobB = new Blob([blobBContent], {"type" : "text/plain"});
value = { a0: blobA, a1: blobA, b0: blobB };
const tx = db.transaction('store', 'readwrite');
var store = tx.objectStore('store');
store.put(value, key);
value = null;
const trans = db.transaction('store');
store = trans.objectStore('store');
const request = store.get(key);
request.onsuccess = t.step_func(function() {
const record = request.result;
trans.oncomplete = t.step_func(function() {
const trans = db.transaction('store', 'readwrite');
store = trans.objectStore('store');
const request = store.delete(key);
trans.oncomplete = t.step_func(function() {
const promise1 = record.a0.text().then(t.step_func(text => { assert_equals(text, blobAContent); },
t.unreached_func()));
const promise2 = record.a1.text().then(t.step_func(text => { assert_equals(text, blobAContent); },
t.unreached_func()));
const promise3 = record.b0.text().then(t.step_func(text => { assert_equals(text, blobBContent); },
t.unreached_func()));
Promise.all([promise1, promise2, promise3]).then(function() {
// The test passes if it successfully completes.
t.done();
});
});
});
});
},
"Blobs stay alive after their records are deleted.");

View file

@ -0,0 +1,41 @@
// META: title=Blob Valid Before Commit
// META: script=support.js
let key = "key";
indexeddb_test(
function upgrade(t, db) {
db.createObjectStore('store');
},
function success(t, db) {
const blobAContent = "Blob A content";
const blobBContent = "Blob B content";
const blobA = new Blob([blobAContent], {"type" : "text/plain"});
const blobB = new Blob([blobBContent], {"type" : "text/plain"});
const value = { a0: blobA, a1: blobA, b0: blobB };
const tx = db.transaction('store', 'readwrite');
const store = tx.objectStore('store');
store.put(value, key);
const request = store.get(key);
request.onsuccess = t.step_func(function() {
const record = request.result;
const promise1 = record.a0.text().then(t.step_func(text => { assert_equals(text, blobAContent); },
t.unreached_func()));
const promise2 = record.a1.text().then(t.step_func(text => { assert_equals(text, blobAContent); },
t.unreached_func()));
const promise3 = record.b0.text().then(t.step_func(text => { assert_equals(text, blobBContent); },
t.unreached_func()));
Promise.all([promise1, promise2, promise3]).then(function() {
// The test passes if it successfully completes.
t.done();
});
});
},
"Blobs can be read back before their records are committed.");

View file

@ -288,5 +288,5 @@ promise_test(async testCase => {
assert_equals(getRequest1.result.title, 'title1');
assert_equals(getRequest2.result.title, 'title2');
db.close();
}, 'Transactions that handle all errors properly should be behave as ' +
}, 'Transactions that handle all errors properly should behave as ' +
'expected when an explicit commit is called in an onerror handler.');

View file

@ -288,8 +288,6 @@ cloneObjectTest(
assert_equals(orig.type, clone.type);
assert_equals(orig.name, clone.name);
assert_equals(orig.lastModified, clone.lastModified);
assert_equals(String(orig.lastModifiedDate),
String(clone.lastModifiedDate));
assert_equals(await orig.text(), await clone.text());
});

View file

@ -0,0 +1,62 @@
// META: global=worker
'use strict';
const badChunks = [
{
name: 'undefined',
value: undefined
},
{
name: 'null',
value: null
},
{
name: 'numeric',
value: 3.14
},
{
name: 'object, not BufferSource',
value: {}
},
{
name: 'array',
value: [65]
},
{
name: 'SharedArrayBuffer',
// Use a getter to postpone construction so that all tests don't fail where
// SharedArrayBuffer is not yet implemented.
get value() {
return new SharedArrayBuffer();
}
},
{
name: 'shared Uint8Array',
get value() {
return new Uint8Array(new SharedArrayBuffer())
}
},
];
for (const chunk of badChunks) {
promise_test(async t => {
const cs = new CompressionStream('gzip');
const reader = cs.readable.getReader();
const writer = cs.writable.getWriter();
const writePromise = writer.write(chunk.value);
const readPromise = reader.read();
await promise_rejects(t, new TypeError(), writePromise, 'write should reject');
await promise_rejects(t, new TypeError(), readPromise, 'read should reject');
}, `chunk of type ${chunk.name} should error the stream for gzip`);
promise_test(async t => {
const cs = new CompressionStream('deflate');
const reader = cs.readable.getReader();
const writer = cs.writable.getWriter();
const writePromise = writer.write(chunk.value);
const readPromise = reader.read();
await promise_rejects(t, new TypeError(), writePromise, 'write should reject');
await promise_rejects(t, new TypeError(), readPromise, 'read should reject');
}, `chunk of type ${chunk.name} should error the stream for deflate`);
}

View file

@ -0,0 +1,57 @@
// META: global=worker
// META: script=pako/pako_inflate.min.js
// META: timeout=long
'use strict';
// This test asserts that compressing '' doesn't affect the compressed data.
// Example: compressing ['Hello', '', 'Hello'] results in 'HelloHello'
async function compressChunkList(chunkList, format) {
const cs = new CompressionStream(format);
const writer = cs.writable.getWriter();
for (const chunk of chunkList) {
const chunkByte = new TextEncoder().encode(chunk);
writer.write(chunkByte);
}
const closePromise = writer.close();
const out = [];
const reader = cs.readable.getReader();
let totalSize = 0;
while (true) {
const { value, done } = await reader.read();
if (done)
break;
out.push(value);
totalSize += value.byteLength;
}
await closePromise;
const concatenated = new Uint8Array(totalSize);
let offset = 0;
for (const array of out) {
concatenated.set(array, offset);
offset += array.byteLength;
}
return concatenated;
}
const chunkLists = [
['', 'Hello', 'Hello'],
['Hello', '', 'Hello'],
['Hello', 'Hello', '']
];
const expectedValue = new TextEncoder().encode('HelloHello');
for (const chunkList of chunkLists) {
promise_test(async t => {
const compressedData = await compressChunkList(chunkList, 'deflate');
// decompress with pako, and check that we got the same result as our original string
assert_array_equals(expectedValue, pako.inflate(compressedData), 'value should match');
}, `the result of compressing [${chunkList}] with deflate should be 'HelloHello'`);
promise_test(async t => {
const compressedData = await compressChunkList(chunkList, 'gzip');
// decompress with pako, and check that we got the same result as our original string
assert_array_equals(expectedValue, pako.inflate(compressedData), 'value should match');
}, `the result of compressing [${chunkList}] with gzip should be 'HelloHello'`);
}

View file

@ -0,0 +1,60 @@
// META: global=worker
// META: script=pako/pako_inflate.min.js
// META: timeout=long
'use strict';
// This test asserts that compressing multiple chunks should work.
// Example: ('Hello', 3) => TextEncoder().encode('HelloHelloHello')
function makeExpectedChunk(input, numberOfChunks) {
const expectedChunk = input.repeat(numberOfChunks);
return new TextEncoder().encode(expectedChunk);
}
// Example: ('Hello', 3, 'deflate') => compress ['Hello', 'Hello', Hello']
async function compressMultipleChunks(input, numberOfChunks, format) {
const cs = new CompressionStream(format);
const writer = cs.writable.getWriter();
const chunk = new TextEncoder().encode(input);
for (let i = 0; i < numberOfChunks; ++i) {
writer.write(chunk);
}
const closePromise = writer.close();
const out = [];
const reader = cs.readable.getReader();
let totalSize = 0;
while (true) {
const { value, done } = await reader.read();
if (done)
break;
out.push(value);
totalSize += value.byteLength;
}
await closePromise;
const concatenated = new Uint8Array(totalSize);
let offset = 0;
for (const array of out) {
concatenated.set(array, offset);
offset += array.byteLength;
}
return concatenated;
}
const hello = 'Hello';
for (let numberOfChunks = 2; numberOfChunks <= 16; ++numberOfChunks) {
promise_test(async t => {
const compressedData = await compressMultipleChunks(hello, numberOfChunks, 'deflate');
const expectedValue = makeExpectedChunk(hello, numberOfChunks);
// decompress with pako, and check that we got the same result as our original string
assert_array_equals(expectedValue, pako.inflate(compressedData), 'value should match');
}, `compressing ${numberOfChunks} chunks with deflate should work`);
promise_test(async t => {
const compressedData = await compressMultipleChunks(hello, numberOfChunks, 'gzip');
const expectedValue = makeExpectedChunk(hello, numberOfChunks);
// decompress with pako, and check that we got the same result as our original string
assert_array_equals(expectedValue, pako.inflate(compressedData), 'value should match');
}, `compressing ${numberOfChunks} chunks with gzip should work`);
}

View file

@ -0,0 +1,54 @@
// META: global=worker
'use strict';
// This test asserts that compressed data length is shorter than the original
// data length. If the input is extremely small, the compressed data may be
// larger than the original data.
const LARGE_FILE = '/media/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr.webm';
async function compressArrayBuffer(input, format) {
const cs = new CompressionStream(format);
const writer = cs.writable.getWriter();
writer.write(input);
const closePromise = writer.close();
const out = [];
const reader = cs.readable.getReader();
let totalSize = 0;
while (true) {
const { value, done } = await reader.read();
if (done)
break;
out.push(value);
totalSize += value.byteLength;
}
await closePromise;
const concatenated = new Uint8Array(totalSize);
let offset = 0;
for (const array of out) {
concatenated.set(array, offset);
offset += array.byteLength;
}
return concatenated;
}
promise_test(async () => {
const response = await fetch(LARGE_FILE);
const buffer = await response.arrayBuffer();
const bufferView = new Uint8Array(buffer);
const originalLength = bufferView.length;
const compressedData = await compressArrayBuffer(bufferView, 'deflate');
const compressedLength = compressedData.length;
assert_less_than(compressedLength, originalLength, 'output should be smaller');
}, 'the length of deflated data should be shorter than that of the original data');
promise_test(async () => {
const response = await fetch(LARGE_FILE);
const buffer = await response.arrayBuffer();
const bufferView = new Uint8Array(buffer);
const originalLength = bufferView.length;
const compressedData = await compressArrayBuffer(bufferView, 'gzip');
const compressedLength = compressedData.length;
assert_less_than(compressedLength, originalLength, 'output should be smaller');
}, 'the length of gzipped data should be shorter than that of the original data');

View file

@ -0,0 +1,29 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Containment Test: Size containment scrollbars</title>
<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-size">
<link rel="match" href="reference/contain-size-scrollbars-004-ref.html">
<meta name=assert content="This test checks that contain:size element's content and padding are considered for scrollbars.">
<style>
#scroller {
contain: size;
background: lightgreen;
overflow: scroll;
padding-bottom: 50px;
width: 100px;
height: 100px;
}
#content {
background: lightblue;
width: 50px;
height: 130px;
}
</style>
<div id=scroller>
<div id=content>
</div>
</div>
<p>This test passes if it has the same output as the reference.</p>

View file

@ -0,0 +1,25 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Containment Test: Reference file</title>
<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
<style>
#scroller {
background: lightgreen;
overflow: scroll;
padding-bottom: 50px;
width: 100px;
height: 100px;
}
#content {
background: lightblue;
width: 50px;
height: 130px;
}
</style>
<div id=scroller>
<div id=content>
</div>
</div>
<p>This test passes if it has the same output as the reference.</p>

View file

@ -7,4 +7,4 @@
padding: 0;
}
</style>
<p>Ա. Filler Text
<p>Ա. Filler Text<span style="display: inline-block; width: 1px; height: 50px;"></span>

View file

@ -14,5 +14,5 @@ ol {
</style>
<ol>
<li>Filler Text</li>
<li>Filler Text<span style="display: inline-block; width: 1px; height: 50px;"></span></li>
</ol>

View file

@ -1,7 +1,7 @@
<!DOCTYPE html>
<title>CSS Multi-column Layout Test: extremely tall multicolumn container with extremely tall inline-block inside</title>
<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
<link rel="help" href="http://www.w3.org/TR/css3-multicol/" title="CSS Multi-column Layout Module Level 1">
<link rel="help" href="https://www.w3.org/TR/css-multicol-1/#the-multi-column-model" title="CSS Multi-column Layout Module Level 1">
<meta name="assert" content="This tests that we get no crash if we put an extremely tall inline-block inside an extremely tall multicol container. Engines typically have some maximum limit for how large values they can represent. If the value is large enough to become 'infinity', the engine should still not crash">
<!-- Explanation for the CSS values specified below: This test was written for
the Chromium Blink engine, which uses a fixed-point 32 bit integer. In this

View file

@ -1,7 +1,7 @@
<!DOCTYPE html>
<title>Taking the sole box after a spanner out of flow, then remove it</title>
<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
<link rel="help" href="http://www.w3.org/TR/css3-multicol/" title="CSS Multi-column Layout Module Level 1">
<link rel="help" href="https://www.w3.org/TR/css-multicol-1/#the-multi-column-model">
<meta name="assert" content="An absolutely positioned box is still contained by the multicol container if its containing block is inside the multicol container">
<div id="multicol" style="columns:3;">
<div style="position:relative;">

View file

@ -0,0 +1,11 @@
<!DOCTYPE html>
<link rel="author" title="Philip Rogers" href="mailto:pdr@chromium.org">
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1011699">
<span id="target" style="outline: 1px solid black; will-change: opacity; opacity: 0.7;">test</span>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
test(()=> {
target.style.background = "lightblue";
}, "no crash");
</script>

View file

@ -0,0 +1,17 @@
<!doctype html>
<title>CSS Overflow Test: overscroll-behavior doesn't stop overflow from being propagated from the body</title>
<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
<link rel="author" title="Mozilla" href="https://mozilla.org">
<link rel="help" href="https://drafts.csswg.org/css-overflow/#overflow-propagation">
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1586600">
<link rel="match" href="reference/overflow-body-propagation-ref.html">
<style>
:root {
overscroll-behavior-y: contain;
}
body {
overflow: scroll;
margin-top: 100px;
}
</style>
<body>The viewport should have scrollbars, not the body.</body>

View file

@ -0,0 +1,17 @@
<!doctype html>
<title>CSS Overflow Test: scroll-snap-type doesn't stop overflow from being propagated from the body</title>
<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
<link rel="author" title="Mozilla" href="https://mozilla.org">
<link rel="help" href="https://drafts.csswg.org/css-overflow/#overflow-propagation">
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1586600">
<link rel="match" href="reference/overflow-body-propagation-ref.html">
<style>
:root {
scroll-snap-type: both mandatory;
}
body {
overflow: scroll;
margin-top: 100px;
}
</style>
<body>The viewport should have scrollbars, not the body.</body>

View file

@ -1,6 +1,6 @@
<!DOCTYPE html>
<title>Should not crash when inserting an element inside a :first-line pseudo.</title>
<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/">
<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-line-pseudo">
<style>
p:first-line, p:first-letter {
font-family: serif;

View file

@ -1,6 +1,6 @@
<!doctype html>
<title>CSS Pseudo Element API IDL tests</title>
<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/">
<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#cssom">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/WebIDLParser.js"></script>

View file

@ -0,0 +1,21 @@
<!DOCTYPE html>
<title>CSS Shadow Parts IDL tests</title>
<link rel="help" href="https://drafts.csswg.org/css-shadow-parts/#idl">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/WebIDLParser.js"></script>
<script src="/resources/idlharness.js"></script>
<script>
idl_test(
['css-shadow-parts'],
['dom'],
idl_array => {
self.element = document.createElementNS('ns', 'e');
self.htmlElement = document.createElement('html');
self.svgElement = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
idl_array.add_objects({
Element: ['element', 'htmlElement', 'svgElement'],
});
}
);
</script>

View file

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html>
<head>
<title>CSS Shadow Parts - Simple Important Important</title>
<meta href="mailto:fergal@chromium.org" rel="author" title="Fergal Daly">
<link href="http://www.google.com/" rel="author" title="Google">
<link href="https://drafts.csswg.org/css-shadow-parts/" rel="help">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/shadow-helper.js"></script>
</head>
<body>
<style>#c-e::part(partp) { color: green !important; }</style>
<script>installCustomElement("custom-element", "custom-element-template");</script>
<template id="custom-element-template">
<style>span { color: red !important; }</style>
<span id="part" part="partp">This text</span>
</template>
The following text should be green:
<custom-element id="c-e"></custom-element>
<script>
"use strict";
const colorRed = "rgb(255, 0, 0)";
test(function() {
const el = getElementByShadowIds(document, ["c-e", "part"]);
assert_equals(window.getComputedStyle(el).color, colorRed);
}, "Part in selected host is styled");
</script>
</body>
</html>

View file

@ -0,0 +1,29 @@
<!DOCTYPE html>
<html>
<head>
<title>CSS Shadow Parts - Simple Important Inline</title>
<meta href="mailto:fergal@chromium.org" rel="author" title="Fergal Daly">
<link href="http://www.google.com/" rel="author" title="Google">
<link href="https://drafts.csswg.org/css-shadow-parts/" rel="help">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/shadow-helper.js"></script>
</head>
<body>
<style>#c-e::part(partp) { color: red; }</style>
<script>installCustomElement("custom-element", "custom-element-template");</script>
<template id="custom-element-template">
<span id="part" part="partp" style="color: green !important">This text</span>
</template>
The following text should be red:
<custom-element id="c-e"></custom-element>
<script>
"use strict";
const colorGreen = "rgb(0, 128, 0)";
test(function() {
const el = getElementByShadowIds(document, ["c-e", "part"]);
assert_equals(window.getComputedStyle(el).color, colorGreen);
}, "Part in selected host is not styled");
</script>
</body>
</html>

View file

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html>
<head>
<title>CSS Shadow Parts - Simple Important</title>
<meta href="mailto:fergal@chromium.org" rel="author" title="Fergal Daly">
<link href="http://www.google.com/" rel="author" title="Google">
<link href="https://drafts.csswg.org/css-shadow-parts/" rel="help">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/shadow-helper.js"></script>
</head>
<body>
<style>#c-e::part(partp) { color: red; }</style>
<script>installCustomElement("custom-element", "custom-element-template");</script>
<template id="custom-element-template">
<style>span { color: green !important; }</style>
<span id="part" part="partp">This text</span>
</template>
The following text should be green:
<custom-element id="c-e"></custom-element>
<script>
"use strict";
const colorGreen = "rgb(0, 128, 0)";
test(function() {
const el = getElementByShadowIds(document, ["c-e", "part"]);
assert_equals(window.getComputedStyle(el).color, colorGreen);
}, "Part in selected host is styled");
</script>
</body>
</html>

View file

@ -0,0 +1,29 @@
<!DOCTYPE html>
<html>
<head>
<title>CSS Shadow Parts - Simple Inline</title>
<meta href="mailto:fergal@chromium.org" rel="author" title="Fergal Daly">
<link href="http://www.google.com/" rel="author" title="Google">
<link href="https://drafts.csswg.org/css-shadow-parts/" rel="help">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/shadow-helper.js"></script>
</head>
<body>
<style>#c-e::part(partp) { color: green; }</style>
<script>installCustomElement("custom-element", "custom-element-template");</script>
<template id="custom-element-template">
<span id="part" part="partp" style="color: red">This text</span>
</template>
The following text should be green:
<custom-element id="c-e"></custom-element>
<script>
"use strict";
const colorGreen = "rgb(0, 128, 0)";
test(function() {
const el = getElementByShadowIds(document, ["c-e", "part"]);
assert_equals(window.getComputedStyle(el).color, colorGreen);
}, "Part in selected host is styled");
</script>
</body>
</html>

View file

@ -19,16 +19,16 @@
// font relative units: em, ex, ch, rem
var units = ['em', 'ex', 'ch', 'rem'];
var resolveds = {};
ParsingUtils.setupFonts(function () {
var div = document.createElement('div');
document.body.appendChild(div);
units.forEach(function(unit) {
div.style.width = '10' + unit;
var s = getComputedStyle(div);
resolveds[unit] = parseFloat(s.width);
});
document.body.removeChild(div);
})();
ParsingUtils.setupFonts();
var div = document.createElement('div');
document.body.appendChild(div);
units.forEach(function(unit) {
div.style.width = '10' + unit;
var s = getComputedStyle(div);
resolveds[unit] = parseFloat(s.width);
});
document.body.removeChild(div);
function fillArray(string, length) {
return Array.apply(null, new Array(length)).map(String.prototype.valueOf, string);
@ -49,6 +49,8 @@
});
generate_tests(testUnit, tests);
ParsingUtils.restoreFonts();
</script>
</body>
</html>

View file

@ -0,0 +1,41 @@
<!DOCTYPE html>
<title>Collapsed borders and box-shadow</title>
<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-tables-3/#in-collapsed-borders-mode">
<link rel="help" href="https://drafts.csswg.org/css-backgrounds-3/#box-shadow">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<link rel="bookmark" href="https://crbug.com/1006241" />
<meta name="flags" content="" />
<meta name="assert" content="box-shadow size and location on a cell with collapsed borders are calculated correctly" />
<style>
table {
border-collapse: collapse;
}
/* Make the green box-shadow start at the inner edge of the border to cover up all the red.
Chrome's bug made the box-shadow start further toward the center. */
td {
border: 20px solid green;
box-shadow: inset 60px 0px green;
/* The properties after the blank line aren't the focus of the test. */
background: red;
line-height: 0px;
padding: 0px;
}
td > span {
display: inline-block; /* chrome only hits this bug when the td children are inline */
height: 60px;
width: 60px;
}
</style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<table>
<tr>
<td><span></span></td>
</tr>
</table>

View file

@ -2,7 +2,7 @@
<meta charset="utf-8">
<title>CSS Text level 3 Test: break-space tabs don't hang</title>
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-3">
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
<link rel="match" href="reference/break-spaces-tab-005-ref.html">
<meta name="assert" content="a sequence of break-spaces tabs at the end of a line does not hang.">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />

View file

@ -2,7 +2,7 @@
<meta charset="utf-8">
<title>CSS Text level 3 Test: break-spaces tabs and spaces don't hang</title>
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-3">
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
<link rel="match" href="reference/break-spaces-tab-005-ref.html">
<meta name="assert" content="a sequence of break-spaces tabs and spaces at the end of a line does not hang, and can wrap after each tab or space.">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />

View file

@ -0,0 +1,44 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Text level 3 Test: collapsible white space at end-of-line and bidi</title>
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
<link rel="match" href="reference/eol-spaces-bidi-001-ref.html">
<meta name="assert" content="Collapsible space at the end of the line prior to bidi reordering are removed.">
<style>
div {
font-family: monospace;
border: solid blue;
font-size: 1.5em;
margin-bottom:1em;
display: inline-block;
}
.ref {
white-space: pre;
border-color: orange;
}
.w5 { width: 5ch; }
.w6 { width: 6ch; }
.w7 { width: 7ch; }
.w8 { width: 8ch; }
.blue { background: #aaaaff; }
.red { background: #ffaaaa; }
.green { background: #aaffaa; }
.pink { background: #ffaaff; }
.yellow { background: #ffffaa; }
</style>
<p>Test passes if the content of each blue box (on the left) is laid out identically to the content of the orange box to its right.
<div class=w5><span class=pink> </span>A<span class=blue> </span>B<span class=red> </span>ا<span class=green> </span>ب<span class=yellow> </span></div>
<div class="ref w5">A<span class=blue> </span>B<span class=red> </span>ا<br>ب</div>
<br>
<div class=w6><span class=pink> </span>A<span class=blue> </span>B<span class=red> </span>ا<span class=green> </span>ب<span class=yellow> </span></div>
<div class="ref w6">A<span class=blue> </span>B<span class=red> </span>ا<br>ب</div>
<br>
<div class=w7><span class=pink> </span>A<span class=blue> </span>B<span class=red> </span>ا<span class=green> </span>ب<span class=yellow> </span></div>
<div class="ref w7">A<span class=blue> </span>B<span class=red> </span>ا<span class=green> </span>ب</div>
<br>
<div class=w8><span class=pink> </span>A<span class=blue> </span>B<span class=red> </span>ا<span class=green> </span>ب<span class=yellow> </span></div>
<div class="ref w8">A<span class=blue> </span>B<span class=red> </span>ا<span class=green> </span>ب</div>

View file

@ -2,7 +2,7 @@
<meta charset="utf-8">
<title>CSS Text level 3 Test: pre-wrap tabs hang</title>
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-3">
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
<link rel="match" href="reference/pre-wrap-001-ref.html">
<meta name="assert" content="a sequence of pre-wrap tabs at the end of a line hangs.">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />

View file

@ -2,7 +2,7 @@
<meta charset="utf-8">
<title>CSS Text level 3 Test: pre-wrap tabs and spaces hang</title>
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-3">
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
<link rel="match" href="reference/pre-wrap-001-ref.html">
<meta name="assert" content="a sequence of pre-wrap tabs and spaces at the end of a line hangs.">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />

View file

@ -0,0 +1,39 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS test reference</title>
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
<style>
div {
font-family: monospace;
border: solid blue;
font-size: 1.5em;
margin-bottom:1em;
display: inline-block;
white-space: pre;
}
.ref {
border-color: orange;
}
.w5 { width: 5ch; }
.w6 { width: 6ch; }
.w7 { width: 7ch; }
.w8 { width: 8ch; }
.blue { background: #aaaaff; }
.red { background: #ffaaaa; }
.green { background: #aaffaa; }
</style>
<p>Test passes if the content of each blue box (on the left) is laid out identically to the content of the orange box to its right.
<div class="w5">A<span class=blue> </span>B<span class=red> </span>ا<br>ب</div>
<div class="ref w5">A<span class=blue> </span>B<span class=red> </span>ا<br>ب</div>
<br>
<div class="w6">A<span class=blue> </span>B<span class=red> </span>ا<br>ب</div>
<div class="ref w6">A<span class=blue> </span>B<span class=red> </span>ا<br>ب</div>
<br>
<div class="w7">A<span class=blue> </span>B<span class=red> </span>ا<span class=green> </span>ب</div>
<div class="ref w7">A<span class=blue> </span>B<span class=red> </span>ا<span class=green> </span>ب</div>
<br>
<div class="w8">A<span class=blue> </span>B<span class=red> </span>ا<span class=green> </span>ب</div>
<div class="ref w8">A<span class=blue> </span>B<span class=red> </span>ا<span class=green> </span>ب</div>

View file

@ -1,6 +1,6 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/">
<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#dimension-mapping">
<link rel="help" href="https://www.w3.org/TR/CSS22/box.html#propdef-padding-top">
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=966795">
<link rel="match" href="../reference/nothing.html">

View file

@ -13,18 +13,17 @@ body {
writing-mode: vertical-rl;
width: 0; height: 0;
}
html::before {
content: "This text must be vertical.";
/* This is inline content of the root,
and should therefore be vertical,
as the root's used value is vertical */
}
html::after {
content: "This text must be horizontal.";
display: block;
/* This is a block level element,
with it's own writing mode inherited from the root,
horizontal since the root's computed value should be horizontal*/
/* The writing mode inherited from the root must be horizontal
since the root's computed value should be horizontal */
}
</style>
<body></body>
<script>
document.documentElement.append("This text must be vertical");
/* This is direct content of the root,
and should therefore be vertical,
as the root's used value is vertical */
</script>

Some files were not shown because too many files have changed in this diff Show more