summaryrefslogtreecommitdiffstats
path: root/comm/calendar/test/unit/test_extract_parser.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/calendar/test/unit/test_extract_parser.js')
-rw-r--r--comm/calendar/test/unit/test_extract_parser.js160
1 files changed, 160 insertions, 0 deletions
diff --git a/comm/calendar/test/unit/test_extract_parser.js b/comm/calendar/test/unit/test_extract_parser.js
new file mode 100644
index 0000000000..d1b0f48b80
--- /dev/null
+++ b/comm/calendar/test/unit/test_extract_parser.js
@@ -0,0 +1,160 @@
+/* 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 for the CalExtractParser module.
+ */
+var { CalExtractParseNode, extendParseRule, prepareArguments } = ChromeUtils.import(
+ "resource:///modules/calendar/extract/CalExtractParser.jsm"
+);
+
+/**
+ * Tests to ensure extendParseRule() expands parse rules as we desire.
+ */
+add_task(function testExtendParseRule() {
+ let action = () => {};
+
+ let tests = [
+ {
+ name: "parse rules are expanded correctly",
+ input: {
+ name: "text",
+ patterns: ["TEXT"],
+ action,
+ },
+ expected: {
+ name: "text",
+ patterns: ["TEXT"],
+ action,
+ flags: [0],
+ graph: {
+ symbol: null,
+ flags: null,
+ descendants: [
+ {
+ symbol: "TEXT",
+ flags: 0,
+ descendants: [],
+ },
+ ],
+ },
+ },
+ },
+ {
+ name: "flags are detected correctly",
+ input: {
+ name: "text",
+ patterns: ["CHAR+", "TEXT?", "characters*"],
+ action,
+ },
+ expected: {
+ name: "text",
+ action,
+ patterns: ["CHAR", "TEXT", "characters"],
+ flags: [
+ CalExtractParseNode.FLAG_NONEMPTY | CalExtractParseNode.FLAG_MULTIPLE,
+ CalExtractParseNode.FLAG_OPTIONAL,
+ CalExtractParseNode.FLAG_OPTIONAL | CalExtractParseNode.FLAG_MULTIPLE,
+ ],
+ graph: {
+ symbol: null,
+ flags: null,
+ descendants: [
+ {
+ symbol: "CHAR",
+ flags: CalExtractParseNode.FLAG_NONEMPTY | CalExtractParseNode.FLAG_MULTIPLE,
+ descendants: [
+ {
+ symbol: "CHAR",
+ },
+ {
+ symbol: "TEXT",
+ flags: CalExtractParseNode.FLAG_OPTIONAL,
+ descendants: [
+ {
+ symbol: "characters",
+ flags: CalExtractParseNode.FLAG_OPTIONAL | CalExtractParseNode.FLAG_MULTIPLE,
+ descendants: [
+ {
+ symbol: "characters",
+ },
+ ],
+ },
+ ],
+ },
+ ],
+ },
+ ],
+ },
+ },
+ },
+ ];
+
+ for (let test of tests) {
+ info(`Test extendParseRule(): ${test.name}`);
+ compareExtractResults(extendParseRule(test.input), test.expected);
+ }
+});
+
+/**
+ * Tests prepareArguments() gives the correct arguments.
+ */
+add_task(function testReconcileArguments() {
+ let tests = [
+ {
+ name: "patterns without no flags bits are untouched",
+ rule: {
+ name: "text",
+ patterns: ["CHAR", "TEXT", "characters"],
+ flags: [0, 0, 0],
+ },
+ matched: [
+ ["CHAR", "is char"],
+ ["TEXT", "is text"],
+ ["characters", "is characters"],
+ ],
+ expected: ["is char", "is text", "is characters"],
+ },
+ {
+ name: "multi patterns are turned into arrays",
+ rule: {
+ name: "text",
+ patterns: ["CHAR", "TEXT", "characters"],
+ flags: [
+ CalExtractParseNode.FLAG_NONEMPTY | CalExtractParseNode.FLAG_MULTIPLE,
+ CalExtractParseNode.FLAG_OPTIONAL,
+ CalExtractParseNode.FLAG_OPTIONAL | CalExtractParseNode.FLAG_MULTIPLE,
+ ],
+ },
+ matched: [
+ ["CHAR", "is char"],
+ ["TEXT", "is text"],
+ ["characters", "is characters"],
+ ],
+ expected: [["is char"], "is text", ["is characters"]],
+ },
+ {
+ name: "unmatched optional patterns are null",
+ rule: {
+ name: "text",
+ patterns: ["CHAR", "TEXT", "characters"],
+ flags: [
+ CalExtractParseNode.FLAG_NONEMPTY | CalExtractParseNode.FLAG_MULTIPLE,
+ CalExtractParseNode.FLAG_OPTIONAL,
+ CalExtractParseNode.FLAG_OPTIONAL | CalExtractParseNode.FLAG_MULTIPLE,
+ ],
+ },
+ matched: [
+ ["CHAR", "is char"],
+ ["characters", "is characters"],
+ ],
+ expected: [["is char"], null, ["is characters"]],
+ },
+ ];
+
+ for (let test of tests) {
+ info(`Test prepareArguments(): ${test.name}`);
+ compareExtractResults(prepareArguments(test.rule, test.matched), test.expected);
+ }
+});