-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmbn_test.js.php
107 lines (93 loc) · 3.64 KB
/
mbn_test.js.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<?php ob_start(); ?>
function displayResult(displayTestStatusOpt) {
var displayTestStatus = displayTestStatusOpt || (function (lang, result) {
document.getElementsByTagName('pre')[0].innerHTML += ((result + " [" + lang + "]<br>"))
});
<?= FileHelper::getFile('mbn.js'); ?>
var Mbn0 = Mbn.extend(0);
var Mbn3c = Mbn.extend({MbnP: 3, MbnS: ','});
var Mbn20u = Mbn.extend({MbnP: 20, MbnS: ',', MbnT: true});
var Mbn2nef = Mbn.extend({MbnE: false, MbnF: true});
var Mbn4yec = Mbn.extend({MbnP: 4, MbnE: true, MbnS: ",", MbnL: 20});
var wrapBigInt = function (x) {
return ((typeof BigInt) === "undefined") ? BigInt(x) : String(x);
}
Mbn.MbnErr.translate(function (key, value) {
if (key === "mbn.invalid_argument") {
return "Niepoprawny argument %a% dla konstruktora %v%".replace("%a%", value.v);
}
});
var hasOwnProperty = {}.hasOwnProperty;
//partial JSON support for environment without JSON
function jsonEncode(o) {
switch (typeof o) {
case "number":
return String(o);
case "string":
return '"' + o.replace(/"/g, '\\"') + '"';
case "object":
var a = [], r = (o instanceof Array), i;
for (i in o) {
if (hasOwnProperty.call(o, i)) {
a.push((r ? "" : jsonEncode(i) + ":") + jsonEncode(o[i]));
}
}
return (r ? "[" : "{") + a.join(",") + (r ? "]" : "}");
default:
throw "invalid type " + (typeof o);
}
}
var runTestMbn = function (tests) {
var ret = [];
var tl = tests.length;
for (var i = 0; i < tests.length; i++) {
var test = tests[i];
var raw = test[0];
var req = test[1];
var exp = test[2];
var evv = "";
try {
evv = String(eval(exp));
} catch (ex) {
if (ex instanceof Mbn.MbnErr) {
evv = String(ex.errorKey) + " " + String(ex);
} else {
console.error(ex);
evv += String(ex);
}
}
var cmpn;
var reql = req.length;
if (reql !== 0 && req.charAt(reql - 1) === '*') {
cmpn = reql - 1;
} else {
cmpn = reql + evv.length;
}
if (req.slice(0, cmpn) !== evv.slice(0, cmpn)) {
ret.push({id: i, raw: raw, code: exp, correct: req, incorrect: evv});
}
}
return {status: (ret.length === 0) ? 'OK' : 'ERR', count: tl, errors: ret};
};
function testMbn() {
/** @type {{both:array, js:array, php:array}} */
var testsAll = (<?= MbnTest::getTestsAllJson(); ?>);
var tests = testsAll.both.concat(testsAll.js);
for (var i = 0; i < tests.length; i++) {
var test = tests[i];
test[2] = test[0].replace(/->|::/g, ".").replace(/^\$/, "var $")
.replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\t/g, "\\t");
}
var startTimeJS = new Date();
var ret = runTestMbn(tests);
ret.MbnV = Mbn.prop().MbnV;
ret.time = (new Date()) - startTimeJS;
ret.env = 'JS';
displayTestStatus("JS", jsonEncode(ret));
}
displayTestStatus("PHP", <?= MbnTest::testMbnResult(true); ?>);
setTimeout(testMbn, 100);
}
displayResult(((typeof displayTestStatus) !== "undefined") ? displayTestStatus : undefined);
<?php
MbnTest::output(ob_get_clean(), isset($query) ? $query : null);