185 lines
5.2 KiB
PHP
185 lines
5.2 KiB
PHP
<?php
|
|
|
|
/**
|
|
* [Discuz!] (C)2001-2099 Comsenz Inc.
|
|
* This is NOT a freeware, use is subject to license terms
|
|
*/
|
|
|
|
if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
|
|
exit('Access Denied');
|
|
}
|
|
|
|
if(!defined('DISCUZ_DEBUG') || !DISCUZ_DEBUG) {
|
|
cpheader();
|
|
cpmsg('action_noaccess', '', 'error');
|
|
}
|
|
|
|
if(!isfounder()) cpmsg('noaccess_isfounder', '', 'error');
|
|
|
|
$test_main_file = __DIR__ . "/../../tests/runtests.php";
|
|
|
|
if (!file_exists($test_main_file)) {
|
|
exit('No tests found');
|
|
}
|
|
|
|
$dbfile = __DIR__ . "/progress.db";
|
|
|
|
if ($operation === "prepare") {
|
|
unlink($dbfile);
|
|
ob_start();
|
|
echo "ok";
|
|
ob_end_flush();
|
|
exit();
|
|
}
|
|
|
|
if ($operation === "start") {
|
|
$sl3 = new SQLite3(__DIR__ . "/progress.db");
|
|
$sl3->exec('create table tests (id INTEGER PRIMARY KEY, message TEXT NOT NULL)');
|
|
|
|
define("IN_UNITTESTING", 1);
|
|
require_once($test_main_file);
|
|
global $LOGGING_OUTPUT_FUNC;
|
|
$LOGGING_OUTPUT_FUNC = function($str) use (&$sl3) {
|
|
$stmt = $sl3->prepare("insert into tests (message) values (:message)");
|
|
$stmt->bindParam(":message", trim($str), SQLITE3_TEXT);
|
|
$stmt->execute();
|
|
$stmt->close();
|
|
};
|
|
runtests_main();
|
|
$sl3->close();
|
|
exit();
|
|
}
|
|
|
|
if ($operation === "fetch") {
|
|
$sl3 = new SQLite3(__DIR__ . "/progress.db", SQLITE3_OPEN_READONLY);
|
|
$stmt = $sl3->prepare("select id, message from tests where id > :from ORDER BY id");
|
|
$stmt->bindParam(":from", dintval($_GET['from']), SQLITE3_INTEGER);
|
|
$rs = $stmt->execute();
|
|
$rsa = array();
|
|
while($row = $rs->fetchArray(SQLITE3_ASSOC)) {
|
|
$rsa[] = $row;
|
|
}
|
|
$stmt->close();
|
|
$sl3->close();
|
|
header('Content-Type: application/json');
|
|
ob_start();
|
|
echo json_encode($rsa);
|
|
ob_end_flush();
|
|
exit();
|
|
}
|
|
|
|
|
|
cpheader();
|
|
|
|
shownav('global', 'setting_runtests');
|
|
showsubmenu('setting_runtests');
|
|
|
|
?>
|
|
<?=cplang('setting_runtests_prompt')?>
|
|
<input type="submit" class="btn" name="confirmed" value="<?=cplang('ok')?>">
|
|
<div>
|
|
<pre id="content"></pre>
|
|
</div>
|
|
|
|
<style>
|
|
|
|
#content {
|
|
margin: 20px;
|
|
padding: 5px;
|
|
text-align: left;
|
|
line-height: 1.3em;
|
|
font-family: "Fira Code",Menlo,Consolas,monospace;
|
|
}
|
|
|
|
.failed {
|
|
color: red;
|
|
}
|
|
</style>
|
|
|
|
<script type="text/JavaScript">
|
|
|
|
var ajax = {};
|
|
ajax.x = function () {
|
|
if (typeof XMLHttpRequest !== 'undefined') {
|
|
return new XMLHttpRequest();
|
|
}
|
|
var versions = [
|
|
"MSXML2.XmlHttp.6.0",
|
|
"MSXML2.XmlHttp.5.0",
|
|
"MSXML2.XmlHttp.4.0",
|
|
"MSXML2.XmlHttp.3.0",
|
|
"MSXML2.XmlHttp.2.0",
|
|
"Microsoft.XmlHttp"
|
|
];
|
|
|
|
var xhr;
|
|
for (var i = 0; i < versions.length; i++) {
|
|
try {
|
|
xhr = new ActiveXObject(versions[i]);
|
|
break;
|
|
} catch (e) {
|
|
}
|
|
}
|
|
return xhr;
|
|
};
|
|
|
|
ajax.send = function (url, callback, method, data, async) {
|
|
if (async === undefined) {
|
|
async = true;
|
|
}
|
|
var x = ajax.x();
|
|
x.open(method, url, async);
|
|
x.onreadystatechange = function () {
|
|
if (x.readyState == 4) {
|
|
callback(x.responseText)
|
|
}
|
|
};
|
|
if (method == 'POST') {
|
|
x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
|
|
}
|
|
x.send(data)
|
|
};
|
|
|
|
ajax.get = function (url, data, callback, async) {
|
|
var query = [];
|
|
for (var key in data) {
|
|
query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));
|
|
}
|
|
ajax.send(url + (query.length ? '?' + query.join('&') : ''), callback, 'GET', null, async)
|
|
};
|
|
|
|
var MAX_ID = 0;
|
|
|
|
function read_status() {
|
|
ajax.get('<?php echo ADMINSCRIPT; ?>?action=runtests&operation=fetch&from=' + MAX_ID, '', function(s) {
|
|
try {
|
|
var items = JSON.parse(s);
|
|
for (i = 0; i < items.length; ++i) {
|
|
if (items[i].message.indexOf('FAILED') !== -1) items[i].message = '<span class="failed">' + items[i].message + '</span>';
|
|
top.frames['main'].document.getElementById('content').innerHTML += items[i].message + '<br />';
|
|
top.frames['main'].scrollTo(0,top.frames['main'].document.body.scrollHeight);
|
|
MAX_ID = items[i].id;
|
|
if (items[i].message.indexOf('totally') !== -1) return;
|
|
}
|
|
} catch (e) {
|
|
}
|
|
read_status();
|
|
})
|
|
}
|
|
|
|
function prepare() {
|
|
ajax.get('<?php echo ADMINSCRIPT; ?>?action=runtests&operation=prepare', "", function(s) {
|
|
top.frames['main'].document.getElementById('content').innerHTML += "previous log deleted <br/> <br/>";
|
|
MAX_ID = 0;
|
|
ajax.get('<?php echo ADMINSCRIPT; ?>?action=runtests&operation=start');
|
|
read_status();
|
|
});
|
|
}
|
|
|
|
var btn = top.frames['main'].document.getElementsByName('confirmed');
|
|
btn[0].onclick = function() {
|
|
top.frames['main'].document.getElementById('content').innerHTML = "test started <br/>";
|
|
prepare();
|
|
return false;
|
|
}
|
|
</script>
|