mirror of
https://github.com/BentoBoxWorld/BentoBox.git
synced 2024-09-29 15:17:29 +02:00
Fixes the API checking algorithm.
Fixes https://github.com/BentoBoxWorld/BentoBox/issues/1176
This commit is contained in:
parent
d972dd10c1
commit
332967950f
@ -27,6 +27,7 @@ import org.bukkit.generator.ChunkGenerator;
|
||||
import org.eclipse.jdt.annotation.NonNull;
|
||||
import org.eclipse.jdt.annotation.Nullable;
|
||||
|
||||
import be.maximvdw.placeholderapi.internal.utils.NumberUtils;
|
||||
import world.bentobox.bentobox.BentoBox;
|
||||
import world.bentobox.bentobox.api.addons.Addon;
|
||||
import world.bentobox.bentobox.api.addons.Addon.State;
|
||||
@ -213,24 +214,27 @@ public class AddonsManager {
|
||||
plugin.logWarning("NOTE: DO NOT report this as a bug from BentoBox.");
|
||||
}
|
||||
|
||||
private boolean isAddonCompatibleWithBentoBox(@NonNull Addon addon) {
|
||||
return isAddonCompatibleWithBentoBox(addon, plugin.getDescription().getVersion());
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the addon does not explicitly rely on API from a more recent BentoBox version.
|
||||
* @param addon instance of the Addon.
|
||||
* @param plugin version string - used for testing
|
||||
* @return {@code true} if the addon relies on available BentoBox API, {@code false} otherwise.
|
||||
* @since 1.11.0
|
||||
*/
|
||||
private boolean isAddonCompatibleWithBentoBox(@NonNull Addon addon) {
|
||||
// We have to use lists instead of arrays for dynamic changes and optimization (appending something to an array is O(n) whereas O(1) with lists).
|
||||
List<String> apiVersion = Arrays.asList(addon.getDescription().getApiVersion().split("\\."));
|
||||
List<String> bentoboxVersion = Arrays.asList(plugin.getDescription().getVersion().split("\\."));
|
||||
boolean isAddonCompatibleWithBentoBox(@NonNull Addon addon, String pluginVersion) {
|
||||
String[] apiVersion = addon.getDescription().getApiVersion().split("\\D");
|
||||
String[] bentoboxVersion = pluginVersion.split("\\D");
|
||||
|
||||
while (bentoboxVersion.size() < apiVersion.size()) {
|
||||
bentoboxVersion.add("0");
|
||||
}
|
||||
|
||||
for (int i = 0; i < apiVersion.size(); i++) {
|
||||
int apiNumber = Integer.parseInt(apiVersion.get(i));
|
||||
int bentoboxNumber = Integer.parseInt(bentoboxVersion.get(i));
|
||||
for (int i = 0; i < apiVersion.length; i++) {
|
||||
int bentoboxNumber = 0;
|
||||
if (i < bentoboxVersion.length && NumberUtils.isInteger(bentoboxVersion[i])) {
|
||||
bentoboxNumber = Integer.parseInt(bentoboxVersion[i]);
|
||||
}
|
||||
int apiNumber = NumberUtils.isInteger(apiVersion[i]) ? Integer.parseInt(apiVersion[i]) : -1;
|
||||
if (bentoboxNumber < apiNumber) {
|
||||
return false;
|
||||
}
|
||||
|
@ -31,6 +31,7 @@ import org.powermock.reflect.Whitebox;
|
||||
import world.bentobox.bentobox.BentoBox;
|
||||
import world.bentobox.bentobox.Settings;
|
||||
import world.bentobox.bentobox.api.addons.Addon;
|
||||
import world.bentobox.bentobox.api.addons.AddonDescription;
|
||||
import world.bentobox.bentobox.database.DatabaseSetup.DatabaseType;
|
||||
import world.bentobox.bentobox.database.objects.DataObject;
|
||||
|
||||
@ -234,5 +235,105 @@ public class AddonsManagerTest {
|
||||
assertFalse(am.getDataObjects().isEmpty());
|
||||
assertTrue(am.getDataObjects().size() == 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon)}.
|
||||
*/
|
||||
@Test
|
||||
public void testIsAddonCompatibleWithBentoBoxSnapshotNoAPIVersion() {
|
||||
Addon addon = mock(Addon.class);
|
||||
AddonDescription addonDesc = new AddonDescription.Builder("main.class", "Addon-name", "1.0.1").build();
|
||||
when(addon.getDescription()).thenReturn(addonDesc);
|
||||
assertTrue(am.isAddonCompatibleWithBentoBox(addon, "1.0.1-SNAPSHOT-b1642"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon)}.
|
||||
*/
|
||||
@Test
|
||||
public void testIsAddonCompatibleWithBentoBoxReleaseAPIVersion() {
|
||||
Addon addon = mock(Addon.class);
|
||||
AddonDescription addonDesc = new AddonDescription.Builder("main.class", "Addon-name", "1.0.1").apiVersion("1.0.1").build();
|
||||
when(addon.getDescription()).thenReturn(addonDesc);
|
||||
assertTrue(am.isAddonCompatibleWithBentoBox(addon, "1.0.1"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon)}.
|
||||
*/
|
||||
@Test
|
||||
public void testIsAddonCompatibleWithBentoBoxSnapshotAPIVersion() {
|
||||
Addon addon = mock(Addon.class);
|
||||
AddonDescription addonDesc = new AddonDescription.Builder("main.class", "Addon-name", "1.0.1").apiVersion("1.0.1").build();
|
||||
when(addon.getDescription()).thenReturn(addonDesc);
|
||||
assertTrue(am.isAddonCompatibleWithBentoBox(addon, "1.0.1-SNAPSHOT-b1642"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon)}.
|
||||
*/
|
||||
@Test
|
||||
public void testIsAddonCompatibleWithBentoBoxReleaseNoAPIVersion() {
|
||||
Addon addon = mock(Addon.class);
|
||||
AddonDescription addonDesc = new AddonDescription.Builder("main.class", "Addon-name", "1.0.1").build();
|
||||
when(addon.getDescription()).thenReturn(addonDesc);
|
||||
assertTrue(am.isAddonCompatibleWithBentoBox(addon, "1.0.1"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon)}.
|
||||
*/
|
||||
@Test
|
||||
public void testIsAddonCompatibleWithBentoBoxSnapshotAPIVersionVariableDigits() {
|
||||
Addon addon = mock(Addon.class);
|
||||
AddonDescription addonDesc = new AddonDescription.Builder("main.class", "Addon-name", "1.0.1").apiVersion("1.2.1").build();
|
||||
when(addon.getDescription()).thenReturn(addonDesc);
|
||||
assertFalse(am.isAddonCompatibleWithBentoBox(addon, "1.2-SNAPSHOT-b1642"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon)}.
|
||||
*/
|
||||
@Test
|
||||
public void testIsAddonCompatibleWithBentoBoxOldSnapshot() {
|
||||
Addon addon = mock(Addon.class);
|
||||
AddonDescription addonDesc = new AddonDescription.Builder("main.class", "Addon-name", "1.0.0").apiVersion("1.11.1").build();
|
||||
when(addon.getDescription()).thenReturn(addonDesc);
|
||||
assertFalse(am.isAddonCompatibleWithBentoBox(addon, "1.0.1-SNAPSHOT-b1642"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon)}.
|
||||
*/
|
||||
@Test
|
||||
public void testIsAddonCompatibleWithBentoBoxOldRelease() {
|
||||
Addon addon = mock(Addon.class);
|
||||
AddonDescription addonDesc = new AddonDescription.Builder("main.class", "Addon-name", "1.0.0").apiVersion("1.11.1").build();
|
||||
when(addon.getDescription()).thenReturn(addonDesc);
|
||||
assertFalse(am.isAddonCompatibleWithBentoBox(addon, "1.0.1"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon)}.
|
||||
*/
|
||||
@Test
|
||||
public void testIsAddonCompatibleWithBentoBoxOldReleaseLong() {
|
||||
Addon addon = mock(Addon.class);
|
||||
AddonDescription addonDesc = new AddonDescription.Builder("main.class", "Addon-name", "1.0.0").apiVersion("1.11.1").build();
|
||||
when(addon.getDescription()).thenReturn(addonDesc);
|
||||
assertTrue(am.isAddonCompatibleWithBentoBox(addon, "1.11.1.11.1.1"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#isAddonCompatibleWithBentoBox(Addon)}.
|
||||
*/
|
||||
@Test
|
||||
public void testIsAddonCompatibleWithBentoBoxOldReleaseLongAPI() {
|
||||
Addon addon = mock(Addon.class);
|
||||
AddonDescription addonDesc = new AddonDescription.Builder("main.class", "Addon-name", "1.0.0").apiVersion("1.11.1.0.0.0.1").build();
|
||||
when(addon.getDescription()).thenReturn(addonDesc);
|
||||
assertFalse(am.isAddonCompatibleWithBentoBox(addon, "1.11.1"));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user