Bug 889673 - Adapt Contacts Unit Tests for Android. CLOSED TREE. r=reuben

--HG--
extra : amend_source : 15338826405ad30caba9573b2cf934a19cca77fe
This commit is contained in:
Shane Tully 2013-07-18 15:29:00 -07:00
parent 16d77c1f85
commit 4eacef464e
4 changed files with 93 additions and 27 deletions

View File

@ -15,5 +15,9 @@ EXTRA_COMPONENTS += [
EXTRA_JS_MODULES += [
'ContactDB.jsm',
'ContactService.jsm',
]
if CONFIG['MOZ_WIDGET_TOOLKIT'] != 'android':
EXTRA_JS_MODULES += [
'ContactService.jsm'
]

View File

@ -30,33 +30,35 @@ SpecialPowers.addPermission("contacts-write", true, document);
SpecialPowers.addPermission("contacts-read", true, document);
SpecialPowers.addPermission("contacts-create", true, document);
var isAndroid = (navigator.userAgent.indexOf("Android") !== -1);
// For Sorting
var c1 = {
name: "a",
name: ["a a"],
familyName: ["a"],
givenName: ["a"],
};
var c2 = {
name: "b",
name: ["b b"],
familyName: ["b"],
givenName: ["b"],
};
var c3 = {
name: "c",
name: ["c c", "a a", "b b"],
familyName: ["c","a","b"],
givenName: ["c","a","b"],
};
var c4 = {
name: "d",
name: ["c c", "a a", "c c"],
familyName: ["c","a","c"],
givenName: ["c","a","c"],
};
var c5 = {
name: "empty"
nickname: "empty"
};
var adr1 = {
@ -78,18 +80,17 @@ var adr2 = {
};
var properties1 = {
name: "Testname1",
name: ["Test1 TestFamilyName", "Test2 Wagner"],
familyName: ["TestFamilyName","Wagner"],
givenName: ["Test1","Test2"],
nickname: "nicktest",
tel: [{type: ["work"], value: "123456", carrier: "testCarrier"} , {type: ["home", "fax"], value: "+55 (31) 9876-3456"}, {type: ["home"], value: "+49 451 491934"}],
adr: adr1,
email: [{type: ["work"], value: "x@y.com"}],
key: "4343JEGJGERNBEGOI34G3WGVERBERB"
};
var properties2 = {
name: ["dummyName", "dummyName2"],
name: ["dummyHonorificPrefix dummyGivenName dummyFamilyName dummyHonorificSuffix", "dummyHonorificPrefix2"],
familyName: "dummyFamilyName",
givenName: "dummyGivenName",
honorificPrefix: ["dummyHonorificPrefix","dummyHonorificPrefix2"],
@ -102,10 +103,10 @@ var properties2 = {
impp: [{type: ["aim"], value:"im1", pref: 1}, {value: "im2"}],
org: ["org1", "org2"],
jobTitle: ["boss", "superboss"],
bday: new Date("1980, 12, 01"),
note: "test note",
category: ["cat1", "cat2"],
url: [{type: ["work", "work2"], value: "www.1.com", pref: 1}, {value:"www2.com"}],
bday: new Date("1980, 12, 01"),
anniversary: new Date("2000, 12, 01"),
sex: "male",
genderIdentity: "test",
@ -170,7 +171,7 @@ function checkAddress(adr1, adr2) {
checkStrArray(adr1.region, adr2.region, "Same region");
checkStrArray(adr1.postalCode, adr2.postalCode, "Same postalCode");
checkStrArray(adr1.countryName, adr2.countryName, "Same countryName");
is(adr1.pref, adr2.pref, "Same pref");
checkPref(adr1.pref, adr2.pref);
}
function checkTel(tel1, tel2) {
@ -181,7 +182,7 @@ function checkTel(tel1, tel2) {
checkStrArray(tel1.type, tel2.type, "Same type");
checkStrArray(tel1.value, tel2.value, "Same value");
checkStrArray(tel1.carrier, tel2.carrier, "Same carrier");
is(tel1.pref, tel2.pref, "Same pref");
checkPref(tel1.pref, tel2.pref);
}
function checkField(field1, field2) {
@ -191,7 +192,42 @@ function checkField(field1, field2) {
}
checkStrArray(field1.type, field2.type, "Same type");
checkStrArray(field1.value, field2.value, "Same value");
is(field1.pref, field2.pref, "Same pref");
checkPref(field1.pref, field2.pref);
}
function checkPref(pref1, pref2) {
// If on Android treat one preference as 0 and the other as undefined as matching
if (isAndroid) {
if ((pref1 == 0 && pref2 == undefined) || (pref1 == undefined && pref2 == 0)) {
pref1 = 0;
pref2 = 0;
}
}
is(pref1, pref2, "Same pref");
}
function checkCategory(category1, category2) {
// Android adds contacts to the a default category. This should be removed from the
// results before comparing them
if (isAndroid) {
category1 = removeAndroidDefaultCategory(category1);
category2 = removeAndroidDefaultCategory(category2);
}
checkStrArray(category1, category2, "Same Category")
}
function removeAndroidDefaultCategory(category) {
if (category == undefined) {
return;
}
for (var i = 0; i < category.length; i++) {
if (category[i] == "My Contacts") {
category.splice(i, 1);
}
}
return category;
}
function checkContacts(contact1, contact2) {
@ -202,7 +238,7 @@ function checkContacts(contact1, contact2) {
checkStrArray(contact1.familyName, contact2.familyName, "Same familyName");
checkStrArray(contact1.honorificSuffix, contact2.honorificSuffix, "Same honorificSuffix");
checkStrArray(contact1.nickname, contact2.nickname, "Same nickname");
checkStrArray(contact1.category, contact2.category, "Same category");
checkCategory(contact1.category, contact2.category);
checkStrArray(contact1.org, contact2.org, "Same org");
checkStrArray(contact1.jobTitle, contact2.jobTitle, "Same jobTitle");
is(contact1.bday ? contact1.bday.valueOf() : null, contact2.bday ? contact2.bday.valueOf() : null, "Same birthday");
@ -240,7 +276,14 @@ function checkRevision(revision, msg, then) {
is(e.target.result, initialRev+revision, msg);
then();
};
revReq.onerror = onFailure;
// The revision function isn't supported on Android so treat on failure as success
if (isAndroid) {
revReq.onerror = function(e) {
then();
};
} else {
revReq.onerror = onFailure;
}
}
function checkCount(count, msg, then) {
@ -262,7 +305,16 @@ var steps = [
initialRev = e.target.result;
next();
};
req.onerror = onFailure;
// Android does not support the revision function. Treat errors as success.
if (isAndroid) {
req.onerror = function(e) {
initialRev = 0;
next();
};
} else {
req.onerror = onFailure;
}
},
function () {
ok(true, "Deleting database");
@ -744,6 +796,12 @@ var steps = [
req.onerror = onFailure;
},
function() {
// Android does not support published/updated fields. Skip this.
if (isAndroid) {
next();
return;
}
ok(true, "Saving old contact, should abort!");
req = mozContacts.save(createResult1);
req.onsuccess = onUnwantedSuccess;
@ -1006,7 +1064,7 @@ var steps = [
req = mozContacts.save(createResult1);
req.onsuccess = function () {
ok(createResult1.id, "The contact now has an ID.");
ok(createResult1.name == properties1.name, "Same Name");
checkStrArray(createResult1.name, properties1.name, "Same Name");
checkCount(20, "20 contacts in DB", next);
};
req.onerror = onFailure;
@ -1085,7 +1143,7 @@ var steps = [
req = mozContacts.save(createResult1);
req.onsuccess = function () {
ok(createResult1.id, "The contact now has an ID.");
ok(createResult1.name == properties1.name, "Same Name");
checkStrArray(createResult1.name, properties1.name, "Same Name");
next();
}
req.onerror = onFailure;
@ -1330,7 +1388,7 @@ var steps = [
function () {
ok(true, "Adding empty contact");
createResult1 = new mozContact();
createResult1.init({givenName: "5"});
createResult1.init({name: "5", givenName: "5"});
req = navigator.mozContacts.save(createResult1);
req.onsuccess = function () {
ok(createResult1.id, "The contact now has an ID.");
@ -1431,9 +1489,9 @@ var steps = [
req.onerror = onFailure;
},
function () {
ok(true, "Testing numbersOnly search");
ok(true, "Testing numbersOnly search 1");
createResult1 = new mozContact();
createResult1.init({ givenName: ["aaaaaaaaa"], tel: [{ value: "1234567890"}]});
createResult1.init({ name: ["aaaaaaaaa"], givenName: ["aaaaaaaaa"], tel: [{ value: "1234567890"}]});
req = navigator.mozContacts.save(createResult1);
req.onsuccess = function () {
ok(createResult1.id, "The contact now has an ID.");
@ -1442,7 +1500,7 @@ var steps = [
req.onerror = onFailure;
},
function () {
ok(true, "Test numbersOnly search");
ok(true, "Test numbersOnly search 2");
var options = {filterBy: ["givenName", "tel"],
filterOp: "contains",
filterValue: "a"};
@ -1455,7 +1513,7 @@ var steps = [
req.onerror = onFailure;
},
function () {
ok(true, "Test numbersOnly search");
ok(true, "Test numbersOnly search 3");
var options = {filterBy: ["givenName", "tel"],
filterOp: "contains",
filterValue: "b"};
@ -1467,7 +1525,7 @@ var steps = [
req.onerror = onFailure;
},
function () {
ok(true, "Test numbersOnly search");
ok(true, "Test numbersOnly search 4");
var options = {filterBy: ["givenName", "tel"],
filterOp: "contains",
filterValue: "1a"};
@ -1479,7 +1537,7 @@ var steps = [
req.onerror = onFailure;
},
function () {
ok(true, "Test numbersOnly search");
ok(true, "Test numbersOnly search 5");
var options = {filterBy: ["givenName", "tel"],
filterOp: "contains",
filterValue: "1(23)"};
@ -1491,7 +1549,7 @@ var steps = [
req.onerror = onFailure;
},
function () {
ok(true, "Test numbersOnly search");
ok(true, "Test numbersOnly search 6");
var options = {filterBy: ["givenName", "tel"],
filterOp: "contains",
filterValue: "1(23)a"};

View File

@ -85,11 +85,13 @@ var randomBlob = getRandomBlob(1024);
var randomBlob2 = getRandomBlob(1024);
var properties1 = {
name: "xTestname1",
givenName: "xTestname1",
photo: [randomBlob]
};
var properties2 = {
name: "yTestname2",
givenName: "yTestname2",
photo: [randomBlob, randomBlob2]
};

View File

@ -40,7 +40,7 @@ let adr1 = {
};
let properties1 = {
name: "Testname1",
name: ["Testname1 TestFamilyName"],
familyName: ["TestFamilyName","Wagner"],
givenName: ["Test1","Test2"],
nickname: "nicktest",
@ -165,6 +165,7 @@ function addContacts() {
for (let i = 0; i < 39; ++i) {
createResult1 = new mozContact();
properties1.familyName[0] = "Testname" + (i < 10 ? "0" + i : i);
properties1.name = properties1.givenName[0] + " " + properties1.familyName[0];
createResult1.init(properties1);
req = mozContacts.save(createResult1);
req.onsuccess = function() {
@ -174,6 +175,7 @@ function addContacts() {
};
createResult1 = new mozContact();
properties1.familyName[0] = "Testname39";
properties1.name = properties1.givenName[0] + " Testname39";
createResult1.init(properties1);
req = mozContacts.save(createResult1);
req.onsuccess = function() {