diff --git a/sao/src/common.js b/sao/src/common.js index fa035f65c8..5b9ed7167d 100644 --- a/sao/src/common.js +++ b/sao/src/common.js @@ -2981,9 +2981,13 @@ return ((a.isDate == b.isDate) && (a.isDateTime == b.isDateTime) && (a.valueOf() == b.valueOf())); - } else if ((a instanceof Number) || (b instanceof Number)) { - return (Number(a) === Number(b)); } else { + if (a instanceof Number) { + a = a.valueOf(); + } + if (b instanceof Number) { + b = b.valueOf(); + } return (a === b); } }; diff --git a/sao/tests/sao.js b/sao/tests/sao.js index 84e32c0217..18d07b4e22 100644 --- a/sao/tests/sao.js +++ b/sao/tests/sao.js @@ -2969,6 +2969,44 @@ var now = new Date(); [ + [[['x', '=', 42]], {'x': 42}, true], + [[['x', '=', 42]], {'x': new Number(42)}, true], + [[['x', '=', 42]], {'x': 0}, false], + [[['x', '=', 42]], {'x': new Number(0)}, false], + [[['x', '=', 42]], {'x': null}, false], + [[['x', '=', new Number(42)]], {'x': 42}, true], + [[['x', '=', new Number(42)]], {'x': new Number(42)}, true], + [[['x', '=', new Number(42)]], {'x': 0}, false], + [[['x', '=', new Number(42)]], {'x': new Number(0)}, false], + [[['x', '=', new Number(42)]], {'x': null}, false], + [[['x', '=', 0]], {'x': 0}, true], + [[['x', '=', 0]], {'x': new Number(0)}, true], + [[['x', '=', 0]], {'x': null}, false], + [[['x', '=', new Number(0)]], {'x': 0}, true], + [[['x', '=', new Number(0)]], {'x': new Number(0)}, true], + [[['x', '=', new Number(0)]], {'x': null}, false], + [[['x', '=', null]], {'x': 0}, false], + [[['x', '=', null]], {'x': new Number(0)}, false], + [[['x', '=', null]], {'x': null}, true], + [[['x', '!=', 42]], {'x': 42}, false], + [[['x', '!=', 42]], {'x': new Number(42)}, false], + [[['x', '!=', 42]], {'x': 0}, true], + [[['x', '!=', 42]], {'x': new Number(0)}, true], + [[['x', '!=', 42]], {'x': null}, true], + [[['x', '!=', new Number(42)]], {'x': 42}, false], + [[['x', '!=', new Number(42)]], {'x': new Number(42)}, false], + [[['x', '!=', new Number(42)]], {'x': 0}, true], + [[['x', '!=', new Number(42)]], {'x': new Number(0)}, true], + [[['x', '!=', new Number(42)]], {'x': null}, true], + [[['x', '!=', 0]], {'x': 0}, false], + [[['x', '!=', 0]], {'x': new Number(0)}, false], + [[['x', '!=', 0]], {'x': null}, true], + [[['x', '!=', new Number(0)]], {'x': 0}, false], + [[['x', '!=', new Number(0)]], {'x': new Number(0)}, false], + [[['x', '!=', new Number(0)]], {'x': null}, true], + [[['x', '!=', null]], {'x': 0}, true], + [[['x', '!=', null]], {'x': new Number(0)}, true], + [[['x', '!=', null]], {'x': null}, false], [[['x', '>', 5]], {'x': 6}, true], [[['x', '>', 5]], {'x': 4}, false], [[['x', '>', null]], {'x': today}, false], diff --git a/trytond/trytond/tests/test_tools.py b/trytond/trytond/tests/test_tools.py index cb01d82410..3af49cf8b5 100644 --- a/trytond/trytond/tests/test_tools.py +++ b/trytond/trytond/tests/test_tools.py @@ -884,6 +884,63 @@ class DomainInversionTestCase(TestCase): unique_value(domain, single_value=False), (False, None, None)) def test_evaldomain(self): + + domain = [['x', '=', 42]] + self.assertTrue(eval_domain(domain, {'x': 42})) + self.assertTrue(eval_domain(domain, {'x': Decimal('42')})) + self.assertFalse(eval_domain(domain, {'x': 0})) + self.assertFalse(eval_domain(domain, {'x': Decimal('0')})) + self.assertFalse(eval_domain(domain, {'x': None})) + + domain = [['x', '=', Decimal('42')]] + self.assertTrue(eval_domain(domain, {'x': 42})) + self.assertTrue(eval_domain(domain, {'x': Decimal('42')})) + self.assertFalse(eval_domain(domain, {'x': 0})) + self.assertFalse(eval_domain(domain, {'x': Decimal('0')})) + self.assertFalse(eval_domain(domain, {'x': None})) + + domain = [['x', '=', 0]] + self.assertTrue(eval_domain(domain, {'x': 0})) + self.assertTrue(eval_domain(domain, {'x': Decimal('0')})) + self.assertFalse(eval_domain(domain, {'x': None})) + + domain = [['x', '=', Decimal('0')]] + self.assertTrue(eval_domain(domain, {'x': 0})) + self.assertTrue(eval_domain(domain, {'x': Decimal('0')})) + self.assertFalse(eval_domain(domain, {'x': None})) + + domain = [['x', '=', None]] + self.assertFalse(eval_domain(domain, {'x': 0})) + self.assertFalse(eval_domain(domain, {'x': Decimal('0')})) + self.assertTrue(eval_domain(domain, {'x': None})) + + domain = [['x', '!=', 42]] + self.assertFalse(eval_domain(domain, {'x': 42})) + self.assertFalse(eval_domain(domain, {'x': Decimal('42')})) + self.assertTrue(eval_domain(domain, {'x': Decimal('0')})) + self.assertTrue(eval_domain(domain, {'x': None})) + + domain = [['x', '!=', Decimal('42')]] + self.assertFalse(eval_domain(domain, {'x': 42})) + self.assertFalse(eval_domain(domain, {'x': Decimal('42')})) + self.assertTrue(eval_domain(domain, {'x': Decimal('0')})) + self.assertTrue(eval_domain(domain, {'x': None})) + + domain = [['x', '!=', 0]] + self.assertFalse(eval_domain(domain, {'x': 0})) + self.assertFalse(eval_domain(domain, {'x': Decimal('0')})) + self.assertTrue(eval_domain(domain, {'x': None})) + + domain = [['x', '!=', Decimal('0')]] + self.assertFalse(eval_domain(domain, {'x': 0})) + self.assertFalse(eval_domain(domain, {'x': Decimal('0')})) + self.assertTrue(eval_domain(domain, {'x': None})) + + domain = [['x', '!=', None]] + self.assertTrue(eval_domain(domain, {'x': 0})) + self.assertTrue(eval_domain(domain, {'x': Decimal('0')})) + self.assertFalse(eval_domain(domain, {'x': None})) + domain = [['x', '>', 5]] self.assertTrue(eval_domain(domain, {'x': 6})) self.assertFalse(eval_domain(domain, {'x': 4}))