diff options
Diffstat (limited to 'comm/calendar/test/unit/test_extract.js')
-rw-r--r-- | comm/calendar/test/unit/test_extract.js | 225 |
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); +} |