summaryrefslogtreecommitdiffstats
path: root/comm/calendar/test/unit/test_extract.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--comm/calendar/test/unit/test_extract.js225
1 files changed, 225 insertions, 0 deletions
diff --git a/comm/calendar/test/unit/test_extract.js b/comm/calendar/test/unit/test_extract.js
new file mode 100644
index 0000000000..96b1729f5c
--- /dev/null
+++ b/comm/calendar/test/unit/test_extract.js
@@ -0,0 +1,225 @@
+/* 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/. */
+
+// This test works with code that is not timezone-aware.
+/* eslint-disable no-restricted-syntax */
+
+var { Extractor } = ChromeUtils.import("resource:///modules/calendar/calExtract.jsm");
+
+var extractor = new Extractor("en-US", 8);
+
+function run_test() {
+ // Sanity check to make sure the base url is still right. If this fails,
+ // don't forget to also fix the url in base/content/calendar-extract.js.
+ ok(extractor.checkBundle("en-US"));
+
+ test_event_start_end();
+ test_event_start_duration();
+ test_event_start_end_whitespace();
+ test_event_without_date();
+ test_event_next_year();
+ test_task_due();
+ test_overrides();
+ test_event_start_dollar_sign();
+}
+
+function test_event_start_end() {
+ let date = new Date(2012, 9, 1, 9, 0);
+ let title = "Wednesday meetup";
+ let content = "We'll meet at 2 pm and discuss until 3 pm.";
+
+ extractor.extract(title, content, date, undefined);
+ let guessed = extractor.guessStart();
+ let endGuess = extractor.guessEnd(guessed);
+
+ equal(guessed.year, 2012);
+ equal(guessed.month, 10);
+ equal(guessed.day, 3);
+ equal(guessed.hour, 14);
+ equal(guessed.minute, 0);
+
+ equal(endGuess.year, 2012);
+ equal(endGuess.month, 10);
+ equal(endGuess.day, 3);
+ equal(endGuess.hour, 15);
+ equal(endGuess.minute, 0);
+}
+
+function test_event_start_duration() {
+ let date = new Date(2012, 9, 1, 9, 0);
+ let title = "Wednesday meetup";
+ let content = "We'll meet at 2 pm and discuss for 30 minutes.";
+
+ extractor.extract(title, content, date, undefined);
+ let guessed = extractor.guessStart();
+ let endGuess = extractor.guessEnd(guessed);
+
+ equal(guessed.year, 2012);
+ equal(guessed.month, 10);
+ equal(guessed.day, 3);
+ equal(guessed.hour, 14);
+ equal(guessed.minute, 0);
+
+ equal(endGuess.year, 2012);
+ equal(endGuess.month, 10);
+ equal(endGuess.day, 3);
+ equal(endGuess.hour, 14);
+ equal(endGuess.minute, 30);
+}
+
+function test_event_start_end_whitespace() {
+ let date = new Date(2012, 9, 1, 9, 0);
+ let title = "Wednesday meetup";
+ let content = "We'll meet at2pm and discuss until\r\n3pm.";
+
+ extractor.extract(title, content, date, undefined);
+ let guessed = extractor.guessStart();
+ let endGuess = extractor.guessEnd(guessed);
+
+ equal(guessed.year, 2012);
+ equal(guessed.month, 10);
+ equal(guessed.day, 3);
+ equal(guessed.hour, 14);
+ equal(guessed.minute, 0);
+
+ equal(endGuess.year, 2012);
+ equal(endGuess.month, 10);
+ equal(endGuess.day, 3);
+ equal(endGuess.hour, 15);
+ equal(endGuess.minute, 0);
+}
+
+function test_event_without_date() {
+ let date = new Date(2012, 9, 1, 9, 0);
+ let title = "Meetup";
+ let content = "We'll meet at 2 pm and discuss until 3 pm.";
+
+ extractor.extract(title, content, date, undefined);
+ let guessed = extractor.guessStart();
+ let endGuess = extractor.guessEnd(guessed);
+
+ equal(guessed.year, 2012);
+ equal(guessed.month, 10);
+ equal(guessed.day, 1);
+ equal(guessed.hour, 14);
+ equal(guessed.minute, 0);
+
+ equal(endGuess.year, 2012);
+ equal(endGuess.month, 10);
+ equal(endGuess.day, 1);
+ equal(endGuess.hour, 15);
+ equal(endGuess.minute, 0);
+}
+
+function test_event_next_year() {
+ let date = new Date(2012, 9, 1, 9, 0);
+ let title = "Open day";
+ let content = "FYI: Next open day is planned for February 5th.";
+
+ extractor.extract(title, content, date, undefined);
+ let guessed = extractor.guessStart();
+ let endGuess = extractor.guessEnd(guessed);
+
+ equal(guessed.year, 2013);
+ equal(guessed.month, 2);
+ equal(guessed.day, 5);
+ equal(guessed.hour, undefined);
+ equal(guessed.minute, undefined);
+
+ equal(endGuess.year, undefined);
+ equal(endGuess.month, undefined);
+ equal(endGuess.day, undefined);
+ equal(endGuess.hour, undefined);
+ equal(endGuess.minute, undefined);
+}
+
+function test_task_due() {
+ let date = new Date(2012, 9, 1, 9, 0);
+ let title = "Assignment deadline";
+ let content = "This is a reminder that all assignments must be sent in by October 5th!.";
+
+ extractor.extract(title, content, date, undefined);
+ let guessed = extractor.guessStart(true);
+ let endGuess = extractor.guessEnd(guessed, true);
+
+ equal(guessed.year, 2012);
+ equal(guessed.month, 10);
+ equal(guessed.day, 1);
+ equal(guessed.hour, 9);
+ equal(guessed.minute, 0);
+
+ equal(endGuess.year, 2012);
+ equal(endGuess.month, 10);
+ equal(endGuess.day, 5);
+ equal(endGuess.hour, 0);
+ equal(endGuess.minute, 0);
+}
+
+function test_overrides() {
+ let date = new Date(2012, 9, 1, 9, 0);
+ let title = "Event invitation";
+ let content = "We'll meet 10:11 worromot";
+
+ extractor.extract(title, content, date, undefined);
+ let guessed = extractor.guessStart(false);
+ let endGuess = extractor.guessEnd(guessed, true);
+
+ equal(guessed.year, 2012);
+ equal(guessed.month, 10);
+ equal(guessed.day, 1);
+ equal(guessed.hour, 10);
+ equal(guessed.minute, 11);
+
+ equal(endGuess.year, undefined);
+ equal(endGuess.month, undefined);
+ equal(endGuess.day, undefined);
+ equal(endGuess.hour, undefined);
+ equal(endGuess.minute, undefined);
+
+ // recognize a custom "tomorrow" and hour.minutes pattern
+ let overrides = {
+ "from.hour.minutes": { add: "#2:#1", remove: "#1:#2" },
+ "from.tomorrow": { add: "worromot" },
+ };
+
+ Services.prefs.setStringPref("calendar.patterns.override", JSON.stringify(overrides));
+
+ extractor.extract(title, content, date, undefined);
+ guessed = extractor.guessStart(false);
+ endGuess = extractor.guessEnd(guessed, true);
+
+ equal(guessed.year, 2012);
+ equal(guessed.month, 10);
+ equal(guessed.day, 2);
+ equal(guessed.hour, 11);
+ equal(guessed.minute, 10);
+
+ equal(endGuess.year, undefined);
+ equal(endGuess.month, undefined);
+ equal(endGuess.day, undefined);
+ equal(endGuess.hour, undefined);
+ equal(endGuess.minute, undefined);
+}
+
+function test_event_start_dollar_sign() {
+ let date = new Date(2012, 9, 1, 9, 0);
+ let title = "Wednesday sale";
+ let content = "Sale starts at 3 pm and prices start at 2$.";
+
+ extractor.extract(title, content, date, undefined);
+ let guessed = extractor.guessStart();
+ let endGuess = extractor.guessEnd(guessed);
+
+ equal(guessed.year, 2012);
+ equal(guessed.month, 10);
+ equal(guessed.day, 3);
+ equal(guessed.hour, 15);
+ equal(guessed.minute, 0);
+
+ equal(endGuess.year, undefined);
+ equal(endGuess.month, undefined);
+ equal(endGuess.day, undefined);
+ equal(endGuess.hour, undefined);
+ equal(endGuess.minute, undefined);
+}