geforkt von Mirrors/Paper
#1196: Test Registry instances more thoroughly
By: Parker Hawke <hawkeboyz2@hotmail.com>
Dieser Commit ist enthalten in:
Ursprung
e894c4d08c
Commit
355e9daf30
89
paper-server/src/test/java/org/bukkit/PerRegistryTest.java
Normale Datei
89
paper-server/src/test/java/org/bukkit/PerRegistryTest.java
Normale Datei
@ -0,0 +1,89 @@
|
|||||||
|
package org.bukkit;
|
||||||
|
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Random;
|
||||||
|
import org.bukkit.craftbukkit.CraftRegistry;
|
||||||
|
import org.bukkit.support.AbstractTestingBase;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.BeforeClass;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.junit.runners.Parameterized;
|
||||||
|
import org.junit.runners.Parameterized.Parameter;
|
||||||
|
import org.junit.runners.Parameterized.Parameters;
|
||||||
|
|
||||||
|
@RunWith(Parameterized.class)
|
||||||
|
public class PerRegistryTest extends AbstractTestingBase {
|
||||||
|
|
||||||
|
private static Random random;
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
public static void init() {
|
||||||
|
random = new Random();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Parameters(name = "{index}: {0}")
|
||||||
|
public static List<Object[]> data() {
|
||||||
|
List<Object[]> data = Lists.newArrayList();
|
||||||
|
|
||||||
|
Field[] registryFields = Registry.class.getFields();
|
||||||
|
for (Field registryField : registryFields) {
|
||||||
|
try {
|
||||||
|
Object object = registryField.get(null);
|
||||||
|
// Ignore Bukkit's default SimpleRegistry. It cannot be tested correctly
|
||||||
|
if (!(object instanceof CraftRegistry<?, ?> registry)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
data.add(new Object[] {registry});
|
||||||
|
} catch (ReflectiveOperationException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Parameter public Registry<? extends Keyed> registry;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGet() {
|
||||||
|
this.registry.forEach(element -> {
|
||||||
|
// Values in the registry should be referentially equal to what is returned with #get()
|
||||||
|
// This ensures that new instances are not created each time #get() is invoked
|
||||||
|
Assert.assertSame(element, registry.get(element.getKey()));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testMatch() {
|
||||||
|
this.registry.forEach(element -> {
|
||||||
|
NamespacedKey key = element.getKey();
|
||||||
|
|
||||||
|
assertSameMatchWithKeyMessage(element, key.toString()); // namespace:key
|
||||||
|
assertSameMatchWithKeyMessage(element, key.getKey()); // key
|
||||||
|
assertSameMatchWithKeyMessage(element, key.toString().replace('_', ' ')); // namespace:key with space
|
||||||
|
assertSameMatchWithKeyMessage(element, key.getKey().replace('_', ' ')); // key with space
|
||||||
|
assertSameMatchWithKeyMessage(element, randomizeCase(key.toString())); // nAmeSPaCe:kEY
|
||||||
|
assertSameMatchWithKeyMessage(element, randomizeCase(key.getKey())); // kEy
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertSameMatchWithKeyMessage(Keyed element, String key) {
|
||||||
|
Assert.assertSame(key, element, registry.match(key));
|
||||||
|
}
|
||||||
|
|
||||||
|
private String randomizeCase(String input) {
|
||||||
|
int size = input.length();
|
||||||
|
StringBuilder builder = new StringBuilder(size);
|
||||||
|
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
char character = input.charAt(i);
|
||||||
|
builder.append(random.nextBoolean() ? Character.toUpperCase(character) : character);
|
||||||
|
}
|
||||||
|
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
|
}
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren