summaryrefslogtreecommitdiff
path: root/addons/web
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web')
-rw-r--r--addons/web/static/src/js/core/domain.js21
-rw-r--r--addons/web/static/tests/core/domain_tests.js24
2 files changed, 40 insertions, 5 deletions
diff --git a/addons/web/static/src/js/core/domain.js b/addons/web/static/src/js/core/domain.js
index dbf2b18eb40..a1d6e7e7c49 100644
--- a/addons/web/static/src/js/core/domain.js
+++ b/addons/web/static/src/js/core/domain.js
@@ -106,20 +106,31 @@ var Domain = collections.Tree.extend({
return _.intersection(
_.isArray(this._data[2]) ? this._data[2] : [this._data[2]],
_.isArray(fieldValue) ? fieldValue : [fieldValue],
- ).length !== 0;;
+ ).length !== 0;
case "not in":
return _.intersection(
_.isArray(this._data[2]) ? this._data[2] : [this._data[2]],
_.isArray(fieldValue) ? fieldValue : [fieldValue],
).length === 0;
case "like":
- return (fieldValue.toLowerCase().indexOf(this._data[2].toLowerCase()) >= 0);
+ if (fieldValue === false) {
+ return false;
+ }
+ return (fieldValue.indexOf(this._data[2]) >= 0);
case "=like":
- var regExp = new RegExp(this._data[2].toLowerCase().replace(/([.\[\]\{\}\+\*])/g, '\\\$1').replace(/%/g, '.*'));
- return regExp.test(fieldValue.toLowerCase());
+ if (fieldValue === false) {
+ return false;
+ }
+ return new RegExp(this._data[2].replace(/%/g, '.*')).test(fieldValue);
case "ilike":
- return (fieldValue.indexOf(this._data[2]) >= 0);
+ if (fieldValue === false) {
+ return false;
+ }
+ return (fieldValue.toLowerCase().indexOf(this._data[2].toLowerCase()) >= 0);
case "=ilike":
+ if (fieldValue === false) {
+ return false;
+ }
return new RegExp(this._data[2].replace(/%/g, '.*'), 'i').test(fieldValue);
default:
throw new Error(_.str.sprintf(
diff --git a/addons/web/static/tests/core/domain_tests.js b/addons/web/static/tests/core/domain_tests.js
index ff30c53fc0f..fd94db6ec64 100644
--- a/addons/web/static/tests/core/domain_tests.js
+++ b/addons/web/static/tests/core/domain_tests.js
@@ -158,5 +158,29 @@ QUnit.module('core', {}, function () {
assert.strictEqual(arrayToString(), '[]');
});
+
+ QUnit.test("like, =like, ilike and =ilike", function (assert) {
+ assert.expect(16);
+
+ assert.ok(new Domain([['a', 'like', 'value']]).compute({ a: 'value' }));
+ assert.ok(new Domain([['a', 'like', 'value']]).compute({ a: 'some value' }));
+ assert.notOk(new Domain([['a', 'like', 'value']]).compute({ a: 'Some Value' }));
+ assert.notOk(new Domain([['a', 'like', 'value']]).compute({ a: false }));
+
+ assert.ok(new Domain([['a', '=like', '%value']]).compute({ a: 'value' }));
+ assert.ok(new Domain([['a', '=like', '%value']]).compute({ a: 'some value' }));
+ assert.notOk(new Domain([['a', '=like', '%value']]).compute({ a: 'Some Value' }));
+ assert.notOk(new Domain([['a', '=like', '%value']]).compute({ a: false }));
+
+ assert.ok(new Domain([['a', 'ilike', 'value']]).compute({ a: 'value' }));
+ assert.ok(new Domain([['a', 'ilike', 'value']]).compute({ a: 'some value' }));
+ assert.ok(new Domain([['a', 'ilike', 'value']]).compute({ a: 'Some Value' }));
+ assert.notOk(new Domain([['a', 'ilike', 'value']]).compute({ a: false }));
+
+ assert.ok(new Domain([['a', '=ilike', '%value']]).compute({ a: 'value' }));
+ assert.ok(new Domain([['a', '=ilike', '%value']]).compute({ a: 'some value' }));
+ assert.ok(new Domain([['a', '=ilike', '%value']]).compute({ a: 'Some Value' }));
+ assert.notOk(new Domain([['a', '=ilike', '%value']]).compute({ a: false }));
+ });
});
});