nu i xuinya
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
build/libs/ModerationCommands-1.0.jar
Normal file
BIN
build/libs/ModerationCommands-1.0.jar
Normal file
Binary file not shown.
BIN
build/libs/ModerationCommands-1.1.jar
Normal file
BIN
build/libs/ModerationCommands-1.1.jar
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
197
build/reports/tests/test/css/base-style.css
Normal file
197
build/reports/tests/test/css/base-style.css
Normal file
@@ -0,0 +1,197 @@
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: sans-serif;
|
||||
font-size: 12pt;
|
||||
}
|
||||
|
||||
body, a, a:visited {
|
||||
color: #303030;
|
||||
}
|
||||
|
||||
#content {
|
||||
padding: 30px 50px;
|
||||
}
|
||||
|
||||
#content h1 {
|
||||
font-size: 160%;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
#footer {
|
||||
margin-top: 100px;
|
||||
font-size: 80%;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
#footer, #footer a {
|
||||
color: #a0a0a0;
|
||||
}
|
||||
|
||||
#line-wrapping-toggle {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#label-for-line-wrapping-toggle {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
ul {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
h1, h2, h3 {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 120%;
|
||||
}
|
||||
|
||||
.tab-container .tab-container {
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
ul.tabLinks {
|
||||
padding: 0;
|
||||
margin-bottom: 0;
|
||||
overflow: auto;
|
||||
min-width: 800px;
|
||||
width: auto;
|
||||
border-bottom: solid 1px #aaa;
|
||||
}
|
||||
|
||||
ul.tabLinks li {
|
||||
float: left;
|
||||
height: 100%;
|
||||
list-style: none;
|
||||
padding: 5px 10px;
|
||||
border-radius: 7px 7px 0 0;
|
||||
border: solid 1px transparent;
|
||||
border-bottom: none;
|
||||
margin-right: 6px;
|
||||
background-color: #f0f0f0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
ul.tabLinks li.deselected > a {
|
||||
color: #6d6d6d;
|
||||
}
|
||||
|
||||
ul.tabLinks li:hover {
|
||||
background-color: #fafafa;
|
||||
}
|
||||
|
||||
ul.tabLinks li.selected {
|
||||
background-color: #c5f0f5;
|
||||
border-color: #aaa;
|
||||
}
|
||||
|
||||
ul.tabLinks a {
|
||||
font-size: 120%;
|
||||
display: block;
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ul.tabLinks li h2 {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
div.tab {
|
||||
}
|
||||
|
||||
div.selected {
|
||||
display: block;
|
||||
}
|
||||
|
||||
div.deselected {
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.tab table {
|
||||
min-width: 350px;
|
||||
width: auto;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
div.tab th, div.tab table {
|
||||
border-bottom: solid 1px #d0d0d0;
|
||||
}
|
||||
|
||||
div.tab th {
|
||||
text-align: left;
|
||||
white-space: nowrap;
|
||||
padding-left: 6em;
|
||||
}
|
||||
|
||||
div.tab th:first-child {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
div.tab td {
|
||||
white-space: nowrap;
|
||||
padding-left: 6em;
|
||||
padding-top: 5px;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
|
||||
div.tab td:first-child {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
div.tab td.numeric, div.tab th.numeric {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
span.code {
|
||||
display: block;
|
||||
margin-top: 0;
|
||||
margin-bottom: 1em;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
span.code pre {
|
||||
font-size: 11pt;
|
||||
padding: 10px;
|
||||
margin: 0;
|
||||
background-color: #f7f7f7;
|
||||
border: solid 1px #d0d0d0;
|
||||
min-width: 700px;
|
||||
width: auto;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
span.wrapped pre {
|
||||
word-wrap: break-word;
|
||||
white-space: pre-wrap;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
label.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
th.sortable-header {
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
th.sortable-header::after {
|
||||
content: " \2195";
|
||||
color: #b0b0b0;
|
||||
}
|
||||
|
||||
th.sortable-header[data-sort-dir="asc"]::after {
|
||||
content: " \25B2";
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
th.sortable-header[data-sort-dir="desc"]::after {
|
||||
content: " \25BC";
|
||||
color: inherit;
|
||||
}
|
||||
150
build/reports/tests/test/css/style.css
Normal file
150
build/reports/tests/test/css/style.css
Normal file
@@ -0,0 +1,150 @@
|
||||
.summary {
|
||||
margin-top: 30px;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.summary table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
.summary td {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
div.tab table.test-results td {
|
||||
padding-left: 1em;
|
||||
}
|
||||
|
||||
div.tab table.test-results th {
|
||||
padding-top: 0.5em;
|
||||
padding-left: 1em;
|
||||
}
|
||||
|
||||
.breadcrumbs, .breadcrumbs a {
|
||||
color: #606060;
|
||||
}
|
||||
|
||||
.infoBox {
|
||||
width: 110px;
|
||||
padding-top: 15px;
|
||||
padding-bottom: 15px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.infoBox p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.counter, .percent {
|
||||
font-size: 120%;
|
||||
font-weight: bold;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.duration {
|
||||
width: 125px;
|
||||
}
|
||||
|
||||
.successRate, .summaryGroup {
|
||||
border: solid 2px #d0d0d0;
|
||||
-moz-border-radius: 10px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.successRate {
|
||||
width: 140px;
|
||||
margin-left: 35px;
|
||||
}
|
||||
|
||||
.successRate .percent {
|
||||
font-size: 180%;
|
||||
}
|
||||
|
||||
.success, .success a {
|
||||
color: #008000;
|
||||
}
|
||||
|
||||
div.success, .successRate.success {
|
||||
background-color: #bbd9bb;
|
||||
border-color: #008000;
|
||||
}
|
||||
|
||||
.failures, .failures a {
|
||||
color: #b60808;
|
||||
}
|
||||
|
||||
.skipped, .skipped a {
|
||||
color: #c09853;
|
||||
}
|
||||
|
||||
div.failures, .successRate.failures {
|
||||
background-color: #ecdada;
|
||||
border-color: #b60808;
|
||||
}
|
||||
|
||||
ul.linkList {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
ul.linkList li {
|
||||
list-style: none;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
div.metadata td:first-child {
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
div.metadata td {
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
.metadata tr.odd {
|
||||
background-color: #f7f7f7;
|
||||
border: solid 1px #d0d0d0;
|
||||
}
|
||||
|
||||
.metadata tr.even {
|
||||
border: solid 1px #d0d0d0;
|
||||
}
|
||||
|
||||
.metadata th, .metadata td {
|
||||
padding: 5px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.metadata a {
|
||||
color: blue;
|
||||
}
|
||||
|
||||
.metadata .unrenderable {
|
||||
color: darkred;
|
||||
}
|
||||
|
||||
.clipboard-copy-btn {
|
||||
position: absolute;
|
||||
top: 8px;
|
||||
right: 8px;
|
||||
padding: 4px 8px;
|
||||
font-size: 0.9em;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.successGroup::before {
|
||||
content: "\23FA";
|
||||
margin-right: 8px;
|
||||
color: #008000;
|
||||
display: inline-block;
|
||||
}
|
||||
.failureGroup::before {
|
||||
content: "\2297";
|
||||
margin-right: 8px;
|
||||
color: #b60808;
|
||||
display: inline-block;
|
||||
}
|
||||
.skippedGroup::before {
|
||||
content: "\2296";
|
||||
margin-right: 8px;
|
||||
color: #c09853;
|
||||
display: inline-block;
|
||||
}
|
||||
184
build/reports/tests/test/index.html
Normal file
184
build/reports/tests/test/index.html
Normal file
@@ -0,0 +1,184 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - All Results</title>
|
||||
<link href="css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<h1>All Results</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :test</h2>
|
||||
<h1>Gradle Test Run :test</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">21</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">2.273s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<table class="test-results sortable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Child</th>
|
||||
<th>Name</th>
|
||||
<th data-sort-default="desc">Tests</th>
|
||||
<th data-sort-default="desc">Failures</th>
|
||||
<th data-sort-default="desc">Skipped</th>
|
||||
<th data-sort-default="desc">Duration</th>
|
||||
<th>Success rate</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="success">
|
||||
<a href="org.kilka.moderationcommands.common.ActorReasonParserTest/index.html">ActorReasonParserTest</a>
|
||||
</td>
|
||||
<td class="path">org.kilka.moderationcommands.common.ActorReasonParserTest</td>
|
||||
<td>4</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="134">0.134s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="success">
|
||||
<a href="org.kilka.moderationcommands.common.BlockedCommandMatcherTest/index.html">BlockedCommandMatcherTest</a>
|
||||
</td>
|
||||
<td class="path">org.kilka.moderationcommands.common.BlockedCommandMatcherTest</td>
|
||||
<td>2</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="13">0.013s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="success">
|
||||
<a href="org.kilka.moderationcommands.common.DurationParserTest/index.html">DurationParserTest</a>
|
||||
</td>
|
||||
<td class="path">org.kilka.moderationcommands.common.DurationParserTest</td>
|
||||
<td>3</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="12">0.012s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="success">
|
||||
<a href="org.kilka.moderationcommands.config.DefaultConfigTest/index.html">DefaultConfigTest</a>
|
||||
</td>
|
||||
<td class="path">org.kilka.moderationcommands.config.DefaultConfigTest</td>
|
||||
<td>3</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="302">0.302s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="success">
|
||||
<a href="org.kilka.moderationcommands.config.PluginDescriptorTest/index.html">PluginDescriptorTest</a>
|
||||
</td>
|
||||
<td class="path">org.kilka.moderationcommands.config.PluginDescriptorTest</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="17">0.017s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="success">
|
||||
<a href="org.kilka.moderationcommands.integration.flectone.FlectoneChatMuteIntegrationTest/index.html">FlectoneChatMuteIntegrationTest</a>
|
||||
</td>
|
||||
<td class="path">org.kilka.moderationcommands.integration.flectone.FlectoneChatMuteIntegrationTest</td>
|
||||
<td>3</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="43">0.043s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="success">
|
||||
<a href="org.kilka.moderationcommands.mute.YamlMuteRepositoryTest/index.html">YamlMuteRepositoryTest</a>
|
||||
</td>
|
||||
<td class="path">org.kilka.moderationcommands.mute.YamlMuteRepositoryTest</td>
|
||||
<td>5</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="92">0.092s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.6.1</a> at Aug 2, 2026, 9:23:22 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
285
build/reports/tests/test/js/report.js
Normal file
285
build/reports/tests/test/js/report.js
Normal file
@@ -0,0 +1,285 @@
|
||||
(function (window, document) {
|
||||
"use strict";
|
||||
|
||||
function changeElementClass(element, classValue) {
|
||||
if (element.getAttribute("className")) {
|
||||
element.setAttribute("className", classValue);
|
||||
} else {
|
||||
element.setAttribute("class", classValue);
|
||||
}
|
||||
}
|
||||
|
||||
function getClassAttribute(element) {
|
||||
if (element.getAttribute("className")) {
|
||||
return element.getAttribute("className");
|
||||
} else {
|
||||
return element.getAttribute("class");
|
||||
}
|
||||
}
|
||||
|
||||
function addClass(element, classValue) {
|
||||
changeElementClass(element, getClassAttribute(element) + " " + classValue);
|
||||
}
|
||||
|
||||
function removeClass(element, classValue) {
|
||||
changeElementClass(element, getClassAttribute(element).replace(classValue, ""));
|
||||
}
|
||||
|
||||
function getCheckBox() {
|
||||
return document.getElementById("line-wrapping-toggle");
|
||||
}
|
||||
|
||||
function getLabelForCheckBox() {
|
||||
return document.getElementById("label-for-line-wrapping-toggle");
|
||||
}
|
||||
|
||||
function findCodeBlocks() {
|
||||
const codeBlocks = [];
|
||||
const tabContainers = getTabContainers();
|
||||
for (let i = 0; i < tabContainers.length; i++) {
|
||||
const spans = tabContainers[i].getElementsByTagName("span");
|
||||
for (let i = 0; i < spans.length; ++i) {
|
||||
if (spans[i].className.indexOf("code") >= 0) {
|
||||
codeBlocks.push(spans[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return codeBlocks;
|
||||
}
|
||||
|
||||
function forAllCodeBlocks(operation) {
|
||||
const codeBlocks = findCodeBlocks();
|
||||
|
||||
for (let i = 0; i < codeBlocks.length; ++i) {
|
||||
operation(codeBlocks[i], "wrapped");
|
||||
}
|
||||
}
|
||||
|
||||
function toggleLineWrapping() {
|
||||
const checkBox = getCheckBox();
|
||||
|
||||
if (checkBox.checked) {
|
||||
forAllCodeBlocks(addClass);
|
||||
} else {
|
||||
forAllCodeBlocks(removeClass);
|
||||
}
|
||||
}
|
||||
|
||||
function initClipboardCopyButton() {
|
||||
document.querySelectorAll(".clipboard-copy-btn").forEach((button) => {
|
||||
const copyElementId = button.getAttribute("data-copy-element-id");
|
||||
const elementWithCodeToSelect = document.getElementById(copyElementId);
|
||||
|
||||
button.addEventListener("click", () => {
|
||||
const text = elementWithCodeToSelect.innerText.trim();
|
||||
navigator.clipboard
|
||||
.writeText(text)
|
||||
.then(() => {
|
||||
button.textContent = "Copied!";
|
||||
setTimeout(() => {
|
||||
button.textContent = "Copy";
|
||||
}, 1500);
|
||||
})
|
||||
.catch((err) => {
|
||||
alert("Failed to copy to the clipboard: '" + err.message + "'. Check JavaScript console for more details.")
|
||||
console.warn("Failed to copy to the clipboard", err);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function initControls() {
|
||||
if (findCodeBlocks().length > 0) {
|
||||
const checkBox = getCheckBox();
|
||||
const label = getLabelForCheckBox();
|
||||
|
||||
checkBox.onclick = toggleLineWrapping;
|
||||
checkBox.checked = false;
|
||||
|
||||
removeClass(label, "hidden");
|
||||
}
|
||||
|
||||
initClipboardCopyButton()
|
||||
}
|
||||
|
||||
class TabManager {
|
||||
baseId;
|
||||
tabs;
|
||||
titles;
|
||||
headers;
|
||||
|
||||
constructor(baseId, tabs, titles, headers) {
|
||||
this.baseId = baseId;
|
||||
this.tabs = tabs;
|
||||
this.titles = titles;
|
||||
this.headers = headers;
|
||||
this.init();
|
||||
}
|
||||
|
||||
init() {
|
||||
for (let i = 0; i < this.headers.length; i++) {
|
||||
const header = this.headers[i];
|
||||
header.onclick = () => {
|
||||
this.select(i);
|
||||
return false;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
select(i) {
|
||||
this.deselectAll();
|
||||
|
||||
changeElementClass(this.tabs[i], "tab selected");
|
||||
changeElementClass(this.headers[i], "selected");
|
||||
}
|
||||
|
||||
deselectAll() {
|
||||
for (let i = 0; i < this.tabs.length; i++) {
|
||||
changeElementClass(this.tabs[i], "tab deselected");
|
||||
changeElementClass(this.headers[i], "deselected");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getTabContainers() {
|
||||
const tabContainers = Array.from(document.getElementsByClassName("tab-container"));
|
||||
|
||||
// Used by existing TabbedPageRenderer users, which have not adjusted to use TabsRenderer yet.
|
||||
const legacyContainer = document.getElementById("tabs");
|
||||
if (legacyContainer) {
|
||||
tabContainers.push(legacyContainer);
|
||||
}
|
||||
|
||||
return tabContainers;
|
||||
}
|
||||
|
||||
function initTabs() {
|
||||
let tabGroups = 0;
|
||||
|
||||
function createTab(num, container) {
|
||||
const tabElems = findTabs(container);
|
||||
const tabManager = new TabManager("tabs" + num, tabElems, findTitles(tabElems), findHeaders(container));
|
||||
tabManager.select(0);
|
||||
}
|
||||
|
||||
const tabContainers = getTabContainers();
|
||||
|
||||
for (let i = 0; i < tabContainers.length; i++) {
|
||||
createTab(tabGroups, tabContainers[i]);
|
||||
tabGroups++;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function findTabs(container) {
|
||||
return findChildElements(container, "DIV", "tab");
|
||||
}
|
||||
|
||||
function findHeaders(container) {
|
||||
const owner = findChildElements(container, "UL", "tabLinks");
|
||||
return findChildElements(owner[0], "LI", null);
|
||||
}
|
||||
|
||||
function findTitles(tabs) {
|
||||
const titles = [];
|
||||
|
||||
for (let i = 0; i < tabs.length; i++) {
|
||||
const tab = tabs[i];
|
||||
const header = findChildElements(tab, "H2", null)[0];
|
||||
|
||||
header.parentNode.removeChild(header);
|
||||
|
||||
if (header.innerText) {
|
||||
titles.push(header.innerText);
|
||||
} else {
|
||||
titles.push(header.textContent);
|
||||
}
|
||||
}
|
||||
|
||||
return titles;
|
||||
}
|
||||
|
||||
function findChildElements(container, name, targetClass) {
|
||||
const elements = [];
|
||||
const children = container.childNodes;
|
||||
|
||||
for (let i = 0; i < children.length; i++) {
|
||||
const child = children.item(i);
|
||||
|
||||
if (child.nodeType === 1 && child.nodeName === name) {
|
||||
if (targetClass && child.className.indexOf(targetClass) < 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
elements.push(child);
|
||||
}
|
||||
}
|
||||
|
||||
return elements;
|
||||
}
|
||||
|
||||
function initTableSorting() {
|
||||
document.querySelectorAll("table.sortable").forEach((table) => {
|
||||
const thead = table.tHead;
|
||||
if (!thead || thead.rows.length === 0) return;
|
||||
const headerRow = thead.rows[0];
|
||||
const headers = Array.from(headerRow.cells);
|
||||
const tbody = table.tBodies[0] || table;
|
||||
const originalRows = Array.from(tbody.querySelectorAll(":scope > tr"));
|
||||
|
||||
headers.forEach((th, colIndex) => {
|
||||
if (th.classList.contains("no-sort")) return;
|
||||
th.classList.add("sortable-header");
|
||||
th.addEventListener("click", () => {
|
||||
const current = th.getAttribute("data-sort-dir");
|
||||
const firstDir = th.getAttribute("data-sort-default") === "desc" ? "desc" : "asc";
|
||||
const secondDir = firstDir === "desc" ? "asc" : "desc";
|
||||
// Cycle: none -> firstDir -> secondDir -> none
|
||||
let next;
|
||||
if (current === firstDir) next = secondDir;
|
||||
else if (current === secondDir) next = "none";
|
||||
else next = firstDir;
|
||||
|
||||
headers.forEach((h) => h.removeAttribute("data-sort-dir"));
|
||||
|
||||
if (next === "none") {
|
||||
originalRows.forEach((r) => tbody.appendChild(r));
|
||||
return;
|
||||
}
|
||||
th.setAttribute("data-sort-dir", next);
|
||||
|
||||
const rows = Array.from(tbody.querySelectorAll(":scope > tr"));
|
||||
const dir = next === "asc" ? 1 : -1;
|
||||
rows.sort((a, b) => {
|
||||
const av = getSortValue(a.cells[colIndex]);
|
||||
const bv = getSortValue(b.cells[colIndex]);
|
||||
if (av === bv) return 0;
|
||||
// Numeric compare if both parse as numbers
|
||||
const an = parseFloat(av), bn = parseFloat(bv);
|
||||
if (!isNaN(an) && !isNaN(bn) && isFinite(an) && isFinite(bn)
|
||||
&& av.trim() !== "" && bv.trim() !== "") {
|
||||
return (an - bn) * dir;
|
||||
}
|
||||
return av.localeCompare(bv) * dir;
|
||||
});
|
||||
rows.forEach((r) => tbody.appendChild(r));
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function getSortValue(cell) {
|
||||
if (!cell) return "";
|
||||
const v = cell.getAttribute("data-sort-value");
|
||||
return v !== null ? v : cell.textContent;
|
||||
}
|
||||
|
||||
// Entry point.
|
||||
|
||||
window.onload = function() {
|
||||
initTabs();
|
||||
initControls();
|
||||
initTableSorting();
|
||||
};
|
||||
} (window, window.document));
|
||||
@@ -0,0 +1,146 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - org.kilka.moderationcommands.common.ActorReasonParserTest</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<span class="breadcrumb">org.kilka.moderationcommands.common.ActorReasonParserTest</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :test</h2>
|
||||
<h1>ActorReasonParserTest</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">4</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.134s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<table class="test-results sortable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Child</th>
|
||||
<th hidden="">Name</th>
|
||||
<th data-sort-default="desc">Tests</th>
|
||||
<th data-sort-default="desc">Failures</th>
|
||||
<th data-sort-default="desc">Skipped</th>
|
||||
<th data-sort-default="desc">Duration</th>
|
||||
<th>Success rate</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="success">extractsConsoleActorAndRemovesItFromReason()</td>
|
||||
<td class="path" hidden="">extractsConsoleActorAndRemovesItFromReason()</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="5">0.005s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="success">rejectsActorFromPlayerWithoutChangingTheAuthor()</td>
|
||||
<td class="path" hidden="">rejectsActorFromPlayerWithoutChangingTheAuthor()</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="65">0.065s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="success">rejectsDuplicateMalformedAndMissingValues()</td>
|
||||
<td class="path" hidden="">rejectsDuplicateMalformedAndMissingValues()</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="6">0.006s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="success">usesConsoleWhenActorIsAbsent()</td>
|
||||
<td class="path" hidden="">usesConsoleWhenActorIsAbsent()</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="13">0.013s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.6.1</a> at Aug 2, 2026, 9:23:22 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,128 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - org.kilka.moderationcommands.common.BlockedCommandMatcherTest</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<span class="breadcrumb">org.kilka.moderationcommands.common.BlockedCommandMatcherTest</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :test</h2>
|
||||
<h1>BlockedCommandMatcherTest</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">2</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.013s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<table class="test-results sortable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Child</th>
|
||||
<th hidden="">Name</th>
|
||||
<th data-sort-default="desc">Tests</th>
|
||||
<th data-sort-default="desc">Failures</th>
|
||||
<th data-sort-default="desc">Skipped</th>
|
||||
<th data-sort-default="desc">Duration</th>
|
||||
<th>Success rate</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="success">blocksPlainCaseInsensitiveAndNamespacedCommands()</td>
|
||||
<td class="path" hidden="">blocksPlainCaseInsensitiveAndNamespacedCommands()</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="3">0.003s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="success">doesNotMatchArgumentsOrPrefixes()</td>
|
||||
<td class="path" hidden="">doesNotMatchArgumentsOrPrefixes()</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="6">0.006s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.6.1</a> at Aug 2, 2026, 9:23:22 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,137 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - org.kilka.moderationcommands.common.DurationParserTest</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<span class="breadcrumb">org.kilka.moderationcommands.common.DurationParserTest</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :test</h2>
|
||||
<h1>DurationParserTest</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">3</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.012s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<table class="test-results sortable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Child</th>
|
||||
<th hidden="">Name</th>
|
||||
<th data-sort-default="desc">Tests</th>
|
||||
<th data-sort-default="desc">Failures</th>
|
||||
<th data-sort-default="desc">Skipped</th>
|
||||
<th data-sort-default="desc">Duration</th>
|
||||
<th>Success rate</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="success">parsesRequiredAndGeneralizedDurations()</td>
|
||||
<td class="path" hidden="">parsesRequiredAndGeneralizedDurations()</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="2">0.002s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="success">rejectsExpirationOverflow()</td>
|
||||
<td class="path" hidden="">rejectsExpirationOverflow()</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="2">0.002s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="success">rejectsInvalidValuesAndArithmeticOverflow()</td>
|
||||
<td class="path" hidden="">rejectsInvalidValuesAndArithmeticOverflow()</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="3">0.003s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.6.1</a> at Aug 2, 2026, 9:23:22 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,137 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - org.kilka.moderationcommands.config.DefaultConfigTest</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<span class="breadcrumb">org.kilka.moderationcommands.config.DefaultConfigTest</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :test</h2>
|
||||
<h1>DefaultConfigTest</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">3</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.302s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<table class="test-results sortable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Child</th>
|
||||
<th hidden="">Name</th>
|
||||
<th data-sort-default="desc">Tests</th>
|
||||
<th data-sort-default="desc">Failures</th>
|
||||
<th data-sort-default="desc">Skipped</th>
|
||||
<th data-sort-default="desc">Duration</th>
|
||||
<th>Success rate</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="success">defaultConfigContainsRequiredCommandsAndValidMessages()</td>
|
||||
<td class="path" hidden="">defaultConfigContainsRequiredCommandsAndValidMessages()</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="234">0.234s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="success">missingIntegrationSettingsUseBackwardsCompatibleDefaults()</td>
|
||||
<td class="path" hidden="">missingIntegrationSettingsUseBackwardsCompatibleDefaults()</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="61">0.061s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="success">rejectsInvalidVoicePermission()</td>
|
||||
<td class="path" hidden="">rejectsInvalidVoicePermission()</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="2">0.002s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.6.1</a> at Aug 2, 2026, 9:23:22 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,119 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - org.kilka.moderationcommands.config.PluginDescriptorTest</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<span class="breadcrumb">org.kilka.moderationcommands.config.PluginDescriptorTest</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :test</h2>
|
||||
<h1>PluginDescriptorTest</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">1</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.017s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<table class="test-results sortable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Child</th>
|
||||
<th hidden="">Name</th>
|
||||
<th data-sort-default="desc">Tests</th>
|
||||
<th data-sort-default="desc">Failures</th>
|
||||
<th data-sort-default="desc">Skipped</th>
|
||||
<th data-sort-default="desc">Duration</th>
|
||||
<th>Success rate</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="success">commandsExposeTheSamePermissionsCheckedByExecutors()</td>
|
||||
<td class="path" hidden="">commandsExposeTheSamePermissionsCheckedByExecutors()</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="15">0.015s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.6.1</a> at Aug 2, 2026, 9:23:22 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,137 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - org.kilka.moderationcommands.integration.flectone.FlectoneChatMuteIntegrationTest</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<span class="breadcrumb">org.kilka.moderationcommands.integration.flectone.FlectoneChatMuteIntegrationTest</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :test</h2>
|
||||
<h1>FlectoneChatMuteIntegrationTest</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">3</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.043s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<table class="test-results sortable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Child</th>
|
||||
<th hidden="">Name</th>
|
||||
<th data-sort-default="desc">Tests</th>
|
||||
<th data-sort-default="desc">Failures</th>
|
||||
<th data-sort-default="desc">Skipped</th>
|
||||
<th data-sort-default="desc">Duration</th>
|
||||
<th>Success rate</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="success">cancelsFlectoneChatAndNotifiesMutedSender()</td>
|
||||
<td class="path" hidden="">cancelsFlectoneChatAndNotifiesMutedSender()</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="3">0.003s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="success">disabledPermanentListenerBecomesNoOp()</td>
|
||||
<td class="path" hidden="">disabledPermanentListenerBecomesNoOp()</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="3">0.003s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="success">leavesOtherModulesAndUnmutedPlayersUntouched()</td>
|
||||
<td class="path" hidden="">leavesOtherModulesAndUnmutedPlayersUntouched()</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="27">0.027s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.6.1</a> at Aug 2, 2026, 9:23:22 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,155 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - org.kilka.moderationcommands.mute.YamlMuteRepositoryTest</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<div class="breadcrumbs">
|
||||
<a class="breadcrumb" href="../index.html">all</a> >
|
||||
<span class="breadcrumb">org.kilka.moderationcommands.mute.YamlMuteRepositoryTest</span>
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="successGroup" href="#">Gradle Test Run :test</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>Gradle Test Run :test</h2>
|
||||
<h1>YamlMuteRepositoryTest</h1>
|
||||
<div class="tab-container">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a class="" href="#">summary</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab">
|
||||
<h2>summary</h2>
|
||||
<div>
|
||||
<div class="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">5</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox">
|
||||
<div class="counter">0</div>
|
||||
<p>skipped</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox duration">
|
||||
<div class="counter">0.092s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<table class="test-results sortable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Child</th>
|
||||
<th hidden="">Name</th>
|
||||
<th data-sort-default="desc">Tests</th>
|
||||
<th data-sort-default="desc">Failures</th>
|
||||
<th data-sort-default="desc">Skipped</th>
|
||||
<th data-sort-default="desc">Duration</th>
|
||||
<th>Success rate</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="success">expirationIsImmediateAndCleanupIsPersistent()</td>
|
||||
<td class="path" hidden="">expirationIsImmediateAndCleanupIsPersistent()</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="46">0.046s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="success">failedAtomicWriteKeepsThePublishedSnapshot()</td>
|
||||
<td class="path" hidden="">failedAtomicWriteKeepsThePublishedSnapshot()</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="10">0.010s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="success">persistsTemporaryAndPermanentMutesAcrossReloads()</td>
|
||||
<td class="path" hidden="">persistsTemporaryAndPermanentMutesAcrossReloads()</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="14">0.014s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="success">rejectsCorruptedStorageWithoutOverwritingIt()</td>
|
||||
<td class="path" hidden="">rejectsCorruptedStorageWithoutOverwritingIt()</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="7">0.007s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="success">repeatMuteReplacesTheUuidEntry()</td>
|
||||
<td class="path" hidden="">repeatMuteReplacesTheUuidEntry()</td>
|
||||
<td>1</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td data-sort-value="8">0.008s</td>
|
||||
<td class="success" data-sort-value="100">100%</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="https://www.gradle.org">Gradle 9.6.1</a> at Aug 2, 2026, 9:23:22 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
46
build/resources/main/config.yml
Normal file
46
build/resources/main/config.yml
Normal file
@@ -0,0 +1,46 @@
|
||||
mute:
|
||||
integrations:
|
||||
flectone:
|
||||
enabled: true
|
||||
voice:
|
||||
enabled: true
|
||||
permission: voicechat.speak
|
||||
blocked-commands:
|
||||
- msg
|
||||
- tell
|
||||
- w
|
||||
- whisper
|
||||
- reply
|
||||
- r
|
||||
- me
|
||||
|
||||
messages:
|
||||
prefix: "<dark_gray>[<red>Moderation</red>]</dark_gray> "
|
||||
no-permission: "<red>У вас нет права <permission>.</red>"
|
||||
unsupported-sender: "<red>Эту команду может выполнить только игрок или обычная консоль.</red>"
|
||||
usage-mute: "<red>Использование: /mute <player> <duration> [actor:<name>] <reason...></red>"
|
||||
usage-unmute: "<red>Использование: /unmute <player> [actor:<name>] [reason...]</red>"
|
||||
usage-ban: "<red>Использование: /ban <player> <duration> [actor:<name>] <reason...></red>"
|
||||
usage-unban: "<red>Использование: /unban <player> [actor:<name>] [reason...]</red>"
|
||||
usage-kick: "<red>Использование: /kick <player> [actor:<name>] <reason...></red>"
|
||||
invalid-duration: "<red>Неизвестный или недопустимый срок: <duration>.</red>"
|
||||
invalid-actor: "<red>Аргумент actor: указан неверно.</red>"
|
||||
player-actor-forbidden: "<red>Игрок не может передавать actor: вручную.</red>"
|
||||
missing-reason: "<red>Необходимо указать причину.</red>"
|
||||
target-not-found: "<red>Профиль <target> не найден среди известных серверу игроков. Можно указать UUID.</red>"
|
||||
target-offline: "<red>Игрок <target> уже вышел с сервера.</red>"
|
||||
no-active-mute: "<red>У игрока <target> нет активного мута.</red>"
|
||||
no-active-ban: "<red>У профиля <target> нет активного бана.</red>"
|
||||
storage-error: "<red>Не удалось надёжно сохранить изменение. Наказание не применено.</red>"
|
||||
action-failed: "<red>Не удалось применить действие. Подробности записаны в журнал сервера.</red>"
|
||||
mute-success: "<green>Мут игрока <target> установлен на <duration>. Автор: <actor>.</green>"
|
||||
mute-target: "<red>Вам запрещён чат.</red> <gray>Причина: <reason>. Модератор: <actor>. Срок: <duration>.</gray>"
|
||||
unmute-success: "<green>Мут игрока <target> снят. Автор: <actor>.</green>"
|
||||
unmute-target: "<green>Ваш мут снят.</green> <gray>Модератор: <actor>. Причина снятия: <reason>.</gray>"
|
||||
ban-success: "<green>Профиль <target> заблокирован на <duration>. Автор: <actor>.</green>"
|
||||
ban-disconnect: "<red>Вы заблокированы на сервере.</red>\n<gray>Причина: <reason>\nМодератор: <actor>\nСрок: <duration></gray>"
|
||||
unban-success: "<green>Бан профиля <target> снят. Автор: <actor>.</green>"
|
||||
kick-success: "<green>Игрок <target> исключён с сервера. Автор: <actor>.</green>"
|
||||
kick-disconnect: "<red>Вы исключены с сервера.</red>\n<gray>Причина: <reason>\nМодератор: <actor></gray>"
|
||||
muted-attempt: "<red>Вы не можете писать.</red> <gray>Причина: <reason>. Осталось: <duration>.</gray>"
|
||||
reason-not-specified: "не указана"
|
||||
54
build/resources/main/plugin.yml
Normal file
54
build/resources/main/plugin.yml
Normal file
@@ -0,0 +1,54 @@
|
||||
name: ModerationCommands
|
||||
description: Moderation commands for Paper servers
|
||||
prefix: ModerationCommands
|
||||
version: '1.0'
|
||||
|
||||
main: org.kilka.moderationcommands.ModerationCommandsPlugin
|
||||
api-version: '26.1.2'
|
||||
load: POSTWORLD
|
||||
softdepend: [ FlectonePulse, LuckPerms ]
|
||||
|
||||
authors: [ Kilka_v_HJIebe ]
|
||||
|
||||
commands:
|
||||
mute:
|
||||
description: Mute a player
|
||||
permission: moderation.command.mute
|
||||
unmute:
|
||||
description: Remove an active mute
|
||||
permission: moderation.command.unmute
|
||||
ban:
|
||||
description: Ban a player profile
|
||||
permission: moderation.command.ban
|
||||
unban:
|
||||
description: Remove an active profile ban
|
||||
permission: moderation.command.unban
|
||||
kick:
|
||||
description: Kick an online player
|
||||
permission: moderation.command.kick
|
||||
|
||||
permissions:
|
||||
moderation.command.*:
|
||||
description: Allows all ModerationCommands commands
|
||||
default: op
|
||||
children:
|
||||
moderation.command.mute: true
|
||||
moderation.command.unmute: true
|
||||
moderation.command.ban: true
|
||||
moderation.command.unban: true
|
||||
moderation.command.kick: true
|
||||
moderation.command.mute:
|
||||
description: Allows /mute
|
||||
default: op
|
||||
moderation.command.unmute:
|
||||
description: Allows /unmute
|
||||
default: op
|
||||
moderation.command.ban:
|
||||
description: Allows /ban
|
||||
default: op
|
||||
moderation.command.unban:
|
||||
description: Allows /unban
|
||||
default: op
|
||||
moderation.command.kick:
|
||||
description: Allows /kick
|
||||
default: op
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<testsuite name="org.kilka.moderationcommands.common.ActorReasonParserTest" tests="4" skipped="0" failures="0" errors="0" timestamp="2026-08-02T18:23:22.030Z" hostname="hlebushek" time="0.131">
|
||||
<properties/>
|
||||
<testcase name="rejectsActorFromPlayerWithoutChangingTheAuthor()" classname="org.kilka.moderationcommands.common.ActorReasonParserTest" time="0.065"/>
|
||||
<testcase name="usesConsoleWhenActorIsAbsent()" classname="org.kilka.moderationcommands.common.ActorReasonParserTest" time="0.013"/>
|
||||
<testcase name="extractsConsoleActorAndRemovesItFromReason()" classname="org.kilka.moderationcommands.common.ActorReasonParserTest" time="0.005"/>
|
||||
<testcase name="rejectsDuplicateMalformedAndMissingValues()" classname="org.kilka.moderationcommands.common.ActorReasonParserTest" time="0.006"/>
|
||||
<system-out><![CDATA[]]></system-out>
|
||||
<system-err><![CDATA[]]></system-err>
|
||||
</testsuite>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<testsuite name="org.kilka.moderationcommands.common.BlockedCommandMatcherTest" tests="2" skipped="0" failures="0" errors="0" timestamp="2026-08-02T18:23:22.165Z" hostname="hlebushek" time="0.013">
|
||||
<properties/>
|
||||
<testcase name="doesNotMatchArgumentsOrPrefixes()" classname="org.kilka.moderationcommands.common.BlockedCommandMatcherTest" time="0.006"/>
|
||||
<testcase name="blocksPlainCaseInsensitiveAndNamespacedCommands()" classname="org.kilka.moderationcommands.common.BlockedCommandMatcherTest" time="0.003"/>
|
||||
<system-out><![CDATA[]]></system-out>
|
||||
<system-err><![CDATA[]]></system-err>
|
||||
</testsuite>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<testsuite name="org.kilka.moderationcommands.common.DurationParserTest" tests="3" skipped="0" failures="0" errors="0" timestamp="2026-08-02T18:23:22.179Z" hostname="hlebushek" time="0.011">
|
||||
<properties/>
|
||||
<testcase name="parsesRequiredAndGeneralizedDurations()" classname="org.kilka.moderationcommands.common.DurationParserTest" time="0.002"/>
|
||||
<testcase name="rejectsInvalidValuesAndArithmeticOverflow()" classname="org.kilka.moderationcommands.common.DurationParserTest" time="0.003"/>
|
||||
<testcase name="rejectsExpirationOverflow()" classname="org.kilka.moderationcommands.common.DurationParserTest" time="0.002"/>
|
||||
<system-out><![CDATA[]]></system-out>
|
||||
<system-err><![CDATA[]]></system-err>
|
||||
</testsuite>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<testsuite name="org.kilka.moderationcommands.config.DefaultConfigTest" tests="3" skipped="0" failures="0" errors="0" timestamp="2026-08-02T18:23:22.192Z" hostname="hlebushek" time="0.301">
|
||||
<properties/>
|
||||
<testcase name="missingIntegrationSettingsUseBackwardsCompatibleDefaults()" classname="org.kilka.moderationcommands.config.DefaultConfigTest" time="0.061"/>
|
||||
<testcase name="defaultConfigContainsRequiredCommandsAndValidMessages()" classname="org.kilka.moderationcommands.config.DefaultConfigTest" time="0.234"/>
|
||||
<testcase name="rejectsInvalidVoicePermission()" classname="org.kilka.moderationcommands.config.DefaultConfigTest" time="0.002"/>
|
||||
<system-out><![CDATA[]]></system-out>
|
||||
<system-err><![CDATA[]]></system-err>
|
||||
</testsuite>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<testsuite name="org.kilka.moderationcommands.config.PluginDescriptorTest" tests="1" skipped="0" failures="0" errors="0" timestamp="2026-08-02T18:23:22.494Z" hostname="hlebushek" time="0.017">
|
||||
<properties/>
|
||||
<testcase name="commandsExposeTheSamePermissionsCheckedByExecutors()" classname="org.kilka.moderationcommands.config.PluginDescriptorTest" time="0.015"/>
|
||||
<system-out><![CDATA[]]></system-out>
|
||||
<system-err><![CDATA[]]></system-err>
|
||||
</testsuite>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<testsuite name="org.kilka.moderationcommands.integration.flectone.FlectoneChatMuteIntegrationTest" tests="3" skipped="0" failures="0" errors="0" timestamp="2026-08-02T18:23:22.512Z" hostname="hlebushek" time="0.043">
|
||||
<properties/>
|
||||
<testcase name="leavesOtherModulesAndUnmutedPlayersUntouched()" classname="org.kilka.moderationcommands.integration.flectone.FlectoneChatMuteIntegrationTest" time="0.027"/>
|
||||
<testcase name="disabledPermanentListenerBecomesNoOp()" classname="org.kilka.moderationcommands.integration.flectone.FlectoneChatMuteIntegrationTest" time="0.003"/>
|
||||
<testcase name="cancelsFlectoneChatAndNotifiesMutedSender()" classname="org.kilka.moderationcommands.integration.flectone.FlectoneChatMuteIntegrationTest" time="0.003"/>
|
||||
<system-out><![CDATA[]]></system-out>
|
||||
<system-err><![CDATA[]]></system-err>
|
||||
</testsuite>
|
||||
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<testsuite name="org.kilka.moderationcommands.mute.YamlMuteRepositoryTest" tests="5" skipped="0" failures="0" errors="0" timestamp="2026-08-02T18:23:22.560Z" hostname="hlebushek" time="0.092">
|
||||
<properties/>
|
||||
<testcase name="expirationIsImmediateAndCleanupIsPersistent()" classname="org.kilka.moderationcommands.mute.YamlMuteRepositoryTest" time="0.046"/>
|
||||
<testcase name="persistsTemporaryAndPermanentMutesAcrossReloads()" classname="org.kilka.moderationcommands.mute.YamlMuteRepositoryTest" time="0.014"/>
|
||||
<testcase name="repeatMuteReplacesTheUuidEntry()" classname="org.kilka.moderationcommands.mute.YamlMuteRepositoryTest" time="0.008"/>
|
||||
<testcase name="rejectsCorruptedStorageWithoutOverwritingIt()" classname="org.kilka.moderationcommands.mute.YamlMuteRepositoryTest" time="0.007"/>
|
||||
<testcase name="failedAtomicWriteKeepsThePublishedSnapshot()" classname="org.kilka.moderationcommands.mute.YamlMuteRepositoryTest" time="0.01"/>
|
||||
<system-out><![CDATA[]]></system-out>
|
||||
<system-err><![CDATA[]]></system-err>
|
||||
</testsuite>
|
||||
0
build/test-results/test/binary/output-events.bin
Normal file
0
build/test-results/test/binary/output-events.bin
Normal file
BIN
build/test-results/test/binary/results-generic.bin
Normal file
BIN
build/test-results/test/binary/results-generic.bin
Normal file
Binary file not shown.
BIN
build/tmp/compileJava/previous-compilation-data.bin
Normal file
BIN
build/tmp/compileJava/previous-compilation-data.bin
Normal file
Binary file not shown.
BIN
build/tmp/compileTestJava/previous-compilation-data.bin
Normal file
BIN
build/tmp/compileTestJava/previous-compilation-data.bin
Normal file
Binary file not shown.
2
build/tmp/jar/MANIFEST.MF
Normal file
2
build/tmp/jar/MANIFEST.MF
Normal file
@@ -0,0 +1,2 @@
|
||||
Manifest-Version: 1.0
|
||||
|
||||
Reference in New Issue
Block a user