First commit

This commit is contained in:
2025-06-18 10:24:27 +08:00
commit ebc39cd5dd
3873 changed files with 412712 additions and 0 deletions

View 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')?> &nbsp;
<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>