mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1163709 - Update web-platform-tests to revision 5aa79b303c81164549041d1bd9f7887390a10f72, a=testonly
This commit is contained in:
parent
d2a4a1c342
commit
0a3da2cb68
@ -16123,6 +16123,10 @@
|
||||
"path": "quirks-mode/unitless-length.html",
|
||||
"url": "/quirks-mode/unitless-length.html"
|
||||
},
|
||||
{
|
||||
"path": "referrer-policy/no-referrer-policy/no-referrer-policy.html",
|
||||
"url": "/referrer-policy/no-referrer-policy/no-referrer-policy.html"
|
||||
},
|
||||
{
|
||||
"path": "resource-timing/test_resource_timing.html",
|
||||
"url": "/resource-timing/test_resource_timing.html"
|
||||
@ -24841,7 +24845,7 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"rev": "28de405307d9613052ccd1228be7888e109738a6",
|
||||
"rev": "5aa79b303c81164549041d1bd9f7887390a10f72",
|
||||
"url_base": "/",
|
||||
"version": 2
|
||||
}
|
@ -1 +1 @@
|
||||
6e958cb0c757bc80226f22d98a93f7fec974aa6c
|
||||
36bf12e75b3d8fc5ac90187f21d50a3eed5a0442
|
@ -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");
|
||||
|
||||
|
@ -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++) {
|
||||
|
@ -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 #')
|
||||
|
||||
|
@ -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>
|
||||
|
@ -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()
|
||||
}
|
||||
|
@ -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()
|
||||
})
|
||||
}
|
||||
|
@ -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" };
|
||||
|
@ -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);
|
||||
});
|
||||
|
@ -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
|
||||
|
@ -10,18 +10,18 @@
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<meta name='flags' content='dom'>
|
||||
<style type='text/css'>
|
||||
#colonlangcontroltest { color: red; font-weight: bold; width: 400px; }
|
||||
#colonlangcontroltest:lang(xx) { display:none; }
|
||||
#colonlangcontroltest { color: red; font-weight: bold; width: 400px; }
|
||||
#colonlangcontroltest:lang(xx) { display:none; }
|
||||
.test div { width: 50px; }
|
||||
|
||||
#box:lang(ko) { width: 100px; }
|
||||
#box:lang(zh) { width: 100px; }
|
||||
#box:lang(ja) { width: 100px; }
|
||||
|
||||
/* styling for debugging related notes */
|
||||
.notes span:lang(ko) { background-color: #0000FF; color: white; padding: 0 5px; }
|
||||
.notes span:lang(zh) { background-color: #0000FF; color: white; padding: 0 5px; }
|
||||
.notes span:lang(ja) { background-color: #0000FF; color: white; padding: 0 5px; }
|
||||
/* styling for debugging related notes */
|
||||
.notes span:lang(ko) { background-color: #0000FF; color: white; padding: 0 5px; }
|
||||
.notes span:lang(zh) { background-color: #0000FF; color: white; padding: 0 5px; }
|
||||
.notes span:lang(ja) { background-color: #0000FF; color: white; padding: 0 5px; }
|
||||
|
||||
</style>
|
||||
</head>
|
||||
|
@ -4,9 +4,9 @@
|
||||
<head>
|
||||
<title>Pattern Attribute</title>
|
||||
<meta name=viewport content="width=device-width, maximum-scale=1.0, user-scalable=no" />
|
||||
<link rel="author" title="Fabrice Clari" href="mailto:f.clari@inno-group.com">
|
||||
<link rel="author" title="Dimitri Bocquet" href="mailto:Dimitri.Bocquet@mosquito-fp7.eu">
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#attr-input-pattern">
|
||||
<link rel="author" title="Fabrice Clari" href="mailto:f.clari@inno-group.com">
|
||||
<link rel="author" title="Dimitri Bocquet" href="mailto:Dimitri.Bocquet@mosquito-fp7.eu">
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#attr-input-pattern">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
@ -14,20 +14,20 @@
|
||||
<body>
|
||||
|
||||
|
||||
<h1>Pattern Attribute</h1>
|
||||
<div style="display: none">
|
||||
<input pattern="[a-z]{3}" value="abcd" title="three letters max"/>
|
||||
</div>
|
||||
<h1>Pattern Attribute</h1>
|
||||
<div style="display: none">
|
||||
<input pattern="[a-z]{3}" value="abcd" title="three letters max"/>
|
||||
</div>
|
||||
|
||||
<div id="log">
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
<script type="text/javascript">
|
||||
|
||||
|
||||
test(function() {assert_equals(document.getElementsByTagName("input")[0].getAttribute("pattern"), "[a-z]{3}")}, "pattern attribute support on input element");
|
||||
test(function() {assert_equals(document.getElementsByTagName("input")[0].getAttribute("pattern"), "[a-z]{3}")}, "pattern attribute support on input element");
|
||||
|
||||
</script>
|
||||
</script>
|
||||
|
||||
</body>
|
||||
|
||||
|
@ -4,9 +4,9 @@
|
||||
<head>
|
||||
<title>Required Attribute</title>
|
||||
<meta name=viewport content="width=device-width, maximum-scale=1.0, user-scalable=no" />
|
||||
<link rel="author" title="Fabrice Clari" href="mailto:f.clari@inno-group.com">
|
||||
<link rel="author" title="Dimitri Bocquet" href="mailto:Dimitri.Bocquet@mosquito-fp7.eu">
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#attr-input-required">
|
||||
<link rel="author" title="Fabrice Clari" href="mailto:f.clari@inno-group.com">
|
||||
<link rel="author" title="Dimitri Bocquet" href="mailto:Dimitri.Bocquet@mosquito-fp7.eu">
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#attr-input-required">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
@ -14,20 +14,20 @@
|
||||
<body>
|
||||
|
||||
|
||||
<h1>Required Attribute</h1>
|
||||
<div style="display: none">
|
||||
<input type="text" required="required" />
|
||||
</div>
|
||||
<h1>Required Attribute</h1>
|
||||
<div style="display: none">
|
||||
<input type="text" required="required" />
|
||||
</div>
|
||||
|
||||
<div id="log">
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
<script type="text/javascript">
|
||||
|
||||
|
||||
test(function() {assert_equals(document.getElementsByTagName("input")[0].getAttribute("required"), "required")}, "required attribute support on input element");
|
||||
test(function() {assert_equals(document.getElementsByTagName("input")[0].getAttribute("required"), "required")}, "required attribute support on input element");
|
||||
|
||||
</script>
|
||||
</script>
|
||||
|
||||
</body>
|
||||
|
||||
|
@ -4,9 +4,9 @@
|
||||
<head>
|
||||
<title>Search Input</title>
|
||||
<meta name=viewport content="width=device-width, maximum-scale=1.0, user-scalable=no" />
|
||||
<link rel="author" title="Fabrice Clari" href="mailto:f.clari@inno-group.com">
|
||||
<link rel="author" title="Dimitri Bocquet" href="mailto:Dimitri.Bocquet@mosquito-fp7.eu">
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-input-element">
|
||||
<link rel="author" title="Fabrice Clari" href="mailto:f.clari@inno-group.com">
|
||||
<link rel="author" title="Dimitri Bocquet" href="mailto:Dimitri.Bocquet@mosquito-fp7.eu">
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-input-element">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
@ -14,21 +14,21 @@
|
||||
<body>
|
||||
|
||||
|
||||
<h1>Search Input</h1>
|
||||
<input type="search" style="display:none" placeholder="Search..." />
|
||||
<h1>Search Input</h1>
|
||||
<input type="search" style="display:none" placeholder="Search..." />
|
||||
|
||||
<div id="log">
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
<script type="text/javascript">
|
||||
|
||||
|
||||
test(function() {assert_equals(document.getElementsByTagName("input")[0].type, "search")}, "search type support on input element", {
|
||||
"help" : "https://html.spec.whatwg.org/multipage/#dom-input-type" });
|
||||
test(function() {assert_equals(document.getElementsByTagName("input")[0].placeholder, "Search...")}, "placeholder attribute support on input element", {
|
||||
"help" : "https://html.spec.whatwg.org/multipage/#dom-input-placeholder" });
|
||||
test(function() {assert_equals(document.getElementsByTagName("input")[0].type, "search")}, "search type support on input element", {
|
||||
"help" : "https://html.spec.whatwg.org/multipage/#dom-input-type" });
|
||||
test(function() {assert_equals(document.getElementsByTagName("input")[0].placeholder, "Search...")}, "placeholder attribute support on input element", {
|
||||
"help" : "https://html.spec.whatwg.org/multipage/#dom-input-placeholder" });
|
||||
|
||||
</script>
|
||||
</script>
|
||||
|
||||
</body>
|
||||
|
||||
|
@ -1,84 +1,84 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Input tel</title>
|
||||
<link rel="author" title="Kazuki Kanamori" href="mailto:yogurito@gmail.com">
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#telephone-state-(type=tel)">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<title>Input tel</title>
|
||||
<link rel="author" title="Kazuki Kanamori" href="mailto:yogurito@gmail.com">
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#telephone-state-(type=tel)">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Input tel</h1>
|
||||
<input type="tel" id="novalue" />
|
||||
<input type="tel" id="value_with_LF" value="0
1" />
|
||||
<input type="tel" id="value_with_CR" value="0
1" />
|
||||
<input type="tel" id="value_with_CRLF" value="0

1" />
|
||||
<div id="log">
|
||||
</div>
|
||||
<h1>Input tel</h1>
|
||||
<input type="tel" id="novalue" />
|
||||
<input type="tel" id="value_with_LF" value="0
1" />
|
||||
<input type="tel" id="value_with_CR" value="0
1" />
|
||||
<input type="tel" id="value_with_CRLF" value="0

1" />
|
||||
<div id="log">
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
var element = document.getElementById('novalue');
|
||||
test(function(){
|
||||
assert_equals(element.type, 'tel');
|
||||
}, 'tel type supported on input element');
|
||||
test(function(){
|
||||
element.value = '0\u000A1';
|
||||
assert_equals(element.value, '01');
|
||||
}, 'User agents must not allow users to insert "LF" (U+000A)');
|
||||
test(function(){
|
||||
element.value = '0\u000D1';
|
||||
assert_equals(element.value, '01');
|
||||
}, 'User agents must not allow users to insert "CR" (U+000D)');
|
||||
<script type="text/javascript">
|
||||
var element = document.getElementById('novalue');
|
||||
test(function(){
|
||||
assert_equals(element.type, 'tel');
|
||||
}, 'tel type supported on input element');
|
||||
test(function(){
|
||||
element.value = '0\u000A1';
|
||||
assert_equals(element.value, '01');
|
||||
}, 'User agents must not allow users to insert "LF" (U+000A)');
|
||||
test(function(){
|
||||
element.value = '0\u000D1';
|
||||
assert_equals(element.value, '01');
|
||||
}, 'User agents must not allow users to insert "CR" (U+000D)');
|
||||
|
||||
element = document.getElementById('value_with_LF');
|
||||
test(function(){
|
||||
assert_equals(element.value, '01');
|
||||
}, 'The value attribute, if specified, must have a value that contains no "LF" (U+000A)');
|
||||
element = document.getElementById('value_with_LF');
|
||||
test(function(){
|
||||
assert_equals(element.value, '01');
|
||||
}, 'The value attribute, if specified, must have a value that contains no "LF" (U+000A)');
|
||||
|
||||
element = document.getElementById('value_with_CR');
|
||||
test(function(){
|
||||
assert_equals(element.value, '01');
|
||||
}, 'The value attribute, if specified, must have a value that contains no "CR" (U+000D)');
|
||||
element = document.getElementById('value_with_CR');
|
||||
test(function(){
|
||||
assert_equals(element.value, '01');
|
||||
}, 'The value attribute, if specified, must have a value that contains no "CR" (U+000D)');
|
||||
|
||||
test(function(){
|
||||
element = document.getElementById('novalue');
|
||||
element.value = '0\u000D\u000A1';
|
||||
assert_equals(element.value, '01');
|
||||
test(function(){
|
||||
element = document.getElementById('novalue');
|
||||
element.value = '0\u000D\u000A1';
|
||||
assert_equals(element.value, '01');
|
||||
|
||||
element = document.getElementById('value_with_CRLF');
|
||||
assert_equals(element.value, '01');
|
||||
}, 'The value sanitization algorithm is as follows: Strip line breaks from the value');
|
||||
element = document.getElementById('value_with_CRLF');
|
||||
assert_equals(element.value, '01');
|
||||
}, 'The value sanitization algorithm is as follows: Strip line breaks from the value');
|
||||
|
||||
element = document.getElementById('novalue');
|
||||
test(function(){
|
||||
element.value = '+811234';
|
||||
assert_equals(element.value, '+811234');
|
||||
}, 'Element can accept the phone number with plus sign(country code)');
|
||||
test(function(){
|
||||
element.value = '1234#5678';
|
||||
assert_equals(element.value, '1234#5678');
|
||||
}, 'Element can accept the phone number with hash mark(extension number)');
|
||||
test(function(){
|
||||
element.value = '123-456-789';
|
||||
assert_equals(element.value, '123-456-789');
|
||||
}, 'Element can accept the phone number with hyphen');
|
||||
test(function(){
|
||||
element.value = '123.456.789';
|
||||
assert_equals(element.value, '123.456.789');
|
||||
}, 'Element can accept the phone number with dots');
|
||||
test(function(){
|
||||
element.value = '1 23 4';
|
||||
assert_equals(element.value, '1 23 4');
|
||||
}, 'Element can accept the phone number with whitespace');
|
||||
test(function(){
|
||||
element.value = ' 1234 ';
|
||||
assert_equals(element.value, ' 1234 ');
|
||||
}, 'Element can accept the phone number with leading & following whitespaces');
|
||||
test(function(){
|
||||
element.value = '(03)12345678';
|
||||
assert_equals(element.value, '(03)12345678');
|
||||
}, 'Element can accept the phone number with parentheses(area code)');
|
||||
</script>
|
||||
element = document.getElementById('novalue');
|
||||
test(function(){
|
||||
element.value = '+811234';
|
||||
assert_equals(element.value, '+811234');
|
||||
}, 'Element can accept the phone number with plus sign(country code)');
|
||||
test(function(){
|
||||
element.value = '1234#5678';
|
||||
assert_equals(element.value, '1234#5678');
|
||||
}, 'Element can accept the phone number with hash mark(extension number)');
|
||||
test(function(){
|
||||
element.value = '123-456-789';
|
||||
assert_equals(element.value, '123-456-789');
|
||||
}, 'Element can accept the phone number with hyphen');
|
||||
test(function(){
|
||||
element.value = '123.456.789';
|
||||
assert_equals(element.value, '123.456.789');
|
||||
}, 'Element can accept the phone number with dots');
|
||||
test(function(){
|
||||
element.value = '1 23 4';
|
||||
assert_equals(element.value, '1 23 4');
|
||||
}, 'Element can accept the phone number with whitespace');
|
||||
test(function(){
|
||||
element.value = ' 1234 ';
|
||||
assert_equals(element.value, ' 1234 ');
|
||||
}, 'Element can accept the phone number with leading & following whitespaces');
|
||||
test(function(){
|
||||
element.value = '(03)12345678';
|
||||
assert_equals(element.value, '(03)12345678');
|
||||
}, 'Element can accept the phone number with parentheses(area code)');
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@ -4,43 +4,43 @@
|
||||
<head>
|
||||
<title>Input Time</title>
|
||||
<meta name=viewport content="width=device-width, maximum-scale=1.0, user-scalable=no" />
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-input-element">
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-input-element">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>Input Time</h1>
|
||||
<div style="display:none;">
|
||||
<input type="time "id="chkDefaultValue" />
|
||||
<input type="time" id="chkStep" />
|
||||
<input type="time" id="chkSetValueTest" />
|
||||
<input type="time" id="chkSupportAttribute" min="01:01:01.001" max="12:12:12.012" step="600" />
|
||||
</div>
|
||||
<div id="log">
|
||||
<h1>Input Time</h1>
|
||||
<div style="display:none;">
|
||||
<input type="time "id="chkDefaultValue" />
|
||||
<input type="time" id="chkStep" />
|
||||
<input type="time" id="chkSetValueTest" />
|
||||
<input type="time" id="chkSupportAttribute" min="01:01:01.001" max="12:12:12.012" step="600" />
|
||||
</div>
|
||||
<div id="log">
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
<script type="text/javascript">
|
||||
|
||||
/* check default value */
|
||||
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");}
|
||||
, "type attribute support on input element");
|
||||
, "type attribute support on input element");
|
||||
test(function(){assert_equals(document.getElementById('chkSupportAttribute').min, "01:01:01.001")}
|
||||
, "max attribute support on input element");
|
||||
, "max attribute support on input element");
|
||||
test(function(){assert_equals(document.getElementById('chkSupportAttribute').max, "12:12:12.012")}
|
||||
, "min attribute support on input element");
|
||||
, "min attribute support on input element");
|
||||
test(function(){assert_equals(document.getElementById("chkSupportAttribute").step, "600")}
|
||||
, "step attribute support on input element");
|
||||
, "step attribute support on input element");
|
||||
|
||||
/* check step up and down */
|
||||
var _StepTest = document.getElementById("chkStep");
|
||||
@ -48,160 +48,160 @@ test(function(){ assert_true(typeof(_StepTest.stepUp) ==="function" ) } , "ste
|
||||
test(function(){ assert_true(typeof(_StepTest.stepDown) ==="function" ) } , "stepDown function support on input Element");
|
||||
|
||||
test(function(){
|
||||
_StepTest.value = "12:00";
|
||||
_StepTest.step = "";
|
||||
_StepTest.stepUp();
|
||||
assert_equals(_StepTest.value,"12:01");
|
||||
_StepTest.value = "12:00";
|
||||
_StepTest.step = "";
|
||||
_StepTest.stepUp();
|
||||
assert_equals(_StepTest.value,"12:01");
|
||||
} , "stepUp step value empty on default step value ");
|
||||
|
||||
test(function(){
|
||||
_StepTest.value = "12:00";
|
||||
_StepTest.step = "";
|
||||
_StepTest.stepDown();
|
||||
assert_equals(_StepTest.value,"11:59");
|
||||
_StepTest.value = "12:00";
|
||||
_StepTest.step = "";
|
||||
_StepTest.stepDown();
|
||||
assert_equals(_StepTest.value,"11:59");
|
||||
}, "stepDown step value empty default step value");
|
||||
|
||||
test(function(){
|
||||
_StepTest.value = "12:00";
|
||||
_StepTest.step = "-600";
|
||||
_StepTest.stepUp();
|
||||
assert_equals(_StepTest.value, "12:01");
|
||||
_StepTest.value = "12:00";
|
||||
_StepTest.step = "-600";
|
||||
_StepTest.stepUp();
|
||||
assert_equals(_StepTest.value, "12:01");
|
||||
},"stepUp on step value minus");
|
||||
test(function(){
|
||||
_StepTest.value = "12:00";
|
||||
_StepTest.step = "-600";
|
||||
_StepTest.stepDown();
|
||||
assert_equals(_StepTest.value, "11:59");
|
||||
_StepTest.value = "12:00";
|
||||
_StepTest.step = "-600";
|
||||
_StepTest.stepDown();
|
||||
assert_equals(_StepTest.value, "11:59");
|
||||
},"stepDown on step value minus");
|
||||
|
||||
test(function(){
|
||||
_StepTest.value = "12:00";
|
||||
_StepTest.step = "0";
|
||||
_StepTest.stepUp();
|
||||
assert_equals(_StepTest.value, "12:01");
|
||||
_StepTest.value = "12:00";
|
||||
_StepTest.step = "0";
|
||||
_StepTest.stepUp();
|
||||
assert_equals(_StepTest.value, "12:01");
|
||||
} , "stepUp on step value zero ");
|
||||
test(function(){
|
||||
_StepTest.value = "12:00";
|
||||
_StepTest.step = "0";
|
||||
_StepTest.stepDown();
|
||||
assert_equals(_StepTest.value, "11:59");
|
||||
_StepTest.value = "12:00";
|
||||
_StepTest.step = "0";
|
||||
_StepTest.stepDown();
|
||||
assert_equals(_StepTest.value, "11:59");
|
||||
} , "stepDown on step value zero ");
|
||||
|
||||
test(function(){
|
||||
_StepTest.value = "00:00";
|
||||
_StepTest.step = "86399";
|
||||
_StepTest.stepUp();
|
||||
assert_equals(_StepTest.value, "23:59:59");
|
||||
_StepTest.value = "00:00";
|
||||
_StepTest.step = "86399";
|
||||
_StepTest.stepUp();
|
||||
assert_equals(_StepTest.value, "23:59:59");
|
||||
} , "stepUp on step value 24 hour");
|
||||
test(function(){
|
||||
_StepTest.value = "23:59:59";
|
||||
_StepTest.step = "86399";
|
||||
_StepTest.stepDown();
|
||||
assert_equals(_StepTest.value, "00:00:00");
|
||||
_StepTest.value = "23:59:59";
|
||||
_StepTest.step = "86399";
|
||||
_StepTest.stepDown();
|
||||
assert_equals(_StepTest.value, "00:00:00");
|
||||
} , "stepDown on step value 24 hour ");
|
||||
|
||||
test(function(){
|
||||
_StepTest.value = "12:00";
|
||||
_StepTest.step = "3600";
|
||||
_StepTest.stepUp();
|
||||
assert_equals(_StepTest.value, "13:00");
|
||||
_StepTest.value = "12:00";
|
||||
_StepTest.step = "3600";
|
||||
_StepTest.stepUp();
|
||||
assert_equals(_StepTest.value, "13:00");
|
||||
} , "stepUp on step value hour ");
|
||||
test(function(){
|
||||
_StepTest.value = "12:00";
|
||||
_StepTest.step = "3600";
|
||||
_StepTest.stepDown();
|
||||
assert_equals(_StepTest.value, "11:00");
|
||||
_StepTest.value = "12:00";
|
||||
_StepTest.step = "3600";
|
||||
_StepTest.stepDown();
|
||||
assert_equals(_StepTest.value, "11:00");
|
||||
} , "stepDown on step value hour ");
|
||||
|
||||
test(function(){
|
||||
_StepTest.value = "12:00";
|
||||
_StepTest.step = "1";
|
||||
_StepTest.stepUp();
|
||||
assert_equals(_StepTest.value, "12:00:01");
|
||||
_StepTest.value = "12:00";
|
||||
_StepTest.step = "1";
|
||||
_StepTest.stepUp();
|
||||
assert_equals(_StepTest.value, "12:00:01");
|
||||
} , "stepUp on step value second ");
|
||||
test(function(){
|
||||
_StepTest.value = "12:00";
|
||||
_StepTest.step = "1";
|
||||
_StepTest.stepDown();
|
||||
assert_equals(_StepTest.value, "11:59:59");
|
||||
_StepTest.value = "12:00";
|
||||
_StepTest.step = "1";
|
||||
_StepTest.stepDown();
|
||||
assert_equals(_StepTest.value, "11:59:59");
|
||||
} , "stepDown on step value second ");
|
||||
|
||||
test(function(){
|
||||
_StepTest.value = "12:00";
|
||||
_StepTest.step = "0.001";
|
||||
_StepTest.stepUp();
|
||||
assert_equals(_StepTest.value, "12:00:00.001");
|
||||
_StepTest.value = "12:00";
|
||||
_StepTest.step = "0.001";
|
||||
_StepTest.stepUp();
|
||||
assert_equals(_StepTest.value, "12:00:00.001");
|
||||
} , "stepUp on step value miri second ");
|
||||
test(function(){
|
||||
_StepTest.value = "12:00";
|
||||
_StepTest.step = "0.001";
|
||||
_StepTest.stepDown();
|
||||
assert_equals(_StepTest.value, "11:59:59.999");
|
||||
_StepTest.value = "12:00";
|
||||
_StepTest.step = "0.001";
|
||||
_StepTest.stepDown();
|
||||
assert_equals(_StepTest.value, "11:59:59.999");
|
||||
} , "stepDown on step value miri second ");
|
||||
|
||||
test(function(){
|
||||
_StepTest.value = "13:00:00";
|
||||
_StepTest.step = "1";
|
||||
_StepTest.stepUp(2);
|
||||
assert_equals(_StepTest.value, "13:00:02");
|
||||
_StepTest.value = "13:00:00";
|
||||
_StepTest.step = "1";
|
||||
_StepTest.stepUp(2);
|
||||
assert_equals(_StepTest.value, "13:00:02");
|
||||
}, "stepUp argment 2 times");
|
||||
test(function(){
|
||||
_StepTest.value = "13:00:00";
|
||||
_StepTest.step = "1";
|
||||
_StepTest.stepDown(2);
|
||||
assert_equals(_StepTest.value, "12:59:58");
|
||||
_StepTest.value = "13:00:00";
|
||||
_StepTest.step = "1";
|
||||
_StepTest.stepDown(2);
|
||||
assert_equals(_StepTest.value, "12:59:58");
|
||||
}, "stepDown argment 2 times");
|
||||
|
||||
test(function(){
|
||||
_StepTest.max = "15:00";
|
||||
_StepTest.value = "15:00";
|
||||
_StepTest.stepUp();
|
||||
assert_equals(_StepTest.value, "15:00");
|
||||
_StepTest.max = "";
|
||||
_StepTest.max = "15:00";
|
||||
_StepTest.value = "15:00";
|
||||
_StepTest.stepUp();
|
||||
assert_equals(_StepTest.value, "15:00");
|
||||
_StepTest.max = "";
|
||||
} , "stepUp stop because it exceeds the maximum value");
|
||||
test(function(){
|
||||
_StepTest.min = "13:00";
|
||||
_StepTest.value = "13:00";
|
||||
_StepTest.stepDown();
|
||||
assert_equals(_StepTest.value, "13:00");
|
||||
_StepTest.min="";
|
||||
_StepTest.min = "13:00";
|
||||
_StepTest.value = "13:00";
|
||||
_StepTest.stepDown();
|
||||
assert_equals(_StepTest.value, "13:00");
|
||||
_StepTest.min="";
|
||||
} , "stepDown Stop so lower than the minimum value");
|
||||
|
||||
test(function(){
|
||||
_StepTest.max = "15:01";
|
||||
_StepTest.value = "15:00";
|
||||
_StepTest.step = "120";
|
||||
_StepTest.stepUp();
|
||||
assert_equals(_StepTest.value, "15:01");
|
||||
_StepTest.max = "";
|
||||
_StepTest.max = "15:01";
|
||||
_StepTest.value = "15:00";
|
||||
_StepTest.step = "120";
|
||||
_StepTest.stepUp();
|
||||
assert_equals(_StepTest.value, "15:01");
|
||||
_StepTest.max = "";
|
||||
} , "stop at border on stepUp");
|
||||
test(function(){
|
||||
_StepTest.min = "12:59";
|
||||
_StepTest.value = "13:00";
|
||||
_StepTest.step = "120";
|
||||
_StepTest.stepDown();
|
||||
assert_equals(_StepTest.value, "12:59");
|
||||
_StepTest.min="";
|
||||
_StepTest.min = "12:59";
|
||||
_StepTest.value = "13:00";
|
||||
_StepTest.step = "120";
|
||||
_StepTest.stepDown();
|
||||
assert_equals(_StepTest.value, "12:59");
|
||||
_StepTest.min="";
|
||||
} , "stop at border on stepDown");
|
||||
|
||||
test(function(){
|
||||
_StepTest.value = "";
|
||||
_StepTest.step = "60";
|
||||
_StepTest.value = "";
|
||||
_StepTest.step = "60";
|
||||
_StepTest.stepUp();
|
||||
assert_equals(_StepTest.value, "00:01");
|
||||
assert_equals(_StepTest.value, "00:01");
|
||||
} , " empty value of stepUp");
|
||||
|
||||
|
||||
/* set value test */
|
||||
test(function(){
|
||||
var _time = document.getElementById("chkSetValueTest");
|
||||
_time.value = "12:00:00.000";
|
||||
assert_equals(_time.value, "12:00:00.000");
|
||||
_time.value = "hh:mi:ss.sss";
|
||||
assert_equals(_time.value, "");
|
||||
var _time = document.getElementById("chkSetValueTest");
|
||||
_time.value = "12:00:00.000";
|
||||
assert_equals(_time.value, "12:00:00.000");
|
||||
_time.value = "hh:mi:ss.sss";
|
||||
assert_equals(_time.value, "");
|
||||
}, "set value on not time format value");
|
||||
|
||||
|
||||
</script>
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,59 +1,59 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Input url</title>
|
||||
<link rel="author" title="Hyeonseok Shin" href="mailto:hyeonseok@gmail.com">
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#url-state-%28type=url%29">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<title>Input url</title>
|
||||
<link rel="author" title="Hyeonseok Shin" href="mailto:hyeonseok@gmail.com">
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#url-state-%28type=url%29">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Input url</h1>
|
||||
<div style="display: none">
|
||||
<input type="url" id="type_support" />
|
||||
<input type="url" id="set_value_LF" />
|
||||
<input type="url" id="set_value_CR" />
|
||||
<input type="url" id="set_value_CRLF" />
|
||||
<input type="url" id="value_with_CRLF" value="a
a" />
|
||||
<input type="url" id="value_with_leading_trailing_white_space" value=" aa " />
|
||||
<input type="url" id="value_with_leading_trailing_inner_white_space" value=" a a " />
|
||||
</div>
|
||||
<div id="log">
|
||||
</div>
|
||||
<h1>Input url</h1>
|
||||
<div style="display: none">
|
||||
<input type="url" id="type_support" />
|
||||
<input type="url" id="set_value_LF" />
|
||||
<input type="url" id="set_value_CR" />
|
||||
<input type="url" id="set_value_CRLF" />
|
||||
<input type="url" id="value_with_CRLF" value="a
a" />
|
||||
<input type="url" id="value_with_leading_trailing_white_space" value=" aa " />
|
||||
<input type="url" id="value_with_leading_trailing_inner_white_space" value=" a a " />
|
||||
</div>
|
||||
<div id="log">
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
test(function(){
|
||||
var element = document.getElementById('type_support');
|
||||
assert_equals(element.type, 'url');
|
||||
}, 'url type supported on input element');
|
||||
<script type="text/javascript">
|
||||
test(function(){
|
||||
var element = document.getElementById('type_support');
|
||||
assert_equals(element.type, 'url');
|
||||
}, 'url type supported on input element');
|
||||
|
||||
test(function(){
|
||||
var element = document.getElementById('set_value_LF');
|
||||
element.value = 'a\u000Aa';
|
||||
assert_equals(element.value, 'aa');
|
||||
test(function(){
|
||||
var element = document.getElementById('set_value_LF');
|
||||
element.value = 'a\u000Aa';
|
||||
assert_equals(element.value, 'aa');
|
||||
|
||||
element = document.getElementById('set_value_CR');
|
||||
element.value = 'a\u000Da';
|
||||
assert_equals(element.value, 'aa');
|
||||
element = document.getElementById('set_value_CR');
|
||||
element.value = 'a\u000Da';
|
||||
assert_equals(element.value, 'aa');
|
||||
|
||||
element = document.getElementById('set_value_CRLF');
|
||||
element.value = 'a\u000D\u000Aa';
|
||||
assert_equals(element.value, 'aa');
|
||||
}, 'The value must not be set with "LF" (U+000A) or "CR" (U+000D)');
|
||||
element = document.getElementById('set_value_CRLF');
|
||||
element.value = 'a\u000D\u000Aa';
|
||||
assert_equals(element.value, 'aa');
|
||||
}, 'The value must not be set with "LF" (U+000A) or "CR" (U+000D)');
|
||||
|
||||
test(function(){
|
||||
var element = document.getElementById('value_with_CRLF');
|
||||
assert_equals(element.value, 'aa');
|
||||
}, 'The value sanitization algorithm is as follows: Strip line breaks from the value');
|
||||
test(function(){
|
||||
var element = document.getElementById('value_with_CRLF');
|
||||
assert_equals(element.value, 'aa');
|
||||
}, 'The value sanitization algorithm is as follows: Strip line breaks from the value');
|
||||
|
||||
test(function(){
|
||||
var element = document.getElementById('value_with_leading_trailing_white_space');
|
||||
assert_equals(element.value, 'aa');
|
||||
test(function(){
|
||||
var element = document.getElementById('value_with_leading_trailing_white_space');
|
||||
assert_equals(element.value, 'aa');
|
||||
|
||||
element = document.getElementById('value_with_leading_trailing_inner_white_space');
|
||||
assert_equals(element.value, 'a a');
|
||||
}, 'The value sanitization algorithm is as follows: Strip leading and trailing whitespace from the value.');
|
||||
</script>
|
||||
element = document.getElementById('value_with_leading_trailing_inner_white_space');
|
||||
assert_equals(element.value, 'a a');
|
||||
}, 'The value sanitization algorithm is as follows: Strip leading and trailing whitespace from the value.');
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,14 +1,14 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Template tag with children div tags inside</title>
|
||||
<title>Template tag with children div tags inside</title>
|
||||
<link rel="author" title="Aleksei Yu. Semenov" href="mailto:a.semenov@unipro.ru"/>
|
||||
</head>
|
||||
<body>
|
||||
<p>Template tag with div tags inside</p>
|
||||
<template>
|
||||
<div>This is div inside template</div>
|
||||
<div>This is another div inside template</div>
|
||||
</template>
|
||||
<p>Template tag with div tags inside</p>
|
||||
<template>
|
||||
<div>This is div inside template</div>
|
||||
<div>This is another div inside template</div>
|
||||
</template>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,16 +1,16 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Template tag with children div tags inside another template tag</title>
|
||||
<title>Template tag with children div tags inside another template tag</title>
|
||||
<link rel="author" title="Aleksei Yu. Semenov" href="mailto:a.semenov@unipro.ru"/>
|
||||
</head>
|
||||
<body>
|
||||
<p>Template tag with children div tags inside another template tag</p>
|
||||
<template>
|
||||
<template>
|
||||
<div>This is div inside template</div>
|
||||
<div>This is another div inside template</div>
|
||||
</template>
|
||||
</template>
|
||||
<p>Template tag with children div tags inside another template tag</p>
|
||||
<template>
|
||||
<template>
|
||||
<div>This is div inside template</div>
|
||||
<div>This is another div inside template</div>
|
||||
</template>
|
||||
</template>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,56 +1,56 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<title>Creating and deleting captions</title>
|
||||
<link rel="author" title="Erika Navara" href="mailto:edoyle@microsoft.com">
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-table-element" />
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-table-createcaption" />
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-table-deletecaption" />
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<title>Creating and deleting captions</title>
|
||||
<link rel="author" title="Erika Navara" href="mailto:edoyle@microsoft.com">
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-table-element" />
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-table-createcaption" />
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-table-deletecaption" />
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="log"></div>
|
||||
<table id="table1" style="display:none">
|
||||
<caption id="caption1">caption</caption>
|
||||
<tr>
|
||||
<td>cell</td>
|
||||
<td>cell</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table id="table2" style="display:none">
|
||||
<tr>
|
||||
<td>cell</td>
|
||||
<td>cell</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table id="table3" style="display:none">
|
||||
<caption id="caption3">caption 3</caption>
|
||||
<tr>
|
||||
<td>cell</td>
|
||||
<td>cell</td>
|
||||
</tr>
|
||||
</table>
|
||||
<script>
|
||||
test(function () {
|
||||
var table1 = document.getElementById('table1');
|
||||
var testCaption = table1.createCaption();
|
||||
var table1FirstCaption = table1.caption;
|
||||
assert_equals(testCaption, table1FirstCaption);
|
||||
}, "createCaption method returns the first caption element child of the table")
|
||||
test(function () {
|
||||
var table2 = document.getElementById('table2');
|
||||
var test2Caption = table2.createCaption();
|
||||
var table2FirstNode = table2.firstChild;
|
||||
assert_true(test2Caption instanceof HTMLTableCaptionElement);
|
||||
assert_equals(table2FirstNode, test2Caption);
|
||||
}, "createCaption method creates a new caption and inserts it as the first node of the table element")
|
||||
test(function () {
|
||||
var table3 = document.getElementById('table3');
|
||||
assert_equals(table3.caption.textContent, "caption 3");
|
||||
table3.deleteCaption();
|
||||
assert_equals(table3.caption, null);
|
||||
}, "deleteCaption method removes the first caption element child of the table element")
|
||||
</script>
|
||||
<div id="log"></div>
|
||||
<table id="table1" style="display:none">
|
||||
<caption id="caption1">caption</caption>
|
||||
<tr>
|
||||
<td>cell</td>
|
||||
<td>cell</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table id="table2" style="display:none">
|
||||
<tr>
|
||||
<td>cell</td>
|
||||
<td>cell</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table id="table3" style="display:none">
|
||||
<caption id="caption3">caption 3</caption>
|
||||
<tr>
|
||||
<td>cell</td>
|
||||
<td>cell</td>
|
||||
</tr>
|
||||
</table>
|
||||
<script>
|
||||
test(function () {
|
||||
var table1 = document.getElementById('table1');
|
||||
var testCaption = table1.createCaption();
|
||||
var table1FirstCaption = table1.caption;
|
||||
assert_equals(testCaption, table1FirstCaption);
|
||||
}, "createCaption method returns the first caption element child of the table")
|
||||
test(function () {
|
||||
var table2 = document.getElementById('table2');
|
||||
var test2Caption = table2.createCaption();
|
||||
var table2FirstNode = table2.firstChild;
|
||||
assert_true(test2Caption instanceof HTMLTableCaptionElement);
|
||||
assert_equals(table2FirstNode, test2Caption);
|
||||
}, "createCaption method creates a new caption and inserts it as the first node of the table element")
|
||||
test(function () {
|
||||
var table3 = document.getElementById('table3');
|
||||
assert_equals(table3.caption.textContent, "caption 3");
|
||||
table3.deleteCaption();
|
||||
assert_equals(table3.caption, null);
|
||||
}, "deleteCaption method removes the first caption element child of the table element")
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
@ -1,32 +1,32 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset=utf-8>
|
||||
<title>HTML time element API</title>
|
||||
<style>
|
||||
<head>
|
||||
<meta charset=utf-8>
|
||||
<title>HTML time element API</title>
|
||||
<style>
|
||||
#time { visibility: hidden; }
|
||||
</style>
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-time-element">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="log"></div>
|
||||
<!-- intentionally nested to test parsing rules -->
|
||||
<p id="time"><time pubdate datetime="2000-02-01T03:04:05Z">Dummy text <time>2001-06-07T<time>08:09<time></time></time>Z</time></time></p>
|
||||
<script type="text/javascript">
|
||||
</style>
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-time-element">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="log"></div>
|
||||
<!-- intentionally nested to test parsing rules -->
|
||||
<p id="time"><time pubdate datetime="2000-02-01T03:04:05Z">Dummy text <time>2001-06-07T<time>08:09<time></time></time>Z</time></time></p>
|
||||
<script type="text/javascript">
|
||||
function makeTime(dateTime,contents,dateTimeProp) {
|
||||
var timeEl = document.createElement('time');
|
||||
if( dateTime ) {
|
||||
timeEl.setAttribute('datetime',dateTime);
|
||||
}
|
||||
if( contents ) {
|
||||
timeEl.innerHTML = contents;
|
||||
}
|
||||
if( dateTimeProp ) {
|
||||
timeEl.dateTime = dateTimeProp;
|
||||
}
|
||||
return timeEl;
|
||||
var timeEl = document.createElement('time');
|
||||
if( dateTime ) {
|
||||
timeEl.setAttribute('datetime',dateTime);
|
||||
}
|
||||
if( contents ) {
|
||||
timeEl.innerHTML = contents;
|
||||
}
|
||||
if( dateTimeProp ) {
|
||||
timeEl.dateTime = dateTimeProp;
|
||||
}
|
||||
return timeEl;
|
||||
}
|
||||
|
||||
var timep = document.getElementById('time');
|
||||
@ -34,35 +34,35 @@ var times = timep.getElementsByTagName('time');
|
||||
|
||||
//TIME elements
|
||||
test(function () {
|
||||
assert_equals( times.length, 4 );
|
||||
assert_equals( times.length, 4 );
|
||||
}, 'HTML parsing should locate 4 time elements in this document');
|
||||
test(function () {
|
||||
assert_true( !!window.HTMLTimeElement );
|
||||
assert_true( !!window.HTMLTimeElement );
|
||||
}, 'HTMLTimeElement should be exposed for prototyping');
|
||||
test(function () {
|
||||
assert_true( makeTime() instanceof window.HTMLTimeElement, 'createElement variant' );
|
||||
assert_true( times[0] instanceof window.HTMLTimeElement, 'HTML parsing variant' );
|
||||
assert_true( makeTime() instanceof window.HTMLTimeElement, 'createElement variant' );
|
||||
assert_true( times[0] instanceof window.HTMLTimeElement, 'HTML parsing variant' );
|
||||
}, 'the time elements should be instanceof HTMLTimeElement');
|
||||
|
||||
//dateTime
|
||||
test(function () {
|
||||
assert_equals( makeTime('2000-02-01T03:04:05Z','2001-02-01T03:04:05Z').dateTime, '2000-02-01T03:04:05Z' );
|
||||
assert_equals( makeTime('2000-02-01T03:04:05Z','2001-02-01T03:04:05Z').dateTime, '2000-02-01T03:04:05Z' );
|
||||
}, 'the datetime attribute should be reflected by the .dateTime property');
|
||||
test(function () {
|
||||
assert_equals( typeof makeTime().dateTime, 'string', 'typeof test' );
|
||||
assert_equals( makeTime().dateTime, '', 'value test' );
|
||||
assert_equals( typeof makeTime().dateTime, 'string', 'typeof test' );
|
||||
assert_equals( makeTime().dateTime, '', 'value test' );
|
||||
}, 'the dateTime IDL property should default to an empty string');
|
||||
test(function () {
|
||||
assert_equals( makeTime(false,false,'2000-02-01T03:04:05Z').dateTime, '2000-02-01T03:04:05Z' );
|
||||
assert_equals( makeTime(false,false,'2000-02-01T03:04:05Z').dateTime, '2000-02-01T03:04:05Z' );
|
||||
}, 'the dateTime property should be read/write');
|
||||
test(function () {
|
||||
assert_equals( makeTime('go fish').dateTime, 'go fish' );
|
||||
assert_equals( makeTime('go fish').dateTime, 'go fish' );
|
||||
}, 'the datetime attribute should be reflected by the .dateTime property even if it is invalid');
|
||||
test(function () {
|
||||
assert_equals( makeTime(false,'2000-02-01T03:04:05Z').dateTime, '' );
|
||||
assert_equals( makeTime(false,'2000-02-01T03:04:05Z').dateTime, '' );
|
||||
}, 'the datetime attribute should not reflect the textContent');
|
||||
|
||||
</script>
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -21,77 +21,77 @@ test(function () {
|
||||
|
||||
/* Happy path */
|
||||
test(function () {
|
||||
navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s', 'foo');
|
||||
navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s', 'foo');
|
||||
}, 'a handler with valid arguments should work');
|
||||
|
||||
|
||||
/* URL argument */
|
||||
test(function () {
|
||||
navigator.registerContentHandler('text/x-unknown-type', '%s', 'foo');
|
||||
navigator.registerContentHandler('text/x-unknown-type', '%s', 'foo');
|
||||
}, 'a relative URL should work');
|
||||
|
||||
test(function () {
|
||||
navigator.registerContentHandler('text/x-unknown-type', location.href + '#%s', 'foo');
|
||||
navigator.registerContentHandler('text/x-unknown-type', location.href + '#%s', 'foo');
|
||||
}, 'a URL with a fragment identifier should work');
|
||||
|
||||
test(function () {
|
||||
navigator.registerContentHandler('text/x-unknown-type', location.href + '?foo=%s', 'foo');
|
||||
navigator.registerContentHandler('text/x-unknown-type', location.href + '?foo=%s', 'foo');
|
||||
}, 'a URL with a query string should work');
|
||||
|
||||
test(function () {
|
||||
navigator.registerContentHandler('text/x-unknown-type', location.href + '?foo=%s&bar', 'foo');
|
||||
navigator.registerContentHandler('text/x-unknown-type', location.href + '?foo=%s&bar', 'foo');
|
||||
}, 'a URL with a multi-argument query string should work');
|
||||
|
||||
test(function () {
|
||||
navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s/bar/baz/', 'foo');
|
||||
navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s/bar/baz/', 'foo');
|
||||
}, 'a URL with the passed string as a directory name should work');
|
||||
|
||||
test(function () {
|
||||
navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s/bar/baz/?foo=1337&bar#baz', 'foo');
|
||||
navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s/bar/baz/?foo=1337&bar#baz', 'foo');
|
||||
}, 'a URL with the passed string as a directory name followed by a query string and fragment identifier should work');
|
||||
|
||||
test(function () {
|
||||
navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s/foo/%s/', 'foo');
|
||||
navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s/foo/%s/', 'foo');
|
||||
}, 'a URL with the passed string included twice should work');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', '', 'foo') } );
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', '', 'foo') } );
|
||||
}, 'an empty url argument should throw SYNTAX_ERR');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://%s.com', 'foo') } );
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://%s.com', 'foo') } );
|
||||
}, '%s instead of domain name should throw SYNTAX_ERR');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://%s.example.com', 'foo') } );
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://%s.example.com', 'foo') } );
|
||||
}, '%s instead of subdomain name should throw syntax_err');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', location.href + '', 'foo') } );
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', location.href + '', 'foo') } );
|
||||
}, 'a url argument without %s should throw SYNTAX_ERR');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://example.com', 'foo') } );
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://example.com', 'foo') } );
|
||||
}, 'a url argument pointing to a different domain name, without %s should throw SYNTAX_ERR');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', location.href + '/%', 'foo') } );
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', location.href + '/%', 'foo') } );
|
||||
}, 'a url argument without %s (but with %) should throw SYNTAX_ERR');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', location.href + '/%a', 'foo') } );
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', location.href + '/%a', 'foo') } );
|
||||
}, 'a url argument without %s (but with %a) should throw SYNTAX_ERR');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://example.com/%s', 'foo') } );
|
||||
assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://example.com/%s', 'foo') } );
|
||||
}, 'a url argument pointing to a different domain name should throw SECURITY_ERR');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'https://example.com/%s', 'foo') } );
|
||||
assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'https://example.com/%s', 'foo') } );
|
||||
}, 'a url argument pointing to a different domain name should throw SECURITY_ERR (2)');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://foobar.example.com/%s', 'foo') } );
|
||||
assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://foobar.example.com/%s', 'foo') } );
|
||||
}, 'a url argument pointing to a different domain name should throw SECURITY_ERR (3)');
|
||||
|
||||
/* Content type argument */
|
||||
@ -109,9 +109,9 @@ var blacklist = new Array(
|
||||
|
||||
for (var bi=0, bl=blacklist.length; bi<bl; ++bi){
|
||||
|
||||
test(function () {
|
||||
assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler(blacklist[bi], location.href + '/%s', 'foo') } );
|
||||
}, 'attempting to override the ' + blacklist[bi] + ' MIME type should throw SECURITY_ERR');
|
||||
test(function () {
|
||||
assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler(blacklist[bi], location.href + '/%s', 'foo') } );
|
||||
}, 'attempting to override the ' + blacklist[bi] + ' MIME type should throw SECURITY_ERR');
|
||||
|
||||
}
|
||||
|
||||
@ -124,9 +124,9 @@ var whitelist = new Array('application/atom+xml', /* For feeds. */
|
||||
|
||||
for (var wi=0, wl=whitelist.length; wi<wl; ++wi){
|
||||
|
||||
test(function () {
|
||||
navigator.registerContentHandler(whitelist[wi], location.href + '/%s', 'foo');
|
||||
}, 'overriding the ' + whitelist[wi] + ' MIME type should work');
|
||||
test(function () {
|
||||
navigator.registerContentHandler(whitelist[wi], location.href + '/%s', 'foo');
|
||||
}, 'overriding the ' + whitelist[wi] + ' MIME type should work');
|
||||
|
||||
}
|
||||
|
||||
|
@ -20,163 +20,163 @@ test(function () {
|
||||
}, 'the registerProtocolHandler method should exist on the navigator object');
|
||||
|
||||
test(function () {
|
||||
navigator.registerProtocolHandler('tel', location.href + '/%s', 'foo');
|
||||
navigator.registerProtocolHandler('tel', location.href + '/%s', 'foo');
|
||||
}, 'a handler with valid arguments should work');
|
||||
|
||||
|
||||
/* URL argument */
|
||||
test(function () {
|
||||
navigator.registerProtocolHandler('tel', '%s', 'foo');
|
||||
navigator.registerProtocolHandler('tel', '%s', 'foo');
|
||||
}, 'a relative URL should work');
|
||||
|
||||
test(function () {
|
||||
navigator.registerProtocolHandler('tel', location.href + '#%s', 'foo');
|
||||
navigator.registerProtocolHandler('tel', location.href + '#%s', 'foo');
|
||||
}, 'a URL with a fragment identifier should work');
|
||||
|
||||
test(function () {
|
||||
navigator.registerProtocolHandler('tel', location.href + '?foo=%s', 'foo');
|
||||
navigator.registerProtocolHandler('tel', location.href + '?foo=%s', 'foo');
|
||||
}, 'a URL with a query string should work');
|
||||
|
||||
test(function () {
|
||||
navigator.registerProtocolHandler('tel', location.href + '?foo=%s&bar', 'foo');
|
||||
navigator.registerProtocolHandler('tel', location.href + '?foo=%s&bar', 'foo');
|
||||
}, 'a URL with a multi-argument query string should work');
|
||||
|
||||
test(function () {
|
||||
navigator.registerProtocolHandler('tel', location.href + '/%s/bar/baz/', 'foo');
|
||||
navigator.registerProtocolHandler('tel', location.href + '/%s/bar/baz/', 'foo');
|
||||
}, 'a URL with the passed string as a directory name should work');
|
||||
|
||||
test(function () {
|
||||
navigator.registerProtocolHandler('tel', location.href + '/%s/bar/baz/?foo=1337&bar#baz', 'foo');
|
||||
navigator.registerProtocolHandler('tel', location.href + '/%s/bar/baz/?foo=1337&bar#baz', 'foo');
|
||||
}, 'a URL with the passed string as a directory name followed by a query string and fragment identifier should work');
|
||||
|
||||
test(function () {
|
||||
navigator.registerProtocolHandler('tel', location.href + '/%s/foo/%s/', 'foo');
|
||||
navigator.registerProtocolHandler('tel', location.href + '/%s/foo/%s/', 'foo');
|
||||
}, 'a URL with the passed string included twice should work');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', '', 'foo') } );
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', '', 'foo') } );
|
||||
}, 'an empty url argument should throw SYNTAX_ERR');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://%s.com', 'foo') } );
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://%s.com', 'foo') } );
|
||||
}, '%s instead of domain name should throw SYNTAX_ERR');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://%s.example.com', 'foo') } );
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://%s.example.com', 'foo') } );
|
||||
}, '%s instead of subdomain name should throw SYNTAX_ERR');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', location.href + '', 'foo') } );
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', location.href + '', 'foo') } );
|
||||
}, 'a url argument without %s should throw SYNTAX_ERR');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://example.com', 'foo') } );
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://example.com', 'foo') } );
|
||||
}, 'a url argument pointing to a different domain name, without %s should throw SYNTAX_ERR');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', location.href + '/%', 'foo') } );
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', location.href + '/%', 'foo') } );
|
||||
}, 'a url argument without %s (but with %) should throw SYNTAX_ERR');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', location.href + '/%a', 'foo') } );
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', location.href + '/%a', 'foo') } );
|
||||
}, 'a url argument without %s (but with %a) should throw SYNTAX_ERR');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://example.com/%s', 'foo') } );
|
||||
assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://example.com/%s', 'foo') } );
|
||||
}, 'a url argument pointing to a different domain name should throw SECURITY_ERR');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'https://example.com/%s', 'foo') } );
|
||||
assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'https://example.com/%s', 'foo') } );
|
||||
}, 'a url argument pointing to a different domain name should throw SECURITY_ERR (2)');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://foobar.example.com/%s', 'foo') } );
|
||||
assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://foobar.example.com/%s', 'foo') } );
|
||||
}, 'a url argument pointing to a different domain name should throw SECURITY_ERR (3)');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'mailto:%s@example.com', 'foo') } );
|
||||
assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'mailto:%s@example.com', 'foo') } );
|
||||
}, 'looping handlers should throw SECURITY_ERR');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('sms', 'tel:%s', 'foo') } );
|
||||
assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('sms', 'tel:%s', 'foo') } );
|
||||
}, 'a url argument pointing to a non-http[s] scheme should throw SECURITY_ERR due to not being of the same origin');
|
||||
|
||||
/* Protocol argument */
|
||||
test(function () {
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('unrecognized', location.href + '/%a', 'foo') } );
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('unrecognized', location.href + '/%a', 'foo') } );
|
||||
}, 'a protocol argument containing an unrecognized scheme should throw SECURITY_ERR'); /* This is a whitelist, not a blacklist. */
|
||||
|
||||
test(function () {
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto:', location.href + '/%a', 'foo') } );
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto:', location.href + '/%a', 'foo') } );
|
||||
}, 'a protocol argument containing : should throw SYNTAX_ERR');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto://', location.href + '/%a', 'foo') } );
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto://', location.href + '/%a', 'foo') } );
|
||||
}, 'a protocol argument containing :// should throw SYNTAX_ERR');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('http://', location.href + '/%a', 'foo') } );
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('http://', location.href + '/%a', 'foo') } );
|
||||
}, 'a protocol argument containing http:// should throw SYNTAX_ERR');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto' + String.fromCharCode(0), location.href + '/%a', 'foo') } );
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto' + String.fromCharCode(0), location.href + '/%a', 'foo') } );
|
||||
}, 'a protocol argument containing a null character should throw SYNTAX_ERR');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailtoo' + String.fromCharCode(8), location.href + '/%a', 'foo') } );
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailtoo' + String.fromCharCode(8), location.href + '/%a', 'foo') } );
|
||||
}, 'a protocol argument containing a backspace character should throw SYNTAX_ERR');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto' + String.fromCharCode(10), location.href + '/%a', 'foo') } );
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto' + String.fromCharCode(10), location.href + '/%a', 'foo') } );
|
||||
}, 'a protocol argument containing a LF character should throw SYNTAX_ERR');
|
||||
|
||||
test(function () {
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mаilto', location.href + '/%a', 'foo') } );
|
||||
assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mаilto', location.href + '/%a', 'foo') } );
|
||||
}, 'a protocol argument containing non-alphanumeric characters (like a cyrillic “а”) should throw SYNTAX_ERR');
|
||||
|
||||
test(function () {
|
||||
navigator.registerProtocolHandler('TEL', location.href + '/%s', 'foo');
|
||||
navigator.registerProtocolHandler('TEL', location.href + '/%s', 'foo');
|
||||
}, 'a protocol argument of “TEL” should be equivalent to “tel”');
|
||||
|
||||
test(function () {
|
||||
navigator.registerProtocolHandler('teL', location.href + '/%s', 'foo');
|
||||
navigator.registerProtocolHandler('teL', location.href + '/%s', 'foo');
|
||||
}, 'a protocol argument of “teL” should be equivalent to “tel”');
|
||||
|
||||
|
||||
/* Overriding any of the following protocols must never be allowed. That would
|
||||
* break the browser. */
|
||||
var blacklist = new Array(
|
||||
'about',
|
||||
'attachment',
|
||||
'blob',
|
||||
'chrome',
|
||||
'cid',
|
||||
'data',
|
||||
'file',
|
||||
'ftp',
|
||||
'http',
|
||||
'https',
|
||||
'javascript',
|
||||
'livescript',
|
||||
'mid',
|
||||
'mocha',
|
||||
'opera',
|
||||
'operamail',
|
||||
'res',
|
||||
'resource',
|
||||
'shttp',
|
||||
'tcl',
|
||||
'vbscript',
|
||||
'view-source',
|
||||
'ws',
|
||||
'wss',
|
||||
'wyciwyg');
|
||||
'about',
|
||||
'attachment',
|
||||
'blob',
|
||||
'chrome',
|
||||
'cid',
|
||||
'data',
|
||||
'file',
|
||||
'ftp',
|
||||
'http',
|
||||
'https',
|
||||
'javascript',
|
||||
'livescript',
|
||||
'mid',
|
||||
'mocha',
|
||||
'opera',
|
||||
'operamail',
|
||||
'res',
|
||||
'resource',
|
||||
'shttp',
|
||||
'tcl',
|
||||
'vbscript',
|
||||
'view-source',
|
||||
'ws',
|
||||
'wss',
|
||||
'wyciwyg');
|
||||
|
||||
for ( var bi=0, bl=blacklist.length; bi<bl; ++bi ){
|
||||
|
||||
test(function () {
|
||||
assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler(blacklist[bi], location.href + '/%s', 'foo') } );
|
||||
}, 'attempting to override the ' + blacklist[bi] + ' protocol should throw SECURITY_ERR');
|
||||
test(function () {
|
||||
assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler(blacklist[bi], location.href + '/%s', 'foo') } );
|
||||
}, 'attempting to override the ' + blacklist[bi] + ' protocol should throw SECURITY_ERR');
|
||||
|
||||
}
|
||||
|
||||
@ -184,28 +184,28 @@ for ( var bi=0, bl=blacklist.length; bi<bl; ++bi ){
|
||||
* We're just testing that the call goes through here. Whether or not they
|
||||
* actually work as handlers is covered by the interactive tests. */
|
||||
var whitelist = new Array(
|
||||
'geo',
|
||||
'im',
|
||||
'irc',
|
||||
'ircs',
|
||||
'mailto',
|
||||
'mms',
|
||||
'news',
|
||||
'nntp',
|
||||
'sms',
|
||||
'smsto',
|
||||
'tel',
|
||||
'urn',
|
||||
'webcal',
|
||||
'wtai',
|
||||
'xmpp');
|
||||
'geo',
|
||||
'im',
|
||||
'irc',
|
||||
'ircs',
|
||||
'mailto',
|
||||
'mms',
|
||||
'news',
|
||||
'nntp',
|
||||
'sms',
|
||||
'smsto',
|
||||
'tel',
|
||||
'urn',
|
||||
'webcal',
|
||||
'wtai',
|
||||
'xmpp');
|
||||
|
||||
for ( var wi=0, wl=whitelist.length; wi<wl; ++wi ){
|
||||
|
||||
test(function () {
|
||||
navigator.registerProtocolHandler(whitelist[wi], location.href + '/%s', 'foo');
|
||||
assert_true(true);
|
||||
}, 'overriding the ' + whitelist[wi] + ' protocol should work');
|
||||
test(function () {
|
||||
navigator.registerProtocolHandler(whitelist[wi], location.href + '/%s', 'foo');
|
||||
assert_true(true);
|
||||
}, 'overriding the ' + whitelist[wi] + ' protocol should work');
|
||||
|
||||
}
|
||||
</script>
|
||||
|
@ -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
|
||||
|
@ -1,18 +1,18 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head>
|
||||
<title> scheduler: removing async attribute at runtime</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="testlib/testlib.js"></script>
|
||||
<title> scheduler: removing async attribute at runtime</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="testlib/testlib.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="test"></div>
|
||||
<div id="log">FAILED (This TC requires JavaScript enabled)</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>
|
||||
<script>
|
||||
var t = async_test();
|
||||
|
||||
t.step(function() {
|
||||
@ -27,6 +27,6 @@
|
||||
assert_array_equals(eventOrder, ["external script #1", "external script #2"]);
|
||||
t.done();
|
||||
}), false);
|
||||
|
||||
|
||||
</script>
|
||||
</body></html>
|
||||
|
9
testing/web-platform/tests/referrer-policy/README.html
Normal file
9
testing/web-platform/tests/referrer-policy/README.html
Normal 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>
|
28
testing/web-platform/tests/referrer-policy/generic/common.js
Normal file
28
testing/web-platform/tests/referrer-policy/generic/common.js
Normal 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;
|
||||
}
|
@ -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>
|
@ -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
|
@ -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>
|
@ -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>
|
||||
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user