2020-05-20 06:03:33 +08:00
|
|
|
const parser = require('../src/services/search/parser');
|
|
|
|
|
|
|
|
describe("Parser", () => {
|
|
|
|
it("fulltext parser without content", () => {
|
2020-05-21 05:20:39 +08:00
|
|
|
const rootExp = parser(["hello", "hi"], [], false);
|
2020-05-20 06:03:33 +08:00
|
|
|
|
2020-05-21 05:20:39 +08:00
|
|
|
expect(rootExp.constructor.name).toEqual("NoteCacheFulltextExp");
|
|
|
|
expect(rootExp.tokens).toEqual(["hello", "hi"]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("fulltext parser with content", () => {
|
|
|
|
const rootExp = parser(["hello", "hi"], [], true);
|
|
|
|
|
|
|
|
expect(rootExp.constructor.name).toEqual("OrExp");
|
|
|
|
const [firstSub, secondSub] = rootExp.subExpressions;
|
|
|
|
|
|
|
|
expect(firstSub.constructor.name).toEqual("NoteCacheFulltextExp");
|
|
|
|
expect(firstSub.tokens).toEqual(["hello", "hi"]);
|
|
|
|
|
|
|
|
expect(secondSub.constructor.name).toEqual("NoteContentFulltextExp");
|
|
|
|
expect(secondSub.tokens).toEqual(["hello", "hi"]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("simple label comparison", () => {
|
|
|
|
const rootExp = parser([], ["#mylabel", "=", "text"], true);
|
|
|
|
|
|
|
|
expect(rootExp.constructor.name).toEqual("FieldComparisonExp");
|
|
|
|
expect(rootExp.attributeType).toEqual("label");
|
|
|
|
expect(rootExp.attributeName).toEqual("mylabel");
|
|
|
|
expect(rootExp.comparator).toBeTruthy();
|
|
|
|
});
|
|
|
|
|
|
|
|
it("simple label AND", () => {
|
|
|
|
const rootExp = parser([], ["#first", "=", "text", "AND", "#second", "=", "text"], true);
|
|
|
|
|
|
|
|
expect(rootExp.constructor.name).toEqual("AndExp");
|
|
|
|
const [firstSub, secondSub] = rootExp.subExpressions;
|
|
|
|
|
|
|
|
expect(firstSub.constructor.name).toEqual("FieldComparisonExp");
|
|
|
|
expect(firstSub.attributeName).toEqual("first");
|
|
|
|
|
|
|
|
expect(secondSub.constructor.name).toEqual("FieldComparisonExp");
|
|
|
|
expect(secondSub.attributeName).toEqual("second");
|
|
|
|
});
|
|
|
|
|
|
|
|
it("simple label AND without explicit AND", () => {
|
|
|
|
const rootExp = parser([], ["#first", "=", "text", "#second", "=", "text"], true);
|
|
|
|
|
|
|
|
expect(rootExp.constructor.name).toEqual("AndExp");
|
|
|
|
const [firstSub, secondSub] = rootExp.subExpressions;
|
|
|
|
|
|
|
|
expect(firstSub.constructor.name).toEqual("FieldComparisonExp");
|
|
|
|
expect(firstSub.attributeName).toEqual("first");
|
|
|
|
|
|
|
|
expect(secondSub.constructor.name).toEqual("FieldComparisonExp");
|
|
|
|
expect(secondSub.attributeName).toEqual("second");
|
|
|
|
});
|
|
|
|
|
|
|
|
it("simple label OR", () => {
|
|
|
|
const rootExp = parser([], ["#first", "=", "text", "OR", "#second", "=", "text"], true);
|
|
|
|
|
|
|
|
expect(rootExp.constructor.name).toEqual("OrExp");
|
|
|
|
const [firstSub, secondSub] = rootExp.subExpressions;
|
|
|
|
|
|
|
|
expect(firstSub.constructor.name).toEqual("FieldComparisonExp");
|
|
|
|
expect(firstSub.attributeName).toEqual("first");
|
|
|
|
|
|
|
|
expect(secondSub.constructor.name).toEqual("FieldComparisonExp");
|
|
|
|
expect(secondSub.attributeName).toEqual("second");
|
|
|
|
});
|
|
|
|
|
|
|
|
it("fulltext and simple label", () => {
|
|
|
|
const rootExp = parser(["hello"], ["#mylabel", "=", "text"], false);
|
|
|
|
|
|
|
|
expect(rootExp.constructor.name).toEqual("AndExp");
|
|
|
|
const [firstSub, secondSub] = rootExp.subExpressions;
|
|
|
|
|
|
|
|
expect(firstSub.constructor.name).toEqual("NoteCacheFulltextExp");
|
|
|
|
expect(firstSub.tokens).toEqual(["hello"]);
|
|
|
|
|
|
|
|
expect(secondSub.constructor.name).toEqual("FieldComparisonExp");
|
|
|
|
expect(secondSub.attributeName).toEqual("mylabel");
|
|
|
|
});
|
|
|
|
|
|
|
|
it("label sub-expression", () => {
|
|
|
|
const rootExp = parser([], ["#first", "=", "text", "OR", ["#second", "=", "text", "AND", "#third", "=", "text"]], false);
|
|
|
|
|
|
|
|
expect(rootExp.constructor.name).toEqual("OrExp");
|
|
|
|
const [firstSub, secondSub] = rootExp.subExpressions;
|
|
|
|
|
|
|
|
expect(firstSub.constructor.name).toEqual("FieldComparisonExp");
|
|
|
|
expect(firstSub.attributeName).toEqual("first");
|
|
|
|
|
|
|
|
expect(secondSub.constructor.name).toEqual("AndExp");
|
|
|
|
const [firstSubSub, secondSubSub] = secondSub.subExpressions;
|
|
|
|
|
|
|
|
expect(firstSubSub.constructor.name).toEqual("FieldComparisonExp");
|
|
|
|
expect(firstSubSub.attributeName).toEqual("second");
|
|
|
|
|
|
|
|
expect(secondSubSub.constructor.name).toEqual("FieldComparisonExp");
|
|
|
|
expect(secondSubSub.attributeName).toEqual("third");
|
2020-05-20 06:03:33 +08:00
|
|
|
});
|
|
|
|
});
|