Support PYSON comparison of date and datetime

issue4879
review270061002
This commit is contained in:
Cédric Krier
2020-09-05 22:59:38 +02:00
parent 66235b257f
commit 523fdbca0d
3 changed files with 150 additions and 12 deletions
+1
View File
@@ -1,3 +1,4 @@
* Support PYSON comparison of date and datetime
* Customize bootstrap default style
* Set field's name as input's name attribute
* Position copied records based on order
+24 -5
View File
@@ -389,12 +389,16 @@
for (var i = 0; i < 2; i++) {
var statement = statements[i];
if (statement instanceof Sao.PYSON.PYSON) {
if (jQuery(statement.types()).not(['number']).length) {
throw 'statement must be an integer or a float';
if ( (!(statement instanceof Sao.PYSON.DateTime ||
statement instanceof Sao.PYSON.Date)) &&
(jQuery(statement.types()).not(['number']).length) ) {
throw 'statement must be an integer, float, ' +
'date or datetime';
}
} else {
if (!~['number', 'object'].indexOf(typeof statement)) {
throw 'statement must be an integer or a float';
throw 'statement must be an integer, float, ' +
'date or datetime';
}
}
}
@@ -431,12 +435,24 @@
Sao.PYSON.Greater._convert = function(value) {
value = jQuery.extend({}, value);
value.s1 = Number(value.s1);
value.s2 = Number(value.s2);
var values = [value.s1, value.s2];
for (var i=0; i < 2; i++) {
if (values[i] instanceof moment) {
values[i] = values[i].unix();
}
else {
values[i] = Number(values[i]);
}
}
value.s1 = values[0];
value.s2 = values[1];
return value;
};
Sao.PYSON.Greater.eval_ = function(value, context) {
if (value.s1 == null || value.s2 == null) {
return false;
}
value = Sao.PYSON.Greater._convert(value);
if (value.e) {
return value.s1 >= value.s2;
@@ -462,6 +478,9 @@
Sao.PYSON.Less._convert = Sao.PYSON.Greater._convert;
Sao.PYSON.Less.eval_ = function(value, context) {
if (value.s1 == null || value.s2 == null) {
return false;
}
value = Sao.PYSON.Less._convert(value);
if (value.e) {
return value.s1 <= value.s2;
+125 -7
View File
@@ -407,13 +407,19 @@
QUnit.throws(function() {
new Sao.PYSON.Greater('test', 0);
}, 'statement must be an integer or a float');
}, 'statement must be an integer, float, date or datetime');
QUnit.throws(function() {
new Sao.PYSON.Greater(1, 'test');
}, 'statement must be an integer or a float');
}, 'statement must be an integer, float, date or datetime');
QUnit.throws(function() {
new Sao.PYSON.Greater(new Sao.PYSON.Eval('foo'), 0);
}, 'statement must be an integer of float');
}, 'statement must be an integer, float, date or datetime');
QUnit.throws(function() {
new Sao.PYSON.Greater(Sao.PYSON.DateTime(), 'test');
}, 'statement must be an integer, float, date or datetime');
QUnit.throws(function() {
new Sao.PYSON.Greater('test', Date());
}, 'statement must be an integer, float, date or datetime');
QUnit.ok(Sao.common.compare(new Sao.PYSON.Greater(1, 0).types(),
['boolean']), 'Greater(1, 0).types()');
@@ -451,11 +457,64 @@
'decode(Greater(null, 1))');
eval_ = new Sao.PYSON.Encoder().encode(new Sao.PYSON.Greater(1, null));
QUnit.strictEqual(new Sao.PYSON.Decoder().decode(eval_), true,
QUnit.strictEqual(new Sao.PYSON.Decoder().decode(eval_), false,
'decode(Greater(1, null))');
QUnit.strictEqual(new Sao.PYSON.Greater(1, 0).toString(),
"Greater(1, 0, false)");
eval_ = new Sao.PYSON.Encoder().encode(new Sao.PYSON.Greater(
new Sao.PYSON.DateTime(2020, 1, 1, 0, 0, 0, 0),
Sao.Date(2020, 0, 2)));
QUnit.strictEqual(new Sao.PYSON.Decoder().decode(eval_), false,
'decode(Greater(PYSON.DateTime(2020, 1, 1, 0, 0, 0, 0), ' +
'Date(2020, 0, 2)))');
eval_ = new Sao.PYSON.Encoder().encode(new Sao.PYSON.Greater(
new Sao.PYSON.DateTime(2020, 1, 1, 0, 0, 0, 0),
Sao.Date(2020, 0, 1)));
QUnit.strictEqual(new Sao.PYSON.Decoder().decode(eval_), true,
'decode(Greater(PYSON.DateTime(2020, 1, 1, 0, 0, 0, 0), ' +
'Date(2020, 0, 1)))');
eval_ = new Sao.PYSON.Encoder().encode(new Sao.PYSON.Greater(
new Sao.PYSON.DateTime(2020, 1, 1, 0, 0, 0, 0),
Sao.Date(2020, 0, 1), true));
QUnit.strictEqual(new Sao.PYSON.Decoder().decode(eval_), true,
'decode(Greater(PYSON.DateTime(2020, 1, 1, 0, 0, 0, 0), ' +
'Date(2020, 0, 1), true))');
eval_ = new Sao.PYSON.Encoder().encode(new Sao.PYSON.Greater(
new Sao.PYSON.DateTime(2020, 1, 1, 0, 0, 0, 0),
new Sao.PYSON.DateTime(2020, 1, 1, 0, 0, 0, 0)));
QUnit.strictEqual(new Sao.PYSON.Decoder().decode(eval_), false,
'decode(Greater(PYSON.DateTime(2020, 1, 1, 0, 0, 0, 0), ' +
'PYSON.DateTime(2020, 1, 1, 0, 0, 0, 0, 0)))');
eval_ = new Sao.PYSON.Encoder().encode(new Sao.PYSON.Greater(
new Sao.PYSON.Date(2020, 1, 1),
Sao.Date(2020, 0, 1)));
QUnit.strictEqual(new Sao.PYSON.Decoder().decode(eval_), false,
'decode(Greater(PYSON.Date(2020, 1, 1), Date(2020, 0, 1)))');
eval_ = new Sao.PYSON.Encoder().encode(new Sao.PYSON.Greater(
new Sao.PYSON.Date(2020, 1, 1),
new Sao.PYSON.DateTime(2020, 1, 1, 0, 0, 0, 1)));
QUnit.strictEqual(new Sao.PYSON.Decoder().decode(eval_), false,
'decode(Greater(PYSON.Date(2020, 1, 1), ' +
'PYSON.DateTime(2020, 1, 1, 0, 0, 0, 1)))');
eval_ = new Sao.PYSON.Encoder().encode(new Sao.PYSON.Greater(
new Sao.PYSON.DateTime(2020, 1, 1, 0, 0, 0, 1),
new Sao.PYSON.Date(2020, 1, 1), true));
QUnit.strictEqual(new Sao.PYSON.Decoder().decode(eval_), true,
'decode(Greater(PYSON.DateTime(2020, 1, 1, 0, 0, 0, 1), ' +
'PYSON.Date(2020, 1, 1), true))');
eval_ = new Sao.PYSON.Encoder().encode(new Sao.PYSON.Greater(
new Sao.PYSON.DateTime(2020, 1, 1, 0, 0, 0, 0), 90000));
QUnit.strictEqual(new Sao.PYSON.Decoder().decode(eval_), true,
'decode(Greater(PYSON.DateTime(2020, 1, 1, 0, 0, 0, 0), 90000))');
eval_ = new Sao.PYSON.Encoder().encode(
new Sao.PYSON.Greater(new Sao.PYSON.Eval('i', 0), 0));
QUnit.strictEqual(new Sao.PYSON.Decoder({i: 1}).decode(eval_), true,
@@ -471,10 +530,22 @@
QUnit.throws(function() {
new Sao.PYSON.Less('test', 0);
}, 'statement must be an integer or a float');
}, 'statement must be an integer, float, date or datetime');
QUnit.throws(function() {
new Sao.PYSON.Less(1, 'test');
}, 'statement must be an integer or a float');
}, 'statement must be an integer, float, date or datetime');
QUnit.throws(function() {
new Sao.PYSON.Less(1, 'test');
}, 'statement must be an integer, float, date or datetime');
QUnit.throws(function() {
new Sao.PYSON.Less(new Sao.PYSON.Eval('foo'), 0);
}, 'statement must be an integer, float, date or datetime');
QUnit.throws(function() {
new Sao.PYSON.Less(Sao.PYSON.DateTime(), 'test');
}, 'statement must be an integer, float, date or datetime');
QUnit.throws(function() {
new Sao.PYSON.Less('test', Date());
}, 'statement must be an integer, float, date or datetime');
QUnit.ok(Sao.common.compare(new Sao.PYSON.Less(1, 0).types(),
['boolean']), 'Less(1, 0).types()');
@@ -508,7 +579,7 @@
'decode(Less(1, 1, true))');
eval_ = new Sao.PYSON.Encoder().encode(new Sao.PYSON.Less(null, 1));
QUnit.strictEqual(new Sao.PYSON.Decoder().decode(eval_), true,
QUnit.strictEqual(new Sao.PYSON.Decoder().decode(eval_), false,
'decode(Less(null, 1))');
eval_ = new Sao.PYSON.Encoder().encode(new Sao.PYSON.Less(1, null));
@@ -516,6 +587,53 @@
'decode(Less(1, null))');
QUnit.strictEqual(new Sao.PYSON.Less(0, 1).toString(),
"Less(0, 1, false)");
eval_ = new Sao.PYSON.Encoder().encode(new Sao.PYSON.Less(
new Sao.PYSON.DateTime(2020, 1, 1, 0, 0, 0, 0),
Sao.Date(2020, 0, 1)));
QUnit.strictEqual(new Sao.PYSON.Decoder().decode(eval_), false,
'decode(Less(PYSON.DateTime(2020, 1, 1, 0, 0, 0, 0), ' +
'Date(2020, 0, 1)))');
eval_ = new Sao.PYSON.Encoder().encode(new Sao.PYSON.Less(
new Sao.PYSON.DateTime(2020, 1, 1, 0, 0, 0, 0),
Sao.Date(2020, 0, 2), true));
QUnit.strictEqual(new Sao.PYSON.Decoder().decode(eval_), true,
'decode(Less(PYSON.DateTime(2020, 1, 1, 0, 0, 0, 0), ' +
'Date(2020, 0, 2), true))');
eval_ = new Sao.PYSON.Encoder().encode(new Sao.PYSON.Less(
new Sao.PYSON.DateTime(2020, 1, 1, 0, 0, 0, 0),
new Sao.PYSON.DateTime(2020, 1, 1, 0, 0, 0, 0)));
QUnit.strictEqual(new Sao.PYSON.Decoder().decode(eval_), false,
'decode(Less(PYSON.DateTime(2020, 1, 1, 0, 0, 0, 0), ' +
'PYSON.DateTime(2020, 1, 1, 0, 0, 0, 0)))');
eval_ = new Sao.PYSON.Encoder().encode(new Sao.PYSON.Less(
new Sao.PYSON.Date(2020, 1, 1),
Sao.Date(2020, 0, 2)));
QUnit.strictEqual(new Sao.PYSON.Decoder().decode(eval_), true,
'decode(Less(PYSON.Date(2020, 1, 1), Date(2020, 0, 2)))');
eval_ = new Sao.PYSON.Encoder().encode(new Sao.PYSON.Less(
new Sao.PYSON.Date(2020, 1, 1),
new Sao.PYSON.DateTime(2020, 1, 1, 0, 0, 0, 1)));
QUnit.strictEqual(new Sao.PYSON.Decoder().decode(eval_), true,
'decode(Less(PYSON.Date(2020, 1, 1), ' +
'PYSON.DateTime(2020, 1, 1, 0, 0, 1)))');
eval_ = new Sao.PYSON.Encoder().encode(new Sao.PYSON.Less(
new Sao.PYSON.DateTime(2020, 1, 1, 0, 0, 0, 0),
new Sao.PYSON.Date(2020, 0, 1), true));
QUnit.strictEqual(new Sao.PYSON.Decoder().decode(eval_), true,
'decode(Less(PYSON.DateTime(2020, 1, 1, 0, 0, 0, 0), ' +
'PYSON.Date(2020, 1, 1), true))');
eval_ = new Sao.PYSON.Encoder().encode(new Sao.PYSON.Less(
new Sao.PYSON.DateTime(2020, 1, 1, 0, 0, 0, 0), 90000));
QUnit.strictEqual(new Sao.PYSON.Decoder().decode(eval_), false,
'decode(Less(PYSON.DateTime(2020, 1, 1, 0, 0, 0, 0), 90000))');
});
QUnit.test('PYSON If', function() {