/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ const { Service } = ChromeUtils.importESModule( "resource://services-sync/service.sys.mjs" ); add_task(async function test_clients_escape() { _("Set up test fixtures."); await configureIdentity(); let keyBundle = Service.identity.syncKeyBundle; let engine = Service.clientsEngine; try { _("Test that serializing client records results in uploadable ascii"); engine.localID = "ascii"; engine.localName = "wéävê"; _("Make sure we have the expected record"); let record = await engine._createRecord("ascii"); Assert.equal(record.id, "ascii"); Assert.equal(record.name, "wéävê"); _("Encrypting record..."); await record.encrypt(keyBundle); _("Encrypted."); let serialized = JSON.stringify(record); let checkCount = 0; _("Checking for all ASCII:", serialized); for (let ch of serialized) { let code = ch.charCodeAt(0); _("Checking asciiness of '", ch, "'=", code); Assert.ok(code < 128); checkCount++; } _("Processed", checkCount, "characters out of", serialized.length); Assert.equal(checkCount, serialized.length); _("Making sure the record still looks like it did before"); await record.decrypt(keyBundle); Assert.equal(record.id, "ascii"); Assert.equal(record.name, "wéävê"); _("Sanity check that creating the record also gives the same"); record = await engine._createRecord("ascii"); Assert.equal(record.id, "ascii"); Assert.equal(record.name, "wéävê"); } finally { for (const pref of Svc.PrefBranch.getChildList("")) { Svc.PrefBranch.clearUserPref(pref); } } });