Index: test/filterStorage_readwrite.js
===================================================================
--- a/test/filterStorage_readwrite.js
+++ b/test/filterStorage_readwrite.js
@@ -86,26 +86,27 @@
       return -1;
     else if (a.key > b.key)
       return 1;
     return 0;
   });
   return sections;
 }
 
-function testReadWrite(test, withExternal, withEmptySpecial)
+async function testReadWrite(test, withExternal, withEmptySpecial)
 {
   test.ok(!filterStorage.initialized, "Uninitialized before the first load");
 
-  return testData.then(data =>
+  try
   {
+    let data = await testData;
+
     IO._setFileContents(filterStorage.sourceFile, data);
-    return filterStorage.loadFromDisk();
-  }).then(() =>
-  {
+    await filterStorage.loadFromDisk();
+
     test.ok(filterStorage.initialized, "Initialize after the first load");
     test.equal(filterStorage.fileProperties.version, filterStorage.formatVersion, "File format version");
 
     if (withExternal)
     {
       {
         let subscription = new ExternalSubscription("~external~external subscription ID", "External subscription");
         subscription.addFilter(Filter.fromText("foo"));
@@ -129,22 +130,29 @@
       filterStorage.removeFilter(Filter.fromText("!foo"), specialSubscription);
 
       test.equal(specialSubscription.filterCount, 0,
                  "No filters in special subscription");
       test.ok(new Set(filterStorage.subscriptions()).has(specialSubscription),
               "Empty special subscription still in storage");
     }
 
-    return filterStorage.saveToDisk();
-  }).then(() => testData).then(expected =>
+    await filterStorage.saveToDisk();
+
+    let expected = await testData;
+
+    test.deepEqual(canonize(IO._getFileContents(filterStorage.sourceFile)),
+                   canonize(expected), "Read/write result");
+  }
+  catch (error)
   {
-    test.deepEqual(canonize(IO._getFileContents(filterStorage.sourceFile)),
-               canonize(expected), "Read/write result");
-  }).catch(unexpectedError.bind(test)).then(() => test.done());
+    unexpectedError.call(test, error);
+  }
+
+  test.done();
 }
 
 exports.testReadAndSaveToFile = function(test)
 {
   testReadWrite(test, false);
 };
 
 exports.testReadAndSaveToFileWithExternalSubscription = function(test)
@@ -152,122 +160,143 @@
   testReadWrite(test, true);
 };
 
 exports.testReadAndSaveToFileWithEmptySpecial = function(test)
 {
   testReadWrite(test, false, true);
 };
 
-exports.testImportExport = function(test)
+exports.testImportExport = async function(test)
 {
-  testData.then(lines =>
+  try
   {
+    let lines = await testData;
+
     if (lines.length && lines[lines.length - 1] == "")
       lines.pop();
 
     let importer = filterStorage.importData();
     for (let line of lines)
       importer(line);
     importer(null);
 
     test.equal(filterStorage.fileProperties.version, filterStorage.formatVersion, "File format version");
 
     let exported = Array.from(filterStorage.exportData());
     test.deepEqual(canonize(exported), canonize(lines), "Import/export result");
-  }).catch(unexpectedError.bind(test)).then(() => test.done());
+  }
+  catch (error)
+  {
+    unexpectedError.call(test, error);
+  }
+
+  test.done();
 };
 
-exports.testSavingWithoutBackups = function(test)
+exports.testSavingWithoutBackups = async function(test)
 {
   Prefs.patternsbackups = 0;
   Prefs.patternsbackupinterval = 24;
 
-  filterStorage.saveToDisk().then(() =>
+  try
   {
-    return filterStorage.saveToDisk();
-  }).then(() =>
-  {
+    await filterStorage.saveToDisk();
+    await filterStorage.saveToDisk();
+
     test.ok(!IO._getFileContents(filterStorage.getBackupName(1)),
             "Backup shouldn't be created");
-  }).catch(unexpectedError.bind(test)).then(() => test.done());
+  }
+  catch (error)
+  {
+    unexpectedError.call(test, error);
+  }
+
+  test.done();
 };
 
-exports.testSavingWithBackups = function(test)
+exports.testSavingWithBackups = async function(test)
 {
   Prefs.patternsbackups = 2;
   Prefs.patternsbackupinterval = 24;
 
   let backupFile = filterStorage.getBackupName(1);
   let backupFile2 = filterStorage.getBackupName(2);
   let backupFile3 = filterStorage.getBackupName(3);
 
   let oldModifiedTime;
 
-  filterStorage.saveToDisk().then(() =>
+  try
   {
+    await filterStorage.saveToDisk();
+
     // Save again immediately
-    return filterStorage.saveToDisk();
-  }).then(() =>
-  {
+    await filterStorage.saveToDisk();
+
     test.ok(IO._getFileContents(backupFile), "First backup created");
 
     oldModifiedTime = IO._getModifiedTime(backupFile) - 10000;
     IO._setModifiedTime(backupFile, oldModifiedTime);
-    return filterStorage.saveToDisk();
-  }).then(() =>
-  {
+    await filterStorage.saveToDisk();
+
     test.equal(IO._getModifiedTime(backupFile), oldModifiedTime, "Backup not overwritten if it is only 10 seconds old");
 
     oldModifiedTime -= 40 * 60 * 60 * 1000;
     IO._setModifiedTime(backupFile, oldModifiedTime);
-    return filterStorage.saveToDisk();
-  }).then(() =>
-  {
+    await filterStorage.saveToDisk();
+
     test.notEqual(IO._getModifiedTime(backupFile), oldModifiedTime, "Backup overwritten if it is 40 hours old");
 
     test.ok(IO._getFileContents(backupFile2), "Second backup created when first backup is overwritten");
 
     IO._setModifiedTime(backupFile, IO._getModifiedTime(backupFile) - 20000);
     oldModifiedTime = IO._getModifiedTime(backupFile2);
-    return filterStorage.saveToDisk();
-  }).then(() =>
-  {
+    await filterStorage.saveToDisk();
+
     test.equal(IO._getModifiedTime(backupFile2), oldModifiedTime, "Second backup not overwritten if first one is only 20 seconds old");
 
     IO._setModifiedTime(backupFile, IO._getModifiedTime(backupFile) - 25 * 60 * 60 * 1000);
     oldModifiedTime = IO._getModifiedTime(backupFile2);
-    return filterStorage.saveToDisk();
-  }).then(() =>
-  {
+    await filterStorage.saveToDisk();
+
     test.notEqual(IO._getModifiedTime(backupFile2), oldModifiedTime, "Second backup overwritten if first one is 25 hours old");
 
     test.ok(!IO._getFileContents(backupFile3), "Third backup not created with patternsbackups = 2");
-  }).catch(unexpectedError.bind(test)).then(() => test.done());
+  }
+  catch (error)
+  {
+    unexpectedError.call(test, error);
+  }
+
+  test.done();
 };
 
-exports.testRestoringBackup = function(test)
+exports.testRestoringBackup = async function(test)
 {
   Prefs.patternsbackups = 2;
   Prefs.patternsbackupinterval = 24;
 
-  filterStorage.saveToDisk().then(() =>
+  try
   {
+    await filterStorage.saveToDisk();
+
     test.equal([...filterStorage.subscriptions()][0].filterCount, 1, "Initial filter count");
     filterStorage.addFilter(Filter.fromText("barfoo"));
     test.equal([...filterStorage.subscriptions()][0].filterCount, 2, "Filter count after adding a filter");
-    return filterStorage.saveToDisk();
-  }).then(() =>
-  {
-    return filterStorage.loadFromDisk();
-  }).then(() =>
-  {
+    await filterStorage.saveToDisk();
+
+    await filterStorage.loadFromDisk();
+
     test.equal([...filterStorage.subscriptions()][0].filterCount, 2, "Filter count after adding filter and reloading");
-    return filterStorage.restoreBackup(1);
-  }).then(() =>
-  {
+    await filterStorage.restoreBackup(1);
+
     test.equal([...filterStorage.subscriptions()][0].filterCount, 1, "Filter count after restoring backup");
-    return filterStorage.loadFromDisk();
-  }).then(() =>
+    await filterStorage.loadFromDisk();
+
+    test.equal([...filterStorage.subscriptions()][0].filterCount, 1, "Filter count after reloading");
+  }
+  catch (error)
   {
-    test.equal([...filterStorage.subscriptions()][0].filterCount, 1, "Filter count after reloading");
-  }).catch(unexpectedError.bind(test)).then(() => test.done());
+    unexpectedError.call(test, error);
+  }
+
+  test.done();
 };
