changeset d2a5f3cf8da6 in sao:6.0 details: https://hg.tryton.org/sao?cmd=changeset&node=d2a5f3cf8da6 description: Test for sub-domain instead of not leaf in domain parser
issue11472 review411171004 (grafted from 8e38c5eebb969c9b999876225df3f21df17572b3) diffstat: src/common.js | 26 ++++++++++++-------------- tests/sao.js | 1 + 2 files changed, 13 insertions(+), 14 deletions(-) diffs (79 lines): diff -r 931b112528c2 -r d2a5f3cf8da6 src/common.js --- a/src/common.js Mon Apr 25 18:08:58 2022 +0200 +++ b/src/common.js Thu May 19 21:54:36 2022 +0200 @@ -1392,8 +1392,8 @@ } return results; }, - is_leaf: function(element) { - return ((element instanceof Array) && element.clause); + is_subdomain: function(element) { + return (element instanceof Array) && !element.clause; }, ending_clause: function(domain, depth) { if (depth === undefined) { @@ -1403,7 +1403,7 @@ return [null, depth]; } var last_element = domain[domain.length - 1]; - if (!this.is_leaf(last_element)) { + if (this.is_subdomain(last_element)) { return this.ending_clause(last_element, depth + 1); } return [last_element, depth]; @@ -1414,7 +1414,7 @@ for (i = 0, len=domain.length - 1; i < len; i++) { results.push(domain[i]); } - if (!this.is_leaf(domain[i])) { + if (this.is_subdomain(domain[i])) { results = results.concat(this.replace_ending_clause(domain[i], clause)); } else { @@ -1428,7 +1428,7 @@ } var results = domain.slice(0, -1); var last_element = domain[domain.length - 1]; - if (!this.is_leaf(last_element)) { + if (this.is_subdomain(last_element)) { results.push(this.append_ending_clause(last_element, clause, depth - 1)); } else { @@ -2169,19 +2169,17 @@ } }, simplify: function(value) { - if ((value instanceof Array) && !this.is_leaf(value)) { - if ((value.length == 1) && (value[0] instanceof Array) && - ((value[0][0] == 'AND') || (value[0][0] == 'OR') || - (value[0][0] instanceof Array))) { + if (this.is_subdomain(value)) { + if ((value.length == 1) && this.is_subdomain(value[0])) { return this.simplify(value[0]); } else if ((value.length == 2) && - ((value[0] == 'AND') || (value[0] == 'OR')) && - (value[1] instanceof Array)) { + ((value[0] == 'AND') || (value[0] == 'OR')) && + this.is_subdomain(value[1])) { return this.simplify(value[1]); } else if ((value.length == 3) && - ((value[0] == 'AND') || (value[0] == 'OR')) && - (value[1] instanceof Array) && - (value[0] == value[1][0])) { + ((value[0] == 'AND') || (value[0] == 'OR')) && + this.is_subdomain(value[1]) && + (value[0] == value[1][0])) { value = this.simplify(value[1]).concat([value[2]]); } return value.map(this.simplify.bind(this)); diff -r 931b112528c2 -r d2a5f3cf8da6 tests/sao.js --- a/tests/sao.js Mon Apr 25 18:08:58 2022 +0200 +++ b/tests/sao.js Thu May 19 21:54:36 2022 +0200 @@ -2992,6 +2992,7 @@ ['Name: !=foo', []], ['', ["Name: "]], [' ', ["", "Name: "]], + ["Name: foo or", ["Name: foo"]], ].forEach(function(test) { var value = test[0]; var expected = test[1];