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