summaryrefslogtreecommitdiffstats
path: root/comm/calendar/test/unit/test_unifinder_utils.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/calendar/test/unit/test_unifinder_utils.js')
-rw-r--r--comm/calendar/test/unit/test_unifinder_utils.js137
1 files changed, 137 insertions, 0 deletions
diff --git a/comm/calendar/test/unit/test_unifinder_utils.js b/comm/calendar/test/unit/test_unifinder_utils.js
new file mode 100644
index 0000000000..ae44379781
--- /dev/null
+++ b/comm/calendar/test/unit/test_unifinder_utils.js
@@ -0,0 +1,137 @@
+/* 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/. */
+
+var { XPCOMUtils } = ChromeUtils.importESModule("resource://gre/modules/XPCOMUtils.sys.mjs");
+
+XPCOMUtils.defineLazyModuleGetters(this, {
+ CalEvent: "resource:///modules/CalEvent.jsm",
+ CalTodo: "resource:///modules/CalTodo.jsm",
+});
+
+function run_test() {
+ test_get_item_sort_key();
+ test_sort_items();
+}
+
+function test_get_item_sort_key() {
+ let event = new CalEvent(dedent`
+ BEGIN:VEVENT
+ PRIORITY:8
+ SUMMARY:summary
+ DTSTART:20180102T030405Z
+ DTEND:20180607T080910Z
+ CATEGORIES:a,b,c
+ LOCATION:location
+ STATUS:CONFIRMED
+ END:VEVENT
+ `);
+
+ strictEqual(cal.unifinder.getItemSortKey(event, "nothing"), null);
+ equal(cal.unifinder.getItemSortKey(event, "priority"), 8);
+ equal(cal.unifinder.getItemSortKey(event, "title"), "summary");
+ equal(cal.unifinder.getItemSortKey(event, "startDate"), 1514862245000000);
+ equal(cal.unifinder.getItemSortKey(event, "endDate"), 1528358950000000);
+ equal(cal.unifinder.getItemSortKey(event, "categories"), "a, b, c");
+ equal(cal.unifinder.getItemSortKey(event, "location"), "location");
+ equal(cal.unifinder.getItemSortKey(event, "status"), 1);
+
+ let task = new CalTodo(dedent`
+ BEGIN:VTODO
+ DTSTART:20180102T030405Z
+ DUE:20180607T080910Z
+ PERCENT-COMPLETE:20
+ STATUS:COMPLETED
+ END:VTODO
+ `);
+
+ equal(cal.unifinder.getItemSortKey(task, "priority"), 5);
+ strictEqual(cal.unifinder.getItemSortKey(task, "title"), "");
+ equal(cal.unifinder.getItemSortKey(task, "entryDate"), 1514862245000000);
+ equal(cal.unifinder.getItemSortKey(task, "dueDate"), 1528358950000000);
+ equal(cal.unifinder.getItemSortKey(task, "completedDate"), -62168601600000000);
+ equal(cal.unifinder.getItemSortKey(task, "percentComplete"), 20);
+ strictEqual(cal.unifinder.getItemSortKey(task, "categories"), "");
+ strictEqual(cal.unifinder.getItemSortKey(task, "location"), "");
+ equal(cal.unifinder.getItemSortKey(task, "status"), 2);
+
+ let task2 = new CalTodo(dedent`
+ BEGIN:VTODO
+ STATUS:GETTIN' THERE
+ END:VTODO
+ `);
+ equal(cal.unifinder.getItemSortKey(task2, "percentComplete"), 0);
+ equal(cal.unifinder.getItemSortKey(task2, "status"), -1);
+
+ // Default CalTodo objects have the default percentComplete.
+ let task3 = new CalTodo();
+ equal(cal.unifinder.getItemSortKey(task3, "percentComplete"), 0);
+}
+
+function test_sort_items() {
+ // string comparison
+ let summaries = ["", "a", "b"];
+ let items = summaries.map(summary => {
+ return new CalEvent(dedent`
+ BEGIN:VEVENT
+ SUMMARY:${summary}
+ END:VEVENT
+ `);
+ });
+
+ cal.unifinder.sortItems(items, "title", 1);
+ deepEqual(
+ items.map(item => item.title),
+ ["a", "b", null]
+ );
+
+ cal.unifinder.sortItems(items, "title", -1);
+ deepEqual(
+ items.map(item => item.title),
+ [null, "b", "a"]
+ );
+
+ // date comparison
+ let dates = ["20180101T000002Z", "20180101T000000Z", "20180101T000001Z"];
+ items = dates.map(date => {
+ return new CalEvent(dedent`
+ BEGIN:VEVENT
+ DTSTART:${date}
+ END:VEVENT
+ `);
+ });
+
+ cal.unifinder.sortItems(items, "startDate", 1);
+ deepEqual(
+ items.map(item => item.startDate.icalString),
+ ["20180101T000000Z", "20180101T000001Z", "20180101T000002Z"]
+ );
+
+ cal.unifinder.sortItems(items, "startDate", -1);
+ deepEqual(
+ items.map(item => item.startDate.icalString),
+ ["20180101T000002Z", "20180101T000001Z", "20180101T000000Z"]
+ );
+
+ // number comparison
+ let percents = [3, 1, 2];
+ items = percents.map(percent => {
+ return new CalTodo(dedent`
+ BEGIN:VTODO
+ PERCENT-COMPLETE:${percent}
+ END:VTODO
+ `);
+ });
+
+ cal.unifinder.sortItems(items, "percentComplete", 1);
+ deepEqual(
+ items.map(item => item.percentComplete),
+ [1, 2, 3]
+ );
+
+ cal.unifinder.sortItems(items, "percentComplete", -1);
+ deepEqual(
+ items.map(item => item.percentComplete),
+ [3, 2, 1]
+ );
+}