diff --git a/addons/base/static/qweb/qweb-test-conditionals.xml b/addons/base/static/qweb/qweb-test-conditionals.xml new file mode 100644 index 00000000000..1e8822bc096 --- /dev/null +++ b/addons/base/static/qweb/qweb-test-conditionals.xml @@ -0,0 +1,33 @@ + + + ok + + + ok + + + fail + + + + ok + + + ok + + + ok + + + ok + + + ok + + + ok + + + ok + + diff --git a/addons/base/static/qweb/qweb-test.js.html b/addons/base/static/qweb/qweb-test.js.html index 665b3c80904..8c91b8fdfe9 100644 --- a/addons/base/static/qweb/qweb-test.js.html +++ b/addons/base/static/qweb/qweb-test.js.html @@ -77,6 +77,41 @@ equals(render('set-from-body-lookup', {value: 'ok'}), 'ok', "Set a value looked up in context via @t-set body and @t-esc"); }); + + module("Conditionals", { + setup: function () { + QWeb.add_template('qweb-test-conditionals.xml'); + }, + teardown: function () { + QWeb.templates = []; + QWeb.tag = {}; + QWeb.att = {}; + } + }); + test('Basic (single boolean) conditionals', function () { + equals(render('literal-conditional', {}), 'ok', + "Test on a literal value"); + equals(render('boolean-value-conditional', {value: true}), 'ok', + "Test on a truthy variable value"); + equals(render('boolean-value-conditional-false', {value: false}), '', + "Test on a falsy variable value"); + }); + test('Boolean expressions in conditionals', function () { + equals(render('negify', {}), 'ok', + "Negative"); + equals(render('equality', {}), 'ok', + "Equality"); + equals(render('difference', {}), 'ok', + "Difference"); + equals(render('and', {}), 'ok', + "Boolean and"); + equals(render('and-js', {}), 'ok', + "Boolean and via manually escaped JS operator"); + equals(render('or', {}), 'ok', + "Boolean or"); + equals(render('or-js', {}), 'ok', + "Boolean or using JS operator"); + }); }); diff --git a/addons/base/static/qweb/qweb.js b/addons/base/static/qweb/qweb.js index a114371b1c7..ebe6f6fbb52 100644 --- a/addons/base/static/qweb/qweb.js +++ b/addons/base/static/qweb/qweb.js @@ -48,7 +48,7 @@ var QWeb = { // 'hi boys and girls' != '' and 1 == 1 -- will be replaced to : 'hi boys && girls' != '' && 1 == 1 // try to find a solution without tokenizing e = e.replace(/\Wand\W/g, " && "); - e = e.replace(/\Wor\W/g, " and "); + e = e.replace(/\Wor\W/g, " || "); e = e.replace(/\Wgt\W/g, " > "); e = e.replace(/\Wgte\W/g, " >= "); e = e.replace(/\Wlt\W/g, " < ");