зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1000935: Added Marionette test for NfcPeer.sendNDEF, r=dlee
This commit is contained in:
Родитель
089c2f23cb
Коммит
c44bbcbc73
|
@ -7,3 +7,4 @@ qemu=true
|
|||
[test_nfc_enabled.js]
|
||||
[test_nfc_manager_tech_discovered.js]
|
||||
[test_nfc_peer.js]
|
||||
[test_nfc_peer_sendndef.js]
|
||||
|
|
|
@ -0,0 +1,106 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
MARIONETTE_TIMEOUT = 30000;
|
||||
MARIONETTE_HEAD_JS = "head.js";
|
||||
|
||||
let url = "https://www.example.com";
|
||||
|
||||
function compareNDEFs(ndef1, ndef2) {
|
||||
is(ndef1.length, ndef2.length,
|
||||
"NDEF messages have the same number of records");
|
||||
ndef1.forEach(function(record1, index) {
|
||||
let record2 = this[index];
|
||||
is(record1.tnf, record2.tnf, "test for equal TNF fields");
|
||||
let fields = ["type", "id", "payload"];
|
||||
fields.forEach(function(value) {
|
||||
let field1 = record1[value];
|
||||
let field2 = record2[value];
|
||||
is(field1.length, field2.length,
|
||||
value + " fields have the same length");
|
||||
let eq = true;
|
||||
for (let i = 0; eq && i < field1.length; ++i) {
|
||||
eq = (field1[i] === field2[i]);
|
||||
}
|
||||
ok(eq, value + " fields contain the same data");
|
||||
});
|
||||
}, ndef2);
|
||||
}
|
||||
|
||||
function parseNDEFString(str) {
|
||||
/* make it an object */
|
||||
let arr = null;
|
||||
try {
|
||||
arr = JSON.parse(str);
|
||||
} catch (e) {
|
||||
ok(false, "Parser error: " + e.message);
|
||||
return null;
|
||||
}
|
||||
/* and build NDEF array */
|
||||
let ndef = arr.map(function(value) {
|
||||
let type = new Uint8Array(NfcUtils.fromUTF8(this.atob(value.type)));
|
||||
let id = new Uint8Array(NfcUtils.fromUTF8(this.atob(value.id)));
|
||||
let payload = new Uint8Array(NfcUtils.fromUTF8(this.atob(value.payload)));
|
||||
return new MozNDEFRecord(value.tnf, type, id, payload);
|
||||
}, window);
|
||||
return ndef;
|
||||
}
|
||||
|
||||
function sendNDEF(techType, sessionToken) {
|
||||
let tnf = NDEF.TNF_WELL_KNOWN;
|
||||
let type = new Uint8Array(NfcUtils.fromUTF8("U"));
|
||||
let id = new Uint8Array(NfcUtils.fromUTF8(""));
|
||||
let payload = new Uint8Array(NfcUtils.fromUTF8(url));
|
||||
let ndef = [new MozNDEFRecord(tnf, type, id, payload)];
|
||||
|
||||
let peer = window.navigator.mozNfc.getNFCPeer(sessionToken);
|
||||
let req = peer.sendNDEF(ndef);
|
||||
req.onsuccess = function() {
|
||||
log("Successfully sent NDEF message");
|
||||
|
||||
let cmd = "nfc snep put -1 -1"; /* read last SNEP PUT from emulator */
|
||||
log("Executing \'" + cmd + "\'");
|
||||
emulator.run(cmd, function(result) {
|
||||
is(result.pop(), "OK", "check SNEP PUT result");
|
||||
let ndef2 = parseNDEFString(result.pop());
|
||||
compareNDEFs(ndef, ndef2);
|
||||
toggleNFC(false, runNextTest);
|
||||
});
|
||||
};
|
||||
req.onerror = function() {
|
||||
ok(false, "Failed to send NDEF message, error \'" + this.error + "\'");
|
||||
toggleNFC(false, runNextTest);
|
||||
};
|
||||
}
|
||||
|
||||
function handleTechnologyDiscoveredRE0(msg) {
|
||||
log("Received \'nfc-manager-tech-discovered\' " + JSON.stringify(msg));
|
||||
is(msg.type, "techDiscovered", "check for correct message type");
|
||||
let index = msg.techList.indexOf("P2P");
|
||||
isnot(index, -1, "check for \'P2P\' in tech list");
|
||||
sendNDEF(msg.techList[index], msg.sessionToken);
|
||||
}
|
||||
|
||||
function activateRE0() {
|
||||
let cmd = "nfc nci rf_intf_activated_ntf 0";
|
||||
log("Executing \'" + cmd + "\'");
|
||||
emulator.run(cmd, function(result) {
|
||||
is(result.pop(), "OK", "check activation of RE0");
|
||||
});
|
||||
}
|
||||
|
||||
function testOnPeerReadyRE0() {
|
||||
log("Running \'testOnPeerReadyRE0\'");
|
||||
window.navigator.mozSetMessageHandler(
|
||||
"nfc-manager-tech-discovered", handleTechnologyDiscoveredRE0);
|
||||
toggleNFC(true, activateRE0);
|
||||
}
|
||||
|
||||
let tests = [
|
||||
testOnPeerReadyRE0
|
||||
];
|
||||
|
||||
SpecialPowers.pushPermissions(
|
||||
[{"type": "nfc", "allow": true,
|
||||
"read": true, 'write': true, context: document},
|
||||
{"type": "nfc-manager", 'allow': true, context: document}], runTests);
|
Загрузка…
Ссылка в новой задаче