diff --git a/sao/src/pyson.js b/sao/src/pyson.js index 8670f079aa..34bfe633cd 100644 --- a/sao/src/pyson.js +++ b/sao/src/pyson.js @@ -220,7 +220,7 @@ }); Sao.PYSON.Not.eval_ = function(value, context) { - return !value.v; + return !Sao.PYSON.Bool.eval_(value, context); }; Sao.PYSON.Not.init_from_object = function(obj) { return new Sao.PYSON.Not(obj.v); diff --git a/sao/tests/sao.js b/sao/tests/sao.js index 9619b796bb..3f124027db 100644 --- a/sao/tests/sao.js +++ b/sao/tests/sao.js @@ -124,6 +124,24 @@ 'decode(Not(false))'); QUnit.strictEqual(new Sao.PYSON.Not(true).toString(), "Not(true)"); + + eval_ = new Sao.PYSON.Encoder().encode(new Sao.PYSON.Not({})); + QUnit.strictEqual(new Sao.PYSON.Decoder().decode(eval_), true, + "decode(Not({}))"); + + eval_ = new Sao.PYSON.Encoder().encode(new Sao.PYSON.Not({ + 'a': 1, + })); + QUnit.strictEqual(new Sao.PYSON.Decoder().decode(eval_), false, + "decode(Not({'a': 1}))"); + + eval_ = new Sao.PYSON.Encoder().encode(new Sao.PYSON.Not([])); + QUnit.strictEqual(new Sao.PYSON.Decoder().decode(eval_), true, + "decode(Not([]))"); + + eval_ = new Sao.PYSON.Encoder().encode(new Sao.PYSON.Not(['a'])); + QUnit.strictEqual(new Sao.PYSON.Decoder().decode(eval_), false, + "decode(Not(['a']))"); }); QUnit.test('PYSON Bool', function() { diff --git a/tryton/tryton/pyson.py b/tryton/tryton/pyson.py index 0f2ed608c6..bd58b9ea1b 100644 --- a/tryton/tryton/pyson.py +++ b/tryton/tryton/pyson.py @@ -188,7 +188,7 @@ class Not(PYSON): @staticmethod def eval(dct, context): - return not dct['v'] + return not Bool(dct['v']).eval(dct, context) class Bool(PYSON): diff --git a/trytond/trytond/pyson.py b/trytond/trytond/pyson.py index 85d520e693..fc7071a7c8 100644 --- a/trytond/trytond/pyson.py +++ b/trytond/trytond/pyson.py @@ -186,7 +186,7 @@ class Not(PYSON): @staticmethod def eval(dct, context): - return not dct['v'] + return not Bool(dct['v']).eval(dct, context) class Bool(PYSON): diff --git a/trytond/trytond/tests/test_pyson.py b/trytond/trytond/tests/test_pyson.py index 1fb4d4e670..3fdc5407b6 100644 --- a/trytond/trytond/tests/test_pyson.py +++ b/trytond/trytond/tests/test_pyson.py @@ -63,6 +63,20 @@ class PYSONTestCase(unittest.TestCase): self.assertEqual(repr(pyson.Not(True)), 'Not(True)') + eval_ = pyson.PYSONEncoder().encode(pyson.Not({})) + self.assertTrue(pyson.PYSONDecoder().decode(eval_)) + + eval_ = pyson.PYSONEncoder().encode(pyson.Not({ + 'a': 1, + })) + self.assertFalse(pyson.PYSONDecoder().decode(eval_)) + + eval_ = pyson.PYSONEncoder().encode(pyson.Not([])) + self.assertTrue(pyson.PYSONDecoder().decode(eval_)) + + eval_ = pyson.PYSONEncoder().encode(pyson.Not(['a'])) + self.assertFalse(pyson.PYSONDecoder().decode(eval_)) + def test_Bool(self): 'Test pyson.Bool' self.assertEqual(pyson.Bool('test').pyson(), {