Support PYSON comparison of date and datetime
issue4879 review270061002
This commit is contained in:
@@ -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
@@ -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
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user