summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/base/test/unit/test_virtualFolders1.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/base/test/unit/test_virtualFolders1.js')
-rw-r--r--comm/mailnews/base/test/unit/test_virtualFolders1.js205
1 files changed, 205 insertions, 0 deletions
diff --git a/comm/mailnews/base/test/unit/test_virtualFolders1.js b/comm/mailnews/base/test/unit/test_virtualFolders1.js
new file mode 100644
index 0000000000..5fe32de237
--- /dev/null
+++ b/comm/mailnews/base/test/unit/test_virtualFolders1.js
@@ -0,0 +1,205 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, you can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * Tests that subfolders added to searched folders are also searched.
+ */
+
+const { VirtualFolderHelper } = ChromeUtils.import(
+ "resource:///modules/VirtualFolderWrapper.jsm"
+);
+
+add_task(function () {
+ MailServices.accounts.createLocalMailAccount();
+ let account = MailServices.accounts.accounts[0];
+ let rootFolder = account.incomingServer.rootFolder;
+
+ // Create some real folders to test.
+ rootFolder.createSubfolder("test A", null);
+ let testFolderA = rootFolder.getChildNamed("test A");
+ rootFolder.createSubfolder("test B", null);
+ let testFolderB = rootFolder.getChildNamed("test B");
+ rootFolder.createSubfolder("test C", null);
+ let testFolderC = rootFolder.getChildNamed("test C");
+
+ // Create a virtual folder with no search folders.
+ let wrappedFolderZ = VirtualFolderHelper.createNewVirtualFolder(
+ "virtual Z",
+ rootFolder,
+ [],
+ "ANY",
+ false
+ );
+ Assert.equal(
+ wrappedFolderZ.virtualFolder,
+ rootFolder.getChildNamed("virtual Z")
+ );
+ Assert.equal(wrappedFolderZ.searchFolderURIs, "");
+ Assert.deepEqual(wrappedFolderZ.searchFolders, []);
+
+ // Create a virtual folder with one search folder.
+ let wrappedFolderY = VirtualFolderHelper.createNewVirtualFolder(
+ "virtual Y",
+ rootFolder,
+ [testFolderA],
+ "ANY",
+ false
+ );
+ Assert.equal(
+ wrappedFolderY.virtualFolder,
+ rootFolder.getChildNamed("virtual Y")
+ );
+ Assert.equal(wrappedFolderY.searchFolderURIs, testFolderA.URI);
+ Assert.deepEqual(wrappedFolderY.searchFolders, [testFolderA]);
+
+ // Create a virtual folder with two search folders.
+ let wrappedFolderX = VirtualFolderHelper.createNewVirtualFolder(
+ "virtual X",
+ rootFolder,
+ [testFolderB, testFolderC],
+ "ANY",
+ false
+ );
+ Assert.equal(
+ wrappedFolderX.virtualFolder,
+ rootFolder.getChildNamed("virtual X")
+ );
+ Assert.equal(
+ wrappedFolderX.searchFolderURIs,
+ `${testFolderB.URI}|${testFolderC.URI}`
+ );
+ Assert.deepEqual(wrappedFolderX.searchFolders, [testFolderB, testFolderC]);
+
+ // Add a subfolder to real folder B. Check it is added to virtual folder X.
+ testFolderB.createSubfolder("test BB", null);
+ let testFolderBB = testFolderB.getChildNamed("test BB");
+ Assert.equal(
+ wrappedFolderZ.searchFolderURIs,
+ "",
+ "virtual folder Z should not change"
+ );
+ Assert.deepEqual(
+ wrappedFolderZ.searchFolders,
+ [],
+ "virtual folder Z should not change"
+ );
+ Assert.equal(
+ wrappedFolderY.searchFolderURIs,
+ testFolderA.URI,
+ "virtual folder Y should not change"
+ );
+ Assert.deepEqual(
+ wrappedFolderY.searchFolders,
+ [testFolderA],
+ "virtual folder Y should not change"
+ );
+ Assert.equal(
+ wrappedFolderX.searchFolderURIs,
+ `${testFolderB.URI}|${testFolderC.URI}|${testFolderBB.URI}`
+ );
+ Assert.deepEqual(wrappedFolderX.searchFolders, [
+ testFolderB,
+ testFolderBB,
+ testFolderC,
+ ]);
+
+ // Add a subfolder to real folder BB. Check it is added to virtual folder X.
+ testFolderBB.createSubfolder("test BBB", null);
+ let testFolderBBB = testFolderBB.getChildNamed("test BBB");
+ Assert.equal(
+ wrappedFolderZ.searchFolderURIs,
+ "",
+ "virtual folder Z should not change"
+ );
+ Assert.deepEqual(
+ wrappedFolderZ.searchFolders,
+ [],
+ "virtual folder Z should not change"
+ );
+ Assert.equal(
+ wrappedFolderY.searchFolderURIs,
+ testFolderA.URI,
+ "virtual folder Y should not change"
+ );
+ Assert.deepEqual(
+ wrappedFolderY.searchFolders,
+ [testFolderA],
+ "virtual folder Y should not change"
+ );
+ Assert.equal(
+ wrappedFolderX.searchFolderURIs,
+ `${testFolderB.URI}|${testFolderC.URI}|${testFolderBB.URI}|${testFolderBBB.URI}`
+ );
+ Assert.deepEqual(wrappedFolderX.searchFolders, [
+ testFolderB,
+ testFolderBB,
+ testFolderBBB,
+ testFolderC,
+ ]);
+
+ // Remove BB from virtual folder X.
+ wrappedFolderX.searchFolders = [testFolderB, testFolderBBB, testFolderC];
+ Assert.equal(
+ wrappedFolderZ.searchFolderURIs,
+ "",
+ "virtual folder Z should not change"
+ );
+ Assert.deepEqual(
+ wrappedFolderZ.searchFolders,
+ [],
+ "virtual folder Z should not change"
+ );
+ Assert.equal(
+ wrappedFolderY.searchFolderURIs,
+ testFolderA.URI,
+ "virtual folder Y should not change"
+ );
+ Assert.deepEqual(
+ wrappedFolderY.searchFolders,
+ [testFolderA],
+ "virtual folder Y should not change"
+ );
+ Assert.equal(
+ wrappedFolderX.searchFolderURIs,
+ `${testFolderB.URI}|${testFolderBBB.URI}|${testFolderC.URI}`
+ );
+ Assert.deepEqual(wrappedFolderX.searchFolders, [
+ testFolderB,
+ testFolderBBB,
+ testFolderC,
+ ]);
+
+ // Add a second subfolder to the removed folder. Check it is not added to
+ // virtual folder X, because the parent folder is not in X.
+ testFolderBB.createSubfolder("test BBB two", null);
+ Assert.equal(
+ wrappedFolderZ.searchFolderURIs,
+ "",
+ "virtual folder Z should not change"
+ );
+ Assert.deepEqual(
+ wrappedFolderZ.searchFolders,
+ [],
+ "virtual folder Z should not change"
+ );
+ Assert.equal(
+ wrappedFolderY.searchFolderURIs,
+ testFolderA.URI,
+ "virtual folder Y should not change"
+ );
+ Assert.deepEqual(
+ wrappedFolderY.searchFolders,
+ [testFolderA],
+ "virtual folder Y should not change"
+ );
+ Assert.equal(
+ wrappedFolderX.searchFolderURIs,
+ `${testFolderB.URI}|${testFolderBBB.URI}|${testFolderC.URI}`
+ );
+ Assert.deepEqual(wrappedFolderX.searchFolders, [
+ testFolderB,
+ testFolderBBB,
+ testFolderC,
+ ]);
+});