-
Notifications
You must be signed in to change notification settings - Fork 0
/
BungeeTestSuite.java
152 lines (136 loc) · 4.56 KB
/
BungeeTestSuite.java
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package net.alpenblock.bungeeperms.testsuite.bungee;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import lombok.Getter;
import net.alpenblock.bungeeperms.ChatColor;
import net.alpenblock.bungeeperms.Color;
import net.alpenblock.bungeeperms.testsuite.bungee.tests.PrefixSuffixTest;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.plugin.Command;
import net.md_5.bungee.api.plugin.Plugin;
public class BungeeTestSuite extends Plugin
{
@Getter
private static BungeeTestSuite instance;
@Getter
private static String testplayer = "wea_ondara";
private final List<BungeeTest> tests = new ArrayList();
@Override
public void onLoad()
{
instance = this;
ProxyServer.getInstance().getPluginManager().registerCommand(this, new TestCommand("bungeepermstestsuite", "bungeepermstestsuite", "bpts"));
tests.add(new PrefixSuffixTest());
}
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
{
if (!cmd.getName().equalsIgnoreCase("bungeepermstestsuite"))
{
return false;
}
if (sender != ProxyServer.getInstance().getConsole())
{
return false;
}
if (args.length == 1 && args[0].equalsIgnoreCase("help"))
{
sender.sendMessage("/bpts help - Shows this help");
sender.sendMessage("/bpts list - Lists the test cases");
sender.sendMessage("/bpts testall - Tests all test cases");
sender.sendMessage("/bpts player <player> - Sets the player for the test cases");
sender.sendMessage("/bpts test <testcase> - Executes a single testcase");
return true;
}
else if (args.length == 1 && args[0].equalsIgnoreCase("testall"))
{
String[] tests = new String[this.tests.size()];
for (int i = 0; i < this.tests.size(); i++)
{
tests[i] = this.tests.get(i).getName();
}
test(sender, tests);
return true;
}
else if (args.length == 1 && args[0].equalsIgnoreCase("list"))
{
for (BungeeTest test : this.tests)
{
sender.sendMessage("- " + test.getName());
}
return true;
}
else if (args.length > 1 && args[0].equalsIgnoreCase("player"))
{
testplayer = args[1];
return true;
}
else if (args.length > 1 && args[0].equalsIgnoreCase("test"))
{
String[] tests = new String[args.length - 1];
System.arraycopy(args, 1, tests, 0, args.length - 1);
test(sender, tests);
return true;
}
sender.sendMessage(Color.Error + "Command not found.");
return false;
}
private void test(CommandSender sender, String... tests)
{
int error = 0;
int fail = 0;
int all = 0;
long time = 0;
for (String testname : tests)
{
BungeeTest test = getTest(testname);
if (test == null)
{
continue;
}
boolean s = false;
try
{
long start = System.currentTimeMillis();
s = test.test(sender);
time += System.currentTimeMillis() - start;
}
catch (Throwable t)
{
StringWriter writer = new StringWriter();
t.printStackTrace(new PrintWriter(writer));
sender.sendMessage(ChatColor.RED + writer.toString());
error++;
fail--;
}
fail += !s ? 1 : 0;
all++;
}
sender.sendMessage("Tests run: " + all + ", Failures: " + fail + ", Errors: " + error + ", Skipped: 0, Time elapsed: " + (double) time / 1000 + " sec");
}
private BungeeTest getTest(String name)
{
for (BungeeTest t : tests)
{
if (t.getName().equalsIgnoreCase(name))
{
return t;
}
}
return null;
}
private class TestCommand extends Command
{
public TestCommand(String name, String permission, String... aliases)
{
super(name, permission, aliases);
}
@Override
public void execute(CommandSender sender, String[] args)
{
onCommand(sender, this, this.getName(), args);
}
}
}