VulpesOS/gaia/apps/communications/contacts/test/unit/nfc_test.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

123 lines
3.6 KiB
JavaScript
Executable file

'use strict';
/* global MockMozNfc, NFC, MocksHelper, fb,
MockMozNDEFRecord, mozContact, NfcUtils */
require('/shared/test/unit/mocks/mock_moz_ndefrecord.js');
require('/shared/test/unit/mocks/mock_lazy_loader.js');
require('/shared/test/unit/mocks/mock_moz_nfc.js');
require('/shared/js/contact2vcard.js');
require('/shared/js/setImmediate.js');
require('/shared/js/nfc_utils.js');
requireApp('communications/contacts/test/unit/mock_fb.js');
requireApp('communications/contacts/test/unit/mock_l10n.js');
requireApp('communications/contacts/test/unit/mock_navigation.js');
require('/shared/test/unit/mocks/mock_moz_contact.js');
var mocksHelperForNFC = new MocksHelper([
'fb', 'Contacts', 'LazyLoader', 'mozContact'
]);
mocksHelperForNFC.init();
suite('NFC', function() {
var realMozNfc;
var realUtils;
var realMozNDEFRecord;
var nfcUtils;
suiteSetup(function(done) {
requireApp(
'communications/contacts/test/unit/mock_contacts.js',
function() {
realUtils = window.utils;
realMozNfc = window.navigator.mozNfc;
window.navigator.mozNfc = MockMozNfc;
realMozNDEFRecord = window.MozNDEFRecord;
window.MozNDEFRecord = MockMozNDEFRecord;
window.utils = {};
window.utils.status = {
show: function() {}
};
mocksHelperForNFC.suiteSetup();
requireApp('communications/contacts/js/nfc.js', done);
}
);
nfcUtils = new NfcUtils();
});
suiteTeardown(function() {
mocksHelperForNFC.suiteTeardown();
window.navigator.mozNfc = realMozNfc;
window.MozNDEFRecord = realMozNDEFRecord;
window.utils = realUtils;
});
teardown(function() {
fb.setIsFbContact(false);
});
test('onpeerready is null on start', function() {
assert.isNull(navigator.mozNfc.onpeerready);
});
test('onpeerready set when startListening() fire', function() {
NFC.startListening();
assert.equal(typeof navigator.mozNfc.onpeerready, 'function');
});
test('onpeerready is null when stopListening() fire', function() {
NFC.stopListening();
assert.isNull(navigator.mozNfc.onpeerready);
});
test('Facebook contact should not be shared', function() {
var spy = this.sinon.spy(window.utils.status, 'show');
fb.setIsFbContact(true);
NFC.startListening();
navigator.mozNfc.onpeerready(
{
peer: MockMozNfc.MockNFCPeer
}
);
sinon.assert.called(spy);
});
// Bug 1013845
test('Shares diacritic characters correctly', function(done) {
var realSendNDEF = MockMozNfc.MockNFCPeer.sendNDEF;
var contact = new mozContact({
name: ['firefox'],
givenName: ['الثعلب النار 火狐狸 firefox']
});
var english = [102, 105, 114, 101, 102, 111, 120];
var chinese = [231, 129, 171, 231, 139, 144, 231, 139, 184];
var arabic = [216, 167, 217, 132, 216, 171, 216, 185, 217, 132, 216,
168, 32, 216, 167, 217, 132, 217, 134, 216, 167, 216, 177];
var space = 32;
var name = arabic.concat(space).concat(chinese)
.concat(space).concat(english);
MockMozNfc.MockNFCPeer.sendNDEF = function(records) {
MockMozNfc.MockNFCPeer.sendNDEF = realSendNDEF;
var header = 'BEGIN:VCARD\nVERSION:3.0\nn:;';
var payload = records[0].payload;
var pos = header.length + 2;
var actual = payload.subarray(pos, pos + name.length);
assert.isTrue(nfcUtils.equalArrays(actual, name));
done();
return Promise.resolve();
};
NFC.startListening(contact);
MockMozNfc.onpeerready({peer: MockMozNfc.MockNFCPeer});
});
});