First commit
This commit is contained in:
185
source/admincp/admincp_runtests.php
Normal file
185
source/admincp/admincp_runtests.php
Normal file
@@ -0,0 +1,185 @@
|
||||
<?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>
|
Reference in New Issue
Block a user