Update web-platform-tests to revision 41a7d8732d8e5c65728c153d29a34fe9d5192b29

This commit is contained in:
James Graham 2015-05-13 16:20:27 +01:00
parent b05c3fc0c0
commit 5e8b92f3de
77 changed files with 1871 additions and 1412 deletions

File diff suppressed because it is too large Load diff

View file

@ -1 +1 @@
7ee605db117bfc96ef145a1c77d43b704baeacb2
b3b9deafa7ed87bd0649849f3aa729f21c4ff45d

View file

@ -16,7 +16,7 @@ is ongoing that will affect a number of the following tests.</strong>
<script>
test(function() {
assert_true("Blob" in window, "window should have a Blob property.");
assert_equals(Blob.length, 2, "Blob.length should be 2.");
assert_equals(Blob.length, 0, "Blob.length should be 0.");
assert_true(Blob instanceof Function, "Blob should be a function.");
}, "Blob interface object");

View file

@ -16,7 +16,7 @@
var open_rq = createdb(t);
open_rq.onupgradeneeded = function(e) {
db = event.target.result;
db = e.target.result;
var store = db.createObjectStore("test", {keyPath:"pKey"});
store.createIndex("idx", "iKey");

View file

@ -16,7 +16,7 @@
var open_rq = createdb(t);
open_rq.onupgradeneeded = function(e) {
db = event.target.result;
db = e.target.result;
var store = db.createObjectStore("test", {keyPath:"pKey"});
for(var i = 0; i < records.length; i++) {

View file

@ -29,7 +29,7 @@ open_rq.onsuccess = function(e) {
upgradeneeded_fired = counter++;
});
rq.onsuccess = t.step_func(function (e) {
assert_equals(versionchange_fired, 0, 'block event fired #')
assert_equals(versionchange_fired, 0, 'versionchange event fired #')
assert_equals(blocked_fired, 1, 'block event fired #')
assert_equals(upgradeneeded_fired, 2, 'second upgradeneeded event fired #')

View file

@ -1,6 +1,6 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>IDBDatabase.createObjectStore() - Attampt Create Exsists Object Store With Difference keyPath throw ConstraintError </title>
<title>IDBDatabase.createObjectStore() - attempting to create an existing object store with a different keyPath throw ConstraintError </title>
<link rel="author" title="Intel" href="http://www.intel.com">
<link rel="help" href="https://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#widl-IDBDatabase-createObjectStore-IDBObjectStore-DOMString-name-IDBObjectStoreParameters-optionalParameters">
<script src="/resources/testharness.js"></script>

View file

@ -47,7 +47,7 @@ should_throw({
function should_work(val) {
var t = async_test("Calling open() with version argument 1.5 should not throw.")
var rq = createdb(t)
var rq = createdb(t, val)
rq.onupgradeneeded = function() {
t.done()
}

View file

@ -25,11 +25,14 @@
txn.objectStore("store")
.openCursor().onsuccess = this.step_func(function(e)
{
if (e.target.result)
if (e.target.result) {
count += 1;
e.target.result.continue()
}
})
txn.oncomplete = this.step_func(function() {
assert_equals(count, 100);
this.done()
})
}

View file

@ -7,7 +7,6 @@
<script src=support.js></script>
<script>
// TODO XXX DO THE IDBTransaction abort test here here
var db, aborted,
t = async_test(document.title, {timeout: 10000}),
record = { indexedProperty: "bar" };

View file

@ -36,7 +36,7 @@
// Errors
db.onerror = fail(t, "db.error");
db.abort = fail(t, "db.abort");
db.onabort = fail(t, "db.abort");
setTimeout(t.step_func(deleteDB), 10);
});

View file

@ -1,64 +0,0 @@
<!--
Test converted from WebKit:
http://trac.webkit.org/browser/trunk/LayoutTests/storage/indexeddb/resources/interfaces.js
-->
<!DOCTYPE html>
<!-- Submitted from TestTWF Paris -->
<meta charset=utf-8>
<title>Test IndexedDB's interfaces</title>
<link rel=author href="mailto:romain.huet@gmail.com" title="Romain Huet">
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=support.js></script>
<script>
test(function() {
assert_true('IDBCursor' in self);
}, "Test IDBCursor");
test(function() {
assert_true('IDBCursorWithValue' in self);
}, "Test IDBCursorWithValue");
test(function() {
assert_true('IDBDatabase' in self);
}, "Test IDBDatabase");
test(function() {
assert_true('IDBFactory' in self);
}, "Test IDBFactory");
test(function() {
assert_true('IDBIndex' in self);
}, "Test IDBIndex");
test(function() {
assert_true('IDBKeyRange' in self);
}, "Test IDBKeyRange");
test(function() {
assert_true('IDBObjectStore' in self);
}, "Test IDBObjectStore");
test(function() {
assert_true('IDBOpenDBRequest' in self);
}, "Test IDBOpenDBRequest");
test(function() {
assert_true('IDBRequest' in self);
}, "Test IDBRequest");
test(function() {
assert_true('IDBTransaction' in self);
}, "Test IDBTransaction");
test(function() {
assert_true('IDBVersionChangeEvent' in self);
}, "Test IDBVersionChangeEvent");
</script>
<div id=log></div>

View file

@ -267,7 +267,7 @@ GitHub UI. Below is one method and others can be found on
4. Wait for feedback on your pull request and once your pull request is
accepted, detele youre branch (see '
accepted, delete your branch (see '
[When Pull Request is Accepted][cleanup]').
That's it! If you're currently at a Test the Web Forward event, find an

View file

@ -14,8 +14,18 @@ function testNode(create, type) {
assert_throws("INDEX_SIZE_ERR", function() { node.deleteData(5, 10) })
assert_throws("INDEX_SIZE_ERR", function() { node.deleteData(5, 0) })
assert_throws("INDEX_SIZE_ERR", function() { node.deleteData(-1, 10) })
assert_throws("INDEX_SIZE_ERR", function() { node.deleteData(-1, 0) })
}, type + ".deleteData() out of bounds")
test(function() {
var node = create()
assert_equals(node.data, "test")
node.deleteData(0, 2)
assert_equals(node.data, "st")
}, type + ".deleteData() at the start")
test(function() {
var node = create()
assert_equals(node.data, "test")
@ -32,6 +42,33 @@ function testNode(create, type) {
assert_equals(node.data, "tst")
}, type + ".deleteData() in the middle")
test(function() {
var node = create()
assert_equals(node.data, "test")
node.deleteData(2, 0)
assert_equals(node.data, "test")
node.deleteData(0, 0)
assert_equals(node.data, "test")
}, type + ".deleteData() with zero count")
test(function() {
var node = create()
assert_equals(node.data, "test")
node.deleteData(2, -1)
assert_equals(node.data, "te")
}, type + ".deleteData() with small negative count")
test(function() {
var node = create()
assert_equals(node.data, "test")
node.deleteData(1, -0x100000000 + 2)
assert_equals(node.data, "tt")
}, type + ".deleteData() with large negative count")
test(function() {
var node = create()
node.data = "This is the character data test, append more 資料,更多測試資料";

View file

@ -16,6 +16,38 @@ function testNode(create, type) {
assert_throws("INDEX_SIZE_ERR", function() { node.insertData(5, "") })
}, type + ".insertData() out of bounds")
test(function() {
var node = create()
assert_equals(node.data, "test")
assert_throws("INDEX_SIZE_ERR", function() { node.insertData(-1, "x") })
assert_throws("INDEX_SIZE_ERR", function() { node.insertData(-0x100000000 + 5, "x") })
}, type + ".insertData() negative out of bounds")
test(function() {
var node = create()
assert_equals(node.data, "test")
node.insertData(-0x100000000 + 2, "X")
assert_equals(node.data, "teXst")
}, type + ".insertData() negative in bounds")
test(function() {
var node = create()
assert_equals(node.data, "test")
node.insertData(0, "")
assert_equals(node.data, "test")
}, type + ".insertData('')")
test(function() {
var node = create()
assert_equals(node.data, "test")
node.insertData(0, "X")
assert_equals(node.data, "Xtest")
}, type + ".insertData() at the start")
test(function() {
var node = create()
assert_equals(node.data, "test")

View file

@ -0,0 +1,53 @@
<!doctype html>
<meta charset=utf-8>
<title>Text.splitText()</title>
<link rel=help href="https://dom.spec.whatwg.org/#dom-text-splittextoffset">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
test(function() {
var text = document.createTextNode("camembert");
assert_throws("INDEX_SIZE_ERR", function () { text.splitText(10) });
}, "Split text after end of data");
test(function() {
var text = document.createTextNode("");
var new_text = text.splitText(0);
assert_equals(text.data, "");
assert_equals(new_text.data, "");
}, "Split empty text");
test(function() {
var text = document.createTextNode("comté");
var new_text = text.splitText(0);
assert_equals(text.data, "");
assert_equals(new_text.data, "comté");
}, "Split text at beginning");
test(function() {
var text = document.createTextNode("comté");
var new_text = text.splitText(5);
assert_equals(text.data, "comté");
assert_equals(new_text.data, "");
}, "Split text at end");
test(function() {
var text = document.createTextNode("comté");
var new_text = text.splitText(3);
assert_equals(text.data, "com");
assert_equals(new_text.data, "té");
assert_equals(new_text.parentNode, null);
}, "Split root");
test(function() {
var parent = document.createElement('div');
var text = document.createTextNode("bleu");
parent.appendChild(text);
var new_text = text.splitText(2);
assert_equals(text.data, "bl");
assert_equals(new_text.data, "eu");
assert_equals(text.nextSibling, new_text);
assert_equals(new_text.parentNode, parent);
}, "Split child");
</script>

View file

@ -0,0 +1,3 @@
def main(request, response):
response.headers.set("Content-Type", "text/plain;charset=" + request.GET.first("label"))
response.content = "hello encoding"

View file

@ -86,7 +86,7 @@
async_test(function(t) {
var frame = document.createElement("iframe"),
name = compatibility_names[encoding.name] || encoding.name;
frame.src = "resources/single-byte-raw.py?label=" + label
frame.src = "resources/text-plain-charset.py?label=" + label
frame.onload = t.step_func_done(function() {
assert_equals(frame.contentDocument.characterSet, name)
assert_equals(frame.contentDocument.inputEncoding, name)

View file

@ -63,9 +63,7 @@ test(function() {
assert_equals(img2.id, "test4");
assert_false("test4" in document, '"test4" in document should be false');
var collection = document.test4;
assert_class_string(collection, "HTMLCollection", "collection should be an HTMLCollection");
assert_array_equals(collection, [img1, img2]);
assert_equals(document.test4, undefined);
}, "If there are two imgs, nothing should be returned. (id)");
test(function() {

View file

@ -373,7 +373,7 @@ ReflectionTests.typeMap = {
{toString:function() {return 2;}, valueOf: null},
{valueOf:function() {return 3;}}],
"domExpected": function(val) {
var parsed = ReflectionTests.parseNonneg(val + "");
var parsed = ReflectionTests.parseNonneg(String(val));
if (parsed === false || parsed > maxInt || parsed < minInt) {
return null;
}
@ -409,7 +409,7 @@ ReflectionTests.typeMap = {
{toString:function() {return 2;}, valueOf: null},
{valueOf:function() {return 3;}}],
"domExpected": function(val) {
var parsed = ReflectionTests.parseNonneg(val + "");
var parsed = ReflectionTests.parseNonneg(String(val));
// Note maxInt, not maxUnsigned.
if (parsed === false || parsed < 0 || parsed > maxInt) {
return null;
@ -450,7 +450,7 @@ ReflectionTests.typeMap = {
{toString:function() {return 2;}, valueOf: null},
{valueOf:function() {return 3;}}],
"domExpected": function(val) {
var parsed = ReflectionTests.parseNonneg(val + "");
var parsed = ReflectionTests.parseNonneg(String(val));
// Note maxInt, not maxUnsigned.
if (parsed === false || parsed < 1 || parsed > maxInt) {
return null;
@ -696,7 +696,7 @@ ReflectionTests.doReflects = function(data, idlName, idlObj, domName, domObj) {
}
try {
domObj.setAttribute(domName, domTests[i]);
ReflectionHarness.test(domObj.getAttribute(domName), domTests[i] + "", "setAttribute() to " + ReflectionHarness.stringRep(domTests[i]) + " followed by getAttribute()");
ReflectionHarness.test(domObj.getAttribute(domName), String(domTests[i]), "setAttribute() to " + ReflectionHarness.stringRep(domTests[i]) + " followed by getAttribute()");
ReflectionHarness.test(idlObj[idlName], domExpected[i], "setAttribute() to " + ReflectionHarness.stringRep(domTests[i]) + " followed by IDL get");
if (ReflectionHarness.catchUnexpectedExceptions) {
ReflectionHarness.success();

View file

@ -26,11 +26,11 @@
test(function(){ assert_equals(document.getElementById("chkDefaultValue").value, "");
}, "time element of default time value");
test(function(){assert_equals(document.getElementById('chkStep').step, "");
} , "step attribute on default value check");
}, "step attribute on default value check");
test(function(){assert_equals(document.getElementById('chkDefaultValue').max, "");
} , "max attribute on default value check")
}, "max attribute on default value check")
test(function(){assert_equals(document.getElementById('chkDefaultValue').max, "");
} , "min attribute on default value check")
}, "min attribute on default value check")
/* simple attribute test*/
test(function(){assert_equals(document.getElementById("chkSupportAttribute").type,"time");}

View file

@ -15,9 +15,7 @@ INDENT TABS: custom-elements/*
INDENT TABS: DOMEvents/*
INDENT TABS: eventsource/*
INDENT TABS: html/editing/dnd/*
INDENT TABS: html/semantics/*
INDENT TABS: html/syntax/*
INDENT TABS: html/webappapis/*
INDENT TABS: media-source/*
INDENT TABS: old-tests/*
INDENT TABS: pointerlock/*
@ -89,6 +87,7 @@ PRINT STATEMENT:*/tools/*
CR AT EOL:WebIDL/valid/idl/documentation-dos.widl
CR AT EOL:cors/resources/cors-headers.asis
CR AT EOL:html/semantics/embedded-content/the-canvas-element/size.attributes.parse.whitespace.html
INDENT TABS:html/semantics/embedded-content/the-canvas-element/size.attributes.parse.whitespace.html
CR AT EOL:webvtt/webvtt-file-format-parsing/webvtt-file-parsing/support/newlines.vtt
PARSE-FAILED:dom/nodes/Document-createElement-namespace-tests/empty.svg
PARSE-FAILED:dom/nodes/Document-createElement-namespace-tests/empty.xhtml

View file

@ -97,5 +97,5 @@ function mediaSourceConfigChangeTest(directory, idA, idB, description)
});
});
});
}, description, { timeout: 10000 } );
}, description);
};

View file

@ -211,7 +211,7 @@
test.done();
});
});
}, 'Test setting same duration multiple times does not fire duplicate durationchange', {timeout: 2500});
}, 'Test setting same duration multiple times does not fire duplicate durationchange');
</script>
</body>
</html>

View file

@ -65,7 +65,7 @@
assert_greater_than(timeUpdateCount, 2, "timeUpdateCount");
test.done();
});
}, "Test HTMLVideoElement.getVideoPlaybackQuality() with MediaSource API", {timeout: 5000});
}, "Test HTMLVideoElement.getVideoPlaybackQuality() with MediaSource API");
</script>
</body>
</html>

View file

@ -38,7 +38,7 @@
mediaSource.endOfStream();
mediaElement.play();
});
}, "Test normal playback case with MediaSource API", {timeout: 5000});
}, "Test normal playback case with MediaSource API");
</script>
</body>
</html>

View file

@ -63,7 +63,7 @@
test.done();
});
}, 'Test seeking to a new location before transitioning beyond HAVE_METADATA.', {timeout: 10000} );
}, 'Test seeking to a new location before transitioning beyond HAVE_METADATA.');
mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
{
@ -136,7 +136,7 @@
assert_greater_than(mediaElement.readyState, mediaElement.HAVE_CURRENT_DATA, 'Greater than HAVE_CURRENT_DATA');
test.done();
});
}, 'Test seeking to a new location during a pending seek.', {timeout: 10000} );
}, 'Test seeking to a new location during a pending seek.');
</script>
</body>
</html>

View file

@ -1,6 +1,4 @@
(function(window) {
setup({ timeout: 12000 });
var SEGMENT_INFO_LIST = [
{
url: 'mp4/test.mp4',

View file

@ -10,7 +10,7 @@
<div id="test"></div>
<div id="log">FAILED (This TC requires JavaScript enabled)</div>
<script id="async-script" async src="scripts/include-2.js?pipe=trickle(d1)"></script>
<script id="async-script" async src="scripts/include-2.js?pipe=trickle(d2)"></script>
<script>
var t = async_test();

View file

@ -0,0 +1,9 @@
<!DOCTYPE html>
<head>
<title>Referrer-Policy Web Platform Tests - README</title>
</head>
<body>
<p>
TODO(burnik): Instructions on how to write tests for Referrer-Policy.
</p>
</body>

View file

@ -0,0 +1,28 @@
// NOTE: This method only strips the fragment and is not in accordance to the
// recommended draft specification:
// https://w3c.github.io/webappsec/specs/referrer-policy/#null
// TODO(burnik): Implement this helper as defined by spec once added scenarios
// for URLs containing username/password/etc.
function stripUrlForUseAsReferrer(url) {
return url.replace(/#.*$/, "");
}
function parseUrlQueryString(queryString) {
var queries = queryString.replace(/^\?/, "").split("&");
var params = {};
for (var i in queries) {
var kvp = queries[i].split("=");
params[kvp[0]] = kvp[1];
}
return params;
};
function appendIframeToBody(url) {
var iframe = document.createElement("iframe");
iframe.src = url;
document.body.appendChild(iframe);
return iframe;
}

View file

@ -0,0 +1,159 @@
<!DOCTYPE html>
<html>
<head>
<title>Check that sub-resource gets the referrer URL when no explicit
Referrer Policy is set.</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<!-- Common global functions for referrer-policy tests. -->
<script src="../generic/common.js"></script>
</head>
<body>
<h1>Check that sub-resource gets the referrer URL when no explicit Referrer
Policy is set.</h1>
<p>This page loads sub-resources (iframes) and waits for messages containing
referrer URLs from children.</p>
<script>
var documentUrl = document.location.toString();
// Referrer policy can also be defined via meta tag of parent.
// TODO(burnik): For now we use the DOM element itself as we expect it not
// to be explicitly defined on the page. We should use the content
// attribute value instead.
var documentMetaReferrer = document.querySelector("meta[name=referrer]");
// The referrer URL should be this document's URL adjusted according to
// this section:
// https://w3c.github.io/webappsec/specs/referrer-policy/#strip-url
var expectedReferrerUrl = stripUrlForUseAsReferrer(documentUrl);
// Path to the sub-resource page which reports back it's own context.
var subresourceUrlPath = "/referrer-policy/no-referrer-policy" +
"/no-referrer-policy.subresource.py";
// Define all the test definitions here to create correspoding test
// arrangements. Each test arrangement will have it's own iframe and ID
// passed by URL. The ID should be unique as it identifies the message
// coming back from the iframe and matches the corressponding test to be
// run.
var scenarios = [
{
id: "same-origin",
url: location.protocol + "//" + location.hostname + ":" +
location.port + subresourceUrlPath,
metaReferrer: documentMetaReferrer,
expectedReferrerUrl: expectedReferrerUrl,
description: "Refrerer URL is passed to sub-resource (iframe) of " +
"same-origin."
},
{
id: "cross-origin",
url: location.protocol + "//www1." + location.hostname + ":" +
location.port + subresourceUrlPath,
metaReferrer: documentMetaReferrer,
expectedReferrerUrl: expectedReferrerUrl,
description: "Refrerer URL is passed to sub-resource (iframe) of " +
"cross-origin."
}
];
//////////////////////////////////////////////////////////////////////////
// Rest of the script arranges and runs all the tests defined above.
//////////////////////////////////////////////////////////////////////////
// Creates a test arrangement from a test scenario.
function arrangeScenario(scenario) {
var test = async_test(scenario.description);
var subresourceUrl = scenario.url + "?id=" + scenario.id;
var testArrangement = {
scenario:scenario,
test:test,
subresourceUrl:subresourceUrl
};
return testArrangement;
}
// Asserts the values for an iframe response message and matched test
// arrangement.
function assertScenario(message, testArrangement) {
// Defense: Making sure the message and test arrangement are up to date.
testArrangement.test.step(function() {
assert_equals(Object.keys(message).length, 4);
assert_own_property(message, "id");
assert_own_property(message, "location");
assert_own_property(message, "referrer");
assert_own_property(message, "headers");
assert_own_property(message.headers, "referer");
assert_equals(Object.keys(testArrangement).length, 3);
assert_own_property(testArrangement, "scenario");
assert_own_property(testArrangement, "test");
assert_own_property(testArrangement, "subresourceUrl");
assert_equals(Object.keys(testArrangement.scenario).length, 5);
assert_own_property(testArrangement.scenario, "id");
assert_own_property(testArrangement.scenario, "url");
assert_own_property(testArrangement.scenario, "metaReferrer");
assert_own_property(testArrangement.scenario, "expectedReferrerUrl");
assert_own_property(testArrangement.scenario, "description");
}, "Running a valid test scenario.");
testArrangement.test.step(function() {
// TODO(burnik): This check should be specified by the scenario
// itself. For now we only expect that there is no CSP so neither is
// the referrer policy explicitly defined via HTTP headers.
assert_not_exists(message.headers, "content-security-policy",
"No referrer policy is set.");
// The meta defined refferer should also not exist.
assert_equals(testArrangement.scenario.metaReferrer, null);
}, "No referrer policy is explicity defined via HTTP headers or meta.")
testArrangement.test.step(function() {
// Sanity check - location of iframe matches reported location.
assert_equals(message.location, testArrangement.subresourceUrl,
"Child reported location.");
// Child reports the referrer URL available from DOM.
assert_equals(message.referrer,
testArrangement.scenario.expectedReferrerUrl,
"Child reported referrer.");
// Also check the request headers reported from the server.
assert_equals(message.headers.referer,
testArrangement.scenario.expectedReferrerUrl,
"Child reported referrer (from server).");
}, "Referrer URL is passed to the sub-resource (iframe).");
testArrangement.test.done();
}
// Using a map to easily find and run the test corresponding to the
// received message ID (iframe).
var testArrangementMap = {};
// With this handler we receive all the messages from the iframes.
// We identify the source and appropriate test arrangement to be run via
// the provided message ID.
window.addEventListener("message", function (event) {
var childMessage = event.data;
var testArrangement = testArrangementMap[childMessage.id];
// Run the test for this sub-resource.
assertScenario(childMessage, testArrangement);
});
// Map all test arrangements by ID and append iframes.
for (var i in scenarios) {
var testArrangement = arrangeScenario(scenarios[i]);
testArrangementMap[scenarios[i].id] = testArrangement;
appendIframeToBody(testArrangement.subresourceUrl);
}
</script>
<div id="log"></div>
</body>
</html>

View file

@ -0,0 +1,15 @@
import os, json
def main(request, response):
script_directory = os.path.dirname(os.path.abspath(__file__))
template_basename = "no-referrer-policy.subresource.template.html"
template_filename = os.path.join(script_directory, template_basename);
with open(template_filename) as f:
template = f.read()
headers_as_json = json.dumps(request.headers)
exported_headers = "var SERVER_REQUEST_HEADERS = " + headers_as_json + ";"
rendered_html = template % {"headers": headers_as_json}
return response.headers, rendered_html

View file

@ -0,0 +1,31 @@
<!DOCTYPE html>
<html>
<head>
<title>This page reports back it's request details the parent frame</title>
<!-- Common global functions for referrer-policy tests. -->
<script src="../generic/common.js"></script>
</head>
<body>
<h2>This page reports back it's request details to the parent frame.</h2>
<script>
// Notice: This is filled in from server side.
var SERVER_REQUEST_HEADERS = %(headers)s;
var query = parseUrlQueryString(document.location.search)
// Note: Read the ID from the query section of this page's URL.
// The ID is used to identify the sender of the message in the parent.
var pageInfo = {
id: query.id,
location: document.location.toString(),
referrer: document.referrer,
headers: SERVER_REQUEST_HEADERS
};
// Notify parent frame.
parent.postMessage(pageInfo, "*");
</script>
</body>
</html>

View file

@ -56,6 +56,19 @@ function constValue (cnt) {
return cnt.value;
}
function minOverloadLength(overloads) {
if (!overloads.length) {
return 0;
}
return overloads.map(function(attr) {
return attr.arguments ? attr.arguments.filter(function(arg) {
return !arg.optional && !arg.variadic;
}).length : 0;
})
.reduce(function(m, n) { return Math.min(m, n); });
}
/// IdlArray ///
// Entry point
self.IdlArray = function()
@ -754,22 +767,7 @@ IdlInterface.prototype.test_self = function()
var constructors = this.extAttrs
.filter(function(attr) { return attr.name == "Constructor"; });
var expected_length;
if (!constructors.length) {
// "If the [Constructor] extended attribute, does not appear on
// the interface definition, then the value is 0."
expected_length = 0;
} else {
// "Otherwise, the value is determined as follows: . . .
// "Return the length of the shortest argument list of the
// entries in S."
expected_length = constructors.map(function(attr) {
return attr.arguments ? attr.arguments.filter(function(arg) {
return !arg.optional;
}).length : 0;
})
.reduce(function(m, n) { return Math.min(m, n); });
}
var expected_length = minOverloadLength(constructors);
assert_equals(self[this.name].length, expected_length, "wrong value for " + this.name + ".length");
}.bind(this), this.name + " interface object length");
}
@ -1122,12 +1120,10 @@ IdlInterface.prototype.do_member_operation_asserts = function(memberHolderObject
// ". . .
// "Return the length of the shortest argument list of the
// entries in S."
//
// TODO: Doesn't handle overloading or variadic arguments.
assert_equals(memberHolderObject[member.name].length,
member.arguments.filter(function(arg) {
return !arg.optional;
}).length,
minOverloadLength(this.members.filter(function(m) {
return m.type == "operation" && m.name == member.name;
})),
"property has wrong .length");
// Make some suitable arguments
@ -1460,13 +1456,12 @@ IdlInterface.prototype.test_interface_of = function(desc, obj, exception, expect
{
assert_false(member.name in obj);
}
var minLength = minOverloadLength(this.members.filter(function(m) {
return m.type == "operation" && m.name == member.name;
}));
var args = [];
for (var i = 0; i < member.arguments.length; i++)
{
if (member.arguments[i].optional)
{
break;
}
for (var i = 0; i < minLength; i++) {
assert_throws(new TypeError(), function()
{
obj[member.name].apply(obj, args);

View file

@ -368,8 +368,20 @@ policies and contribution forms [3].
self.addEventListener("message",
function(event) {
if (event.data.type && event.data.type === "connect") {
if (event.ports && event.ports[0]) {
// If a MessageChannel was passed, then use it to
// send results back to the main window. This
// allows the tests to work even if the browser
// does not fully support MessageEvent.source in
// ServiceWorkers yet.
this_obj._add_message_port(event.ports[0]);
event.ports[0].start();
} else {
// If there is no MessageChannel, then attempt to
// use the MessageEvent.source to send results
// back to the main window.
this_obj._add_message_port(event.source);
}
}
});
@ -1476,15 +1488,24 @@ policies and contribution forms [3].
var message_port;
if (is_service_worker(worker)) {
if (window.MessageChannel) {
// The ServiceWorker's implicit MessagePort is currently not
// reliably accessible from the ServiceWorkerGlobalScope due to
// Blink setting MessageEvent.source to null for messages sent via
// ServiceWorker.postMessage(). Until that's resolved, create an
// explicit MessageChannel and pass one end to the worker.
// Blink setting MessageEvent.source to null for messages sent
// via ServiceWorker.postMessage(). Until that's resolved,
// create an explicit MessageChannel and pass one end to the
// worker.
var message_channel = new MessageChannel();
message_port = message_channel.port1;
message_port.start();
worker.postMessage({type: "connect"}, [message_channel.port2]);
} else {
// If MessageChannel is not available, then try the
// ServiceWorker.postMessage() approach using MessageEvent.source
// on the other end.
message_port = navigator.serviceWorker;
worker.postMessage({type: "connect"});
}
} else if (is_shared_worker(worker)) {
message_port = worker.port;
} else {
@ -2335,7 +2356,15 @@ policies and contribution forms [3].
AssertionError.prototype = Object.create(Error.prototype);
AssertionError.prototype.get_stack = function() {
var lines = new Error().stack.split("\n");
var stack = new Error().stack;
if (!stack) {
try {
throw new Error();
} catch (e) {
stack = e.stack;
}
}
var lines = stack.split("\n");
var rv = [];
var re = /\/resources\/testharness\.js/;
var i = 0;

View file

@ -103,14 +103,6 @@ var vary_entries = [
request: new Request('http://example.com/c'),
response: new Response('',
{headers: {'Vary': 'Cookies'}})
},
{
name: 'vary_wildcard',
request: new Request('http://example.com/c',
{headers: {'Cookies': 'x', 'X-Key': '1'}}),
response: new Response('',
{headers: {'Vary': '*'}})
}
];
@ -311,7 +303,6 @@ prepopulated_cache_test(vary_entries, function(cache, entries) {
assert_array_equivalent(
result,
[
entries.vary_wildcard.response,
entries.vary_cookie_absent.response
],
'Cache.matchAll should exclude matches if a vary header is ' +
@ -328,7 +319,6 @@ prepopulated_cache_test(vary_entries, function(cache, entries) {
assert_array_equivalent(
result,
[
entries.vary_wildcard.response
],
'Cache.matchAll should exclude matches if a vary header is ' +
'missing in the cached request, but is present in the query ' +
@ -355,7 +345,6 @@ prepopulated_cache_test(vary_entries, function(cache, entries) {
assert_object_in_array(
result,
[
entries.vary_wildcard.response,
entries.vary_cookie_absent.response
],
'Cache.match should honor "Vary" header.');
@ -372,7 +361,6 @@ prepopulated_cache_test(vary_entries, function(cache, entries) {
entries.vary_cookie_is_cookie.response,
entries.vary_cookie_is_good.response,
entries.vary_cookie_absent.response,
entries.vary_wildcard.response
],
'Cache.matchAll should honor "ignoreVary" parameter.');
});

View file

@ -283,12 +283,35 @@ cache_test(function(cache) {
'[https://fetch.spec.whatwg.org/#dom-body-bodyused] ' +
'Response.bodyUsed should be initially false.');
return response.text().then(function() {
assert_false(
assert_true(
response.bodyUsed,
'[https://fetch.spec.whatwg.org/#concept-body-consume-body] ' +
'The text() method should not set "body passed" flag.');
return cache.put(new Request(test_url), response);
'The text() method should set "body used" flag.');
return assert_promise_rejects(
cache.put(new Request(test_url), response),
new TypeError,
'[https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#cache-put] ' +
'Cache put should reject with TypeError when Response ' +
'body is already used.');
});
}, 'Cache.put with a used response body');
cache_test(function(cache) {
return assert_promise_rejects(
cache.put(new Request(test_url),
new Response(test_body, { headers: { VARY: '*' }})),
new TypeError(),
'Cache.put should reject VARY:* Responses with a TypeError.');
}, 'Cache.put with a VARY:* Response');
cache_test(function(cache) {
return assert_promise_rejects(
cache.put(new Request(test_url),
new Response(test_body,
{ headers: { VARY: 'Accept-Language,*' }})),
new TypeError(),
'Cache.put should reject Responses with an embedded VARY:* with a ' +
'TypeError.');
}, 'Cache.put with an embedded VARY:* Response');
done();

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>Cache.add and Cache.addAll</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-add">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../service-workers/resources/test-helpers.js"></script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>Cache.delete</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-delete">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../service-workers/resources/test-helpers.js"></script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>CacheStorage.keys</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-storage">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../service-workers/resources/test-helpers.js"></script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>CacheStorage.match</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-storage-match">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../service-workers/resources/test-helpers.js"></script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>CacheStorage</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-storage">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../service-workers/resources/test-helpers.js"></script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>Cache Storage: Cache.add and Cache.addAll</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-add">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../resources/testharness-helpers.js"></script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>Cache Storage: Cache.delete</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-delete">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../resources/testharness-helpers.js"></script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>Cache Storage: CacheStorage.keys</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-storage">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../resources/testharness-helpers.js"></script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>Cache Storage: CacheStorage.match</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-storage-match">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../resources/testharness-helpers.js"></script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>Cache Storage: CacheStorage</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-storage">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../resources/testharness-helpers.js"></script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>Cache Storage: Verify access in sandboxed iframes</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-storage">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../resources/testharness-helpers.js"></script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>Cache.add and Cache.addAll</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-add">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>Cache.delete</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-delete">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>CacheStorage.keys</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-storage">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>CacheStorage.match</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-storage-match">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<title>CacheStorage</title>
<link rel="help" href="https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#cache-storage">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>

View file

@ -1,6 +1,6 @@
<!doctype html>
<meta charset=utf-8>
<title>Web Animations API: AnimationTimeline tests</title>
<title>Web Animations API: DocumentTimeline tests</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>

View file

@ -1,15 +1,18 @@
<!doctype html>
<meta charset=utf-8>
<title>Web Animations API: AnimationTimeline tests</title>
<title>Web Animations API: DocumentTimeline tests</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/WebIDLParser.js"></script>
<script src="/resources/idlharness.js"></script>
<div id="log"></div>
<script type="text/plain" id="AnimationTimeline-IDL">
<script type="text/plain" id="DocumentTimeline-IDL">
interface AnimationTimeline {
readonly attribute double? currentTime;
};
interface DocumentTimeline : AnimationTimeline {
};
</script>
<script>
'use strict';
@ -18,8 +21,8 @@ var idlArray;
test(function() {
idlArray = new IdlArray();
idlArray.add_idls(
document.getElementById('AnimationTimeline-IDL').textContent);
idlArray.add_objects( { AnimationTimeline: ['document.timeline'] } );
document.getElementById('DocumentTimeline-IDL').textContent);
idlArray.add_objects( { DocumentTimeline: ['document.timeline'] } );
});
idlArray.test();

View file

@ -13,20 +13,18 @@ document.body.appendChild(iframe);
</script>
<div id=log></div>
<script>
var t = async_test();
onload = t.step_func(function() {
onload = function() {
window[0].postMessage(1, location.href, []);
window[1].postMessage(2, url, []);
var i = 0;
onmessage = t.step_func(function(e) {
onmessage = function(e) {
i++;
assert_equals(e.data[0], i);
assert_equals(e.data[1], location.protocol + '//' + location.host);
if (i === 2) {
t.done();
done();
}
});
setTimeout(t.step_func(function() { assert_unreached("Only got " + i + " events before timeout, expected 2") }), 1000);
});
};
};
</script>

View file

@ -13,20 +13,18 @@ document.body.appendChild(iframe);
</script>
<div id=log></div>
<script>
var t = async_test();
onload = t.step_func(function() {
onload = function() {
window[0].postMessage(1, '*', []);
window[1].postMessage(2, '*', []);
var i = 0;
onmessage = t.step_func(function(e) {
onmessage = function(e) {
i++;
assert_equals(e.data[0], i);
assert_equals(e.data[1], location.protocol + '//' + location.host);
if (i === 2) {
t.done();
done();
}
});
setTimeout(t.step_func(function() { assert_unreached("Only got " + i + " events before timeout, expected 2") }), 1000);
});
};
};
</script>

View file

@ -13,20 +13,18 @@ document.body.appendChild(iframe);
</script>
<div id=log></div>
<script>
var t = async_test();
onload = t.step_func(function() {
onload = function() {
window[0].postMessage(1, location.href);
window[1].postMessage(2, url);
var i = 0;
onmessage = t.step_func(function(e) {
onmessage = function(e) {
i++;
assert_equals(e.data[0], i);
assert_equals(e.data[1], location.protocol + '//' + location.host);
if (i == 2) {
t.done();
done();
}
});
setTimeout(t.step_func(function() {assert_unreached("Only got " + i + " events before timeout, expected 2")}), 1000);
});
};
};
</script>

View file

@ -13,20 +13,18 @@ document.body.appendChild(iframe);
</script>
<div id=log></div>
<script>
var t = async_test();
onload = t.step_func(function() {
onload = function() {
window[0].postMessage(1, '*');
window[1].postMessage(2, '*');
var i = 0;
onmessage = t.step_func(function(e) {
onmessage = function(e) {
i++;
assert_equals(e.data[0], i);
assert_equals(e.data[1], location.protocol + '//' + location.host);
if (i === 2) {
t.done();
done();
}
});
setTimeout(t.step_func(function() { assert_unreached("Only got " + i + " events before timeout, expected 2")}), 1000);
});
};
};
</script>

View file

@ -0,0 +1,149 @@
<!doctype html>
<!--
This test uses no media, and thus does not require fake media devices.
-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>RTCPeerConnection No-Media Connection Test</title>
</head>
<body>
<div id="log"></div>
<h2>iceConnectionState info</h2>
<div id="stateinfo">
</div>
<!-- These files are in place when executing on W3C. -->
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/vendor-prefix.js"
data-prefixed-objects=
'[{"ancestors":["window"], "name":"RTCPeerConnection"},
{"ancestors":["window"], "name":"RTCSessionDescription"},
{"ancestors":["window"], "name":"RTCIceCandidate"}]'
>
</script>
<script type="text/javascript">
var test = async_test('Can set up a basic WebRTC call with no data.');
var gFirstConnection = null;
var gSecondConnection = null;
var onOfferCreated = test.step_func(function(offer) {
// TODO: Switch to promise-based interface.
gFirstConnection.setLocalDescription(offer, ignoreSuccess,
failed('setLocalDescription first'));
// This would normally go across the application's signaling solution.
// In our case, the "signaling" is to call this function.
receiveCall(offer.sdp);
});
function receiveCall(offerSdp) {
var parsedOffer = new RTCSessionDescription({ type: 'offer',
sdp: offerSdp });
// These functions use the legacy interface extensions to RTCPeerConnection.
// TODO: Switch to promise-based interfaces.
gSecondConnection.setRemoteDescription(parsedOffer,
function() {
gSecondConnection.createAnswer(onAnswerCreated,
failed('createAnswer'));
},
failed('setRemoteDescription second'));
};
var onAnswerCreated = test.step_func(function(answer) {
gSecondConnection.setLocalDescription(answer, ignoreSuccess,
failed('setLocalDescription second'));
// Similarly, this would go over the application's signaling solution.
handleAnswer(answer.sdp);
});
function handleAnswer(answerSdp) {
var parsedAnswer = new RTCSessionDescription({ type: 'answer',
sdp: answerSdp });
gFirstConnection.setRemoteDescription(parsedAnswer, ignoreSuccess,
failed('setRemoteDescription first'));
};
var onIceCandidateToFirst = test.step_func(function(event) {
// If event.candidate is null = no more candidates.
if (event.candidate) {
var candidate = new RTCIceCandidate(event.candidate);
gSecondConnection.addIceCandidate(candidate);
}
});
var onIceCandidateToSecond = test.step_func(function(event) {
if (event.candidate) {
var candidate = new RTCIceCandidate(event.candidate);
gFirstConnection.addIceCandidate(candidate);
}
});
var onRemoteStream = test.step_func(function(event) {
assert_unreached('WebRTC received a stream when there was none');
});
var onIceConnectionStateChange = test.step_func(function(event) {
assert_equals(event.type, 'iceconnectionstatechange');
var stateinfo = document.getElementById('stateinfo');
stateinfo.innerHTML = 'First: ' + gFirstConnection.iceConnectionState
+ '<br>Second: ' + gSecondConnection.iceConnectionState;
// Note: All these combinations are legal states indicating that the
// call has connected. All browsers should end up in completed/completed,
// but as of this moment, we've chosen to terminate the test early.
// TODO: Revise test to ensure completed/completed is reached.
if (gFirstConnection.iceConnectionState == 'connected' &&
gSecondConnection.iceConnectionState == 'connected') {
test.done()
}
if (gFirstConnection.iceConnectionState == 'connected' &&
gSecondConnection.iceConnectionState == 'completed') {
test.done()
}
if (gFirstConnection.iceConnectionState == 'completed' &&
gSecondConnection.iceConnectionState == 'connected') {
test.done()
}
if (gFirstConnection.iceConnectionState == 'completed' &&
gSecondConnection.iceConnectionState == 'completed') {
test.done()
}
});
// Returns a suitable error callback.
function failed(function_name) {
return test.step_func(function() {
assert_unreached('WebRTC called error callback for ' + function_name);
});
}
// Returns a suitable do-nothing.
function ignoreSuccess(function_name) {
}
// This function starts the test.
test.step(function() {
gFirstConnection = new RTCPeerConnection(null);
gFirstConnection.onicecandidate = onIceCandidateToFirst;
gFirstConnection.oniceconnectionstatechange = onIceConnectionStateChange;
gSecondConnection = new RTCPeerConnection(null);
gSecondConnection.onicecandidate = onIceCandidateToSecond;
gSecondConnection.onaddstream = onRemoteStream;
gSecondConnection.oniceconnectionstatechange = onIceConnectionStateChange;
// The offerToReceiveVideo is necessary and sufficient to make
// an actual connection.
// TODO: Use a promise-based API. This is legacy.
gFirstConnection.createOffer(onOfferCreated, failed('createOffer'),
{offerToReceiveVideo: true});
});
</script>
</body>
</html>

View file

@ -4,19 +4,19 @@
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<script>
async_test(function(t) {
async_test(function() {
var testResult;
var worker = new Worker('./support/WorkerTerminate.js');
worker.onmessage = function(e) {
worker.onmessage = this.step_func(function(e) {
testResult = e.data;
if (testResult >= 10000) {
worker.terminate();
worker.onmessage = t.unreached_func('Unexpected message event');
setTimeout(t.step_func_done(function() {
worker.onmessage = this.unreached_func('Unexpected message event');
setTimeout(this.step_func_done(function() {
assert_equals(testResult, 10000);
}), 100);
}
};
});
worker.postMessage("ping");
});
</script>

View file

@ -12,23 +12,15 @@ close();
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
async_test(function() {
var gotMessage = false;
var gotError = false;
var worker = new Worker('#');
worker.onmessage = function(e) {
gotMessage = true;
};
worker.onerror = function(e) {
gotError = true;
};
worker.postMessage(1);
setTimeout(this.step_func(function() {
assert_false(gotMessage, 'got message');
assert_true(gotError, 'got error');
this.done();
}), 500);
});
var worker = new Worker('#');
worker.onmessage = function(e) {
assert_unreached("Got message");
};
worker.onerror = function(e) {
assert_unreached("Got error");
};
worker.postMessage(1);
setTimeout(done, 2000);
</script>
<!--
*/

View file

@ -18,22 +18,14 @@ var interval2 = setInterval(function() {
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
async_test(function() {
var gotMessage = false;
var gotError = false;
var worker = new Worker('#');
worker.onmessage = function(e) {
gotMessage = true;
};
worker.onerror = function(e) {
gotError = true;
};
setTimeout(this.step_func(function() {
assert_false(gotMessage, 'got message');
assert_true(gotError, 'got error');
this.done();
}), 500);
});
var worker = new Worker('#');
worker.onmessage = function(e) {
assert_unreached("Got message");
};
worker.onerror = function(e) {
assert_unreached("Got error");
};
setTimeout(done, 2000);
</script>
<!--
*/

View file

@ -14,27 +14,15 @@ setTimeout(x, 0);
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
setup({allow_uncaught_exception: true});
async_test(function() {
var gotMessage = false;
var gotError = false;
var worker = new Worker('#');
worker.onmessage = function(e) {
gotMessage = true;
};
worker.onerror = function(e) {
gotError = true;
};
setTimeout(this.step_func(function() {
assert_false(gotMessage, 'got message');
assert_true(gotError, 'got error');
this.done();
}), 500);
});
var worker = new Worker('#');
worker.onmessage = function(e) {
assert_unreached("Got message");
};
worker.onerror = function(e) {
assert_unreached("Got error");
};
setTimeout(done, 2000);
</script>
<!--
*/
//-->