Update web-platform-tests to revision 58eb04cecbbec2e18531ab440225e38944a9c444

This commit is contained in:
Josh Matthews 2017-04-17 12:06:02 +10:00 committed by Anthony Ramine
parent 25e8bf69e6
commit 665817d2a6
35333 changed files with 1818077 additions and 16036 deletions

View file

@ -3,22 +3,89 @@
<meta charset="utf-8">
<link rel="author" title="Intel" href="http://www.intel.com">
<link rel="author" title="He Yue" href="mailto:yue.he@intel.com">
<link rel="author" title="Tomoyuki Shimizu" href="https://github.com/tomoyukilabs/">
<link rel="help" href="http://w3c.github.io/presentation-api/#interface-presentationconnectionlist">
<script src="../common.js"></script>
<script src="stash.js"></script>
<script>
var addConnection = function(connection) {
connection.onconnected = function () {
this.onmessage = function (evt) {
this.send(evt.data);
const message1 = '1st';
const message2 = '2nd';
const message3 = new Uint8Array([51, 114, 100]); // "3rd"
const message4 = new Uint8Array([52, 116, 104]); // "4th"
const message5 = new Uint8Array([108, 97, 115, 116]); // "last"
const toUint8Array = buf => {
return buf instanceof ArrayBuffer ? new Uint8Array(buf) : buf;
}
// convert ArrayBuffer or Uint8Array into string
const toText = buf => {
const arr = toUint8Array(buf);
return !buf ? null : arr.reduce((result, item) => {
return result + String.fromCharCode(item);
}, '');
}
// compare two ArrayBuffer or Uint8Array
const compare = (a, b) => {
const p = toUint8Array(a);
const q = toUint8Array(b);
return !!p && !!q && p.every((item, index) => { return item === q[index]; });
};
const stash = new Stash(stashIds.toReceiver, stashIds.toController);
const addConnection = connection => {
connection.onconnect = function() {
let result = [], testCase;
this.onmessage = event => {
// PresentationConnection_send-manual.html
if (testCase === 'send') {
if (typeof event.data === 'string') {
result.push({ type: 'text', data: event.data });
}
// default value of connection.binaryType is "arraybuffer"
else if(event.data instanceof ArrayBuffer) {
result.push({ type: 'binary', data: toText(event.data) });
if (compare(event.data, message5)) {
stash.send(JSON.stringify(result));
}
}
else {
result.push({ type: 'error' });
}
}
};
stash.receive().then(data => {
testCase = data;
// PresentationConnection_send-manual.html
if (testCase === 'send') {
stash.send('ok');
}
// PresentationConnection_onmessage-manual.html
else if (testCase === 'onmessage') {
connection.send(message1); // string
connection.send(message2); // string
connection.send(new Blob([message3])); // Blob
connection.send(message4.buffer); // ArrayBuffer
connection.send(message5); // ArrayBufferView
stash.receive().then(data => {
connection.send(message5);
});
}
});
};
};
navigator.presentation.receiver.connectionList
.then(function(list) {
list.onconnectionavailable = function(evt) {
.then(list => {
list.onconnectionavailable = evt => {
addConnection(evt.connection);
};
list.connections.map(function(connection) {
list.connections.map(connection => {
addConnection(connection);
});
});

View file

@ -0,0 +1,83 @@
var Stash = function(inbound, outbound) {
this.stashPath = '/presentation-api/controlling-ua/support/stash.py?id=';
this.inbound = inbound;
this.outbound = outbound;
}
// initialize a stash on wptserve
Stash.prototype.init = function() {
return Promise.all([
fetch(this.stashPath + this.inbound).then(response => {
return response.text();
}),
fetch(this.stashPath + this.outbound).then(response => {
return response.text();
})
]);
}
// upload a test result to a stash on wptserve
Stash.prototype.send = function(result) {
return fetch(this.stashPath + this.outbound, {
method: 'POST',
body: JSON.stringify({ type: 'data', data: result })
}).then(response => {
return response.text();
}).then(text => {
return text === 'ok' ? null : Promise.reject();
})
};
// wait until a test result is uploaded to a stash on wptserve
Stash.prototype.receive = function() {
return new Promise((resolve, reject) => {
let intervalId;
const interval = 500; // msec
const polling = () => {
return fetch(this.stashPath + this.inbound).then(response => {
return response.text();
}).then(text => {
if (text) {
try {
const json = JSON.parse(text);
if (json.type === 'data')
resolve(json.data);
else
reject();
} catch(e) {
resolve(text);
}
clearInterval(intervalId);
}
});
};
intervalId = setInterval(polling, interval);
});
};
// reset a stash on wptserve
Stash.prototype.stop = function() {
return Promise.all([
fetch(this.stashPath + this.inbound).then(response => {
return response.text();
}),
fetch(this.stashPath + this.outbound).then(response => {
return response.text();
})
]).then(() => {
return Promise.all([
fetch(this.stashPath + this.inbound, {
method: 'POST',
body: JSON.stringify({ type: 'stop' })
}).then(response => {
return response.text();
}),
fetch(this.stashPath + this.outbound, {
method: 'POST',
body: JSON.stringify({ type: 'stop' })
}).then(response => {
return response.text();
})
]);
});
}

View file

@ -0,0 +1,10 @@
def main(request, response):
key = request.GET.first("id")
if request.method == "POST":
request.server.stash.put(key, request.body)
return "ok"
else:
value = request.server.stash.take(key)
assert request.server.stash.take(key) is None
return value