Added protection methods.

This commit is contained in:
Tastybento 2018-01-28 20:44:57 -08:00
parent ba62989788
commit f7b6898559
16 changed files with 455 additions and 121 deletions

13
.idea/misc.xml Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

8
.idea/modules.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/bskyblock.iml" filepath="$PROJECT_DIR$/bskyblock.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

43
bskyblock.iml Normal file
View File

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="EclipseModuleManager">
<conelement value="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER" />
<src_description expected_position="0">
<src_folder value="file://$MODULE_DIR$/src/main/java" expected_position="0" />
<src_folder value="file://$MODULE_DIR$/locales" expected_position="1" />
<src_folder value="file://$MODULE_DIR$/src/test/java" expected_position="2" />
</src_description>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/locales" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="jdk" jdkName="1.8 (1)" jdkType="JavaSDK" />
<orderEntry type="library" name="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER" level="application" />
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-all:1.10.19" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bukkit:bukkit:1.12.2-R0.1-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-lang:commons-lang:2.6" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.googlecode.json-simple:json-simple:1.1.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.guava:guava:21.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.code.gson:gson:2.8.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.yaml:snakeyaml:1.19" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.powermock:powermock-module-junit4:1.7.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.powermock:powermock-module-junit4-common:1.7.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.powermock:powermock-reflect:1.7.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.powermock:powermock-core:1.7.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.javassist:javassist:3.21.0-GA" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: junit:junit:4.12" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.powermock:powermock-api-mockito:1.7.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.powermock:powermock-api-mockito-common:1.7.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.powermock:powermock-api-support:1.7.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:1.10.19" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.1" level="project" />
</component>
</module>

13
pom.xml
View File

@ -12,6 +12,7 @@
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<powermock.version>1.7.1</powermock.version>
</properties>
<build>
<defaultGoal>clean package install</defaultGoal>
@ -75,6 +76,18 @@
<version>1.12.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<repositories>
<repository>

View File

@ -104,7 +104,7 @@ public class BSkyBlock extends JavaPlugin {
registerListeners();
// Load Flags
flagsManager = new FlagsManager();
flagsManager = new FlagsManager(plugin);
// Load addons
addonsManager = new AddonsManager(plugin);

View File

@ -6,6 +6,7 @@ import org.bukkit.event.Listener;
import us.tastybento.bskyblock.BSkyBlock;
import us.tastybento.bskyblock.api.panels.PanelItem;
import us.tastybento.bskyblock.managers.FlagsManager;
public class Flag {

View File

@ -10,7 +10,7 @@ import us.tastybento.bskyblock.api.panels.builders.PanelItemBuilder;
public class FlagBuilder {
private String id = "";
private PanelItem icon = PanelItem.empty();
private PanelItem icon;
private Listener listener;
public FlagBuilder id(String id) {

View File

@ -19,13 +19,13 @@ public class PanelItem {
}
private ItemStack icon;
private Optional<ClickHandler> clickHandler;
private ClickHandler clickHandler;
private List<String> description;
private String name;
private boolean glow;
private ItemMeta meta;
public PanelItem(ItemStack icon, String name, List<String> description, boolean glow, Optional<ClickHandler> clickHandler) {
public PanelItem(ItemStack icon, String name, List<String> description, boolean glow, ClickHandler clickHandler) {
this.icon = icon;
// Get the meta
meta = icon.getItemMeta();
@ -70,7 +70,7 @@ public class PanelItem {
}
public Optional<ClickHandler> getClickHandler() {
return clickHandler;
return Optional.of(clickHandler);
}
public boolean isGlow() {

View File

@ -5,6 +5,7 @@ import java.util.Collections;
import java.util.List;
import java.util.Optional;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
@ -16,7 +17,7 @@ public class PanelItemBuilder {
private String name = "";
private List<String> description = new ArrayList<>();
private boolean glow = false;
private Optional<PanelItem.ClickHandler> clickHandler = Optional.empty();
private PanelItem.ClickHandler clickHandler;
public PanelItemBuilder icon(Material icon) {
this.icon = new ItemStack(icon);
@ -54,11 +55,13 @@ public class PanelItemBuilder {
}
public PanelItemBuilder clickHandler(ClickHandler clickHandler) {
this.clickHandler = Optional.of(clickHandler);
this.clickHandler = clickHandler;
return this;
}
public PanelItem build() {
if (icon == null)
Bukkit.getLogger().info("DEBUG: icon is null");
return new PanelItem(icon, name, description, glow, clickHandler);
}

View File

@ -88,7 +88,7 @@ public class Island implements DataObject {
private boolean spawn = false;
private boolean purgeProtected = false;
//// Protection ////
private HashMap<Flag, Boolean> flags = new HashMap<>();
private HashMap<Flag, Integer> flags = new HashMap<>();
private int levelHandicap;
@ -159,23 +159,23 @@ public class Island implements DataObject {
}
/**
* Get the Island Guard flag status
* Get the Island Guard flag ranking
* @param flag
* @return true or false, or false if flag is not in the list
* @return flag rank. Players must have at least this rank to bypass this flag
*/
public boolean getFlag(Flag flag){
public int getFlag(Flag flag){
if(flags.containsKey(flag)) {
return flags.get(flag);
} else {
flags.put(flag, false);
return false;
flags.put(flag, RanksManager.MEMBER_RANK);
return RanksManager.MEMBER_RANK;
}
}
/**
* @return the flags
*/
public HashMap<Flag, Boolean> getFlags() {
public HashMap<Flag, Integer> getFlags() {
return flags;
}
@ -375,18 +375,18 @@ public class Island implements DataObject {
}
/**
* Set the Island Guard flag status
* Set the Island Guard flag rank
* @param flag
* @param value
*/
public void setFlag(Flag flag, boolean value){
public void setFlag(Flag flag, int value){
flags.put(flag, value);
}
/**
* @param flags the flags to set
*/
public void setFlags(HashMap<Flag, Boolean> flags) {
public void setFlags(HashMap<Flag, Integer> flags) {
this.flags = flags;
}
@ -462,6 +462,12 @@ public class Island implements DataObject {
*/
public void setOwner(UUID owner){
this.owner = owner;
// Defensive code: demote any previous owner
for (Entry<UUID, Integer> en : members.entrySet()) {
if (en.getValue().equals(RanksManager.OWNER_RANK)) {
en.setValue(RanksManager.MEMBER_RANK);
}
}
this.members.put(owner, RanksManager.OWNER_RANK);
}
@ -516,16 +522,6 @@ public class Island implements DataObject {
this.world = world;
}
/**
* Toggles the Island Guard flag status if it is in the list
* @param flag
*/
public void toggleFlag(Flag flag){
if(flags.containsKey(flag)) {
flags.put(flag, !flags.get(flag));
}
}
/**
* @return the levelHandicap
*/
@ -649,4 +645,14 @@ public class Island implements DataObject {
public void setRanks(HashMap<UUID, Integer> ranks) {
this.members = ranks;
}
/**
* Check if a user is allowed to bypass the flag or not
* @param user - user
* @param flag - flag
* @return true if allowed, false if not
*/
public boolean isAllowed(User user, Flag flag) {
return (this.getRank(user) >= this.getFlag(flag)) ? true : false;
}
}

View File

@ -1,68 +0,0 @@
/**
*
*/
package us.tastybento.bskyblock.database.objects;
import java.util.HashMap;
import java.util.UUID;
import us.tastybento.bskyblock.api.commands.User;
/**
* A bean to hold name to UUID lookup
* @author tastybento
*
*/
public class NameToUUID implements DataObject {
public HashMap<String, UUID> namesToUUID;
public NameToUUID() {}
/**
* @return the namesToUUID
*/
public HashMap<String, UUID> getNamesToUUID() {
return namesToUUID;
}
/**
* @param namesToUUID the namesToUUID to set
*/
public void setNamesToUUID(HashMap<String, UUID> namesToUUID) {
this.namesToUUID = namesToUUID;
}
/* (non-Javadoc)
* @see us.tastybento.bskyblock.database.objects.DataObject#getUniqueId()
*/
@Override
public String getUniqueId() {
return "names-uuid";
}
/* (non-Javadoc)
* @see us.tastybento.bskyblock.database.objects.DataObject#setUniqueId(java.lang.String)
*/
@Override
public void setUniqueId(String uniqueId) {
// Do nothing
}
/**
* Add or update a name
* @param user
*/
public void addName(User user) {
this.namesToUUID.put(user.getName(), user.getUniqueId());
}
/**
* Get UUID for name
* @param name
* @return UUID or null if not found
*/
public UUID getUUID(String name) {
return this.namesToUUID.get(name);
}
}

View File

@ -9,7 +9,13 @@ import us.tastybento.bskyblock.BSkyBlock;
import us.tastybento.bskyblock.api.flags.Flag;
import us.tastybento.bskyblock.api.panels.PanelItem;
public final class FlagsManager {
public class FlagsManager {
private BSkyBlock plugin;
public FlagsManager(BSkyBlock plugin) {
this.plugin = plugin;
}
private List<Flag> flags = new ArrayList<>();
@ -17,7 +23,7 @@ public final class FlagsManager {
//TODO all the security checks
flags.add(flag);
// If there is a listener, register it into Bukkit.
flag.getListener().ifPresent(l -> Bukkit.getPluginManager().registerEvents(l, BSkyBlock.getInstance()));
flag.getListener().ifPresent(l -> plugin.getServer().getPluginManager().registerEvents(l, plugin));
}
public List<Flag> getFlags() {

View File

@ -0,0 +1,215 @@
package us.tastybento.bskyblock.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
import java.util.ArrayDeque;
import java.util.Collections;
import java.util.Deque;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* A very simplistic yml parser, that only do the following:
* <ol>
* <li>Keep track of indentation-levels and sections.</li>
* <li>Handle comments.</li>
* </ol>
*/
public class YmlCommentParser {
private static final Logger log = Logger.getLogger(YmlCommentParser.class.getName());
private static final Pattern SECTION_PATTERN = Pattern.compile("^(?<indent>\\s*)(?<name>[^ \\-][^:]*):(?<value>[^#]*)?(?<comment>#.*)?");
private static final Pattern COMMENT_PATTERN = Pattern.compile("^(?<indent>\\s*)(?<comment>#.*)");
private Map<String, String> commentMap = new HashMap<>();
public Map<String, String> getCommentMap() {
return Collections.unmodifiableMap(commentMap);
}
public void addComment(String path, String comment) {
commentMap.put(path, comment);
}
public void addComments(Map<String,String> comments) {
commentMap.putAll(comments);
}
private void readLines(BufferedReader rdr) throws IOException {
int indentLevel = 0;
Deque<Section> sections = new ArrayDeque<>();
StringBuilder comments = new StringBuilder();
String baseKey = null;
sections.add(new Section(null, 0));
String line;
int lineNum = 1;
boolean isFirstAfterSection = true;
while ((line = rdr.readLine()) != null) {
Matcher commentM = COMMENT_PATTERN.matcher(line);
Matcher sectionM = SECTION_PATTERN.matcher(line);
if (commentM.matches()) {
comments.append(commentM.group("comment") + "\n");
} else if (sectionM.matches()) {
String comment = sectionM.group("comment");
if (comment != null && !comment.trim().isEmpty()) {
comments.append(comment + "\n");
}
String name = sectionM.group("name").trim();
String value = sectionM.group("value");
String indent = sectionM.group("indent");
if (isFirstAfterSection && indent.length() > indentLevel) {
indentLevel = indent.length();
sections.peek().setIndentation(indentLevel);
} else if (indent.length() < indentLevel) {
while (indent.length() < indentLevel && !sections.isEmpty()) {
sections.pop();
baseKey = sections.peek().getPath();
indentLevel = sections.peek().getIndentation();
isFirstAfterSection = false;
}
}
String path = getPath(baseKey, name);
if (value != null && !value.trim().isEmpty()) {
// Scalar with value
addComments(path, comments);
if (!isFirstAfterSection && indent.length() > indentLevel) {
log.warning("line " + lineNum + ": mixed indentation, expected " + indentLevel + " but got " + indent.length());
}
isFirstAfterSection = false;
} else if (indent.length() >= indentLevel) {
indentLevel = indent.length();
sections.push(createSection(path, indentLevel, comments));
baseKey = path;
isFirstAfterSection = true;
}
} else if (line.trim().isEmpty()) {
// Currently gathered comments are reset - they are "floating", decoupled from sections.
comments.setLength(0);
comments.trimToSize();
}
lineNum++;
}
}
private String getPath(String baseKey, String name) {
return baseKey != null ? baseKey + "." + name : name;
}
private Section createSection(String path, int indentLevel, StringBuilder comments) {
Section section = new Section(path, indentLevel);
addComments(path, comments);
return section;
}
private void addComments(String path, StringBuilder comments) {
if (comments.length() > 0) {
commentMap.put(path, comments.toString());
comments.setLength(0);
comments.trimToSize();
}
}
public String getComment(String path) {
return commentMap.get(path);
}
/**
* Merges the comments into the "pure" yml.
* @param ymlPure A YML data-tree, without comments.
* @return A YML data-tree including comments.
*/
public String mergeComments(String ymlPure) {
StringBuilder sb = new StringBuilder();
boolean isFirstAfterSection = true;
Deque<Section> sections = new ArrayDeque<>();
sections.push(new Section(null, 0));
int indentLevel = 0;
String baseKey = null;
int lineNum = 1;
// First section shares comments with the header - so ignore that one
boolean isHeader = true;
for (String line : ymlPure.split("\n")) {
// Skip header
Matcher commentM = COMMENT_PATTERN.matcher(line);
if (isHeader && (commentM.matches() || line.trim().isEmpty())) {
continue; // Skip header
}
isHeader = false;
Matcher sectionM = SECTION_PATTERN.matcher(line);
if (sectionM.matches()) {
String name = sectionM.group("name").trim();
String value = sectionM.group("value");
String indent = sectionM.group("indent");
if (isFirstAfterSection && indent.length() > indentLevel) {
indentLevel = indent.length();
sections.peek().setIndentation(indentLevel);
} else if (indent.length() < indentLevel) {
while (indent.length() < indentLevel && !sections.isEmpty()) {
sections.pop();
baseKey = sections.peek().getPath();
indentLevel = sections.peek().getIndentation();
isFirstAfterSection = false;
}
}
String path = getPath(baseKey, name);
String comment = getComment(path);
if (comment != null) {
sb.append((lineNum > 1 ? "\n" : "") + comment
.replaceAll("^#", Matcher.quoteReplacement(indent + "#"))
.replaceAll("\n#", Matcher.quoteReplacement("\n" + indent + "#")));
}
if (value != null && !value.trim().isEmpty()) {
// Scalar with value
isFirstAfterSection = false;
} else if (indent.length() >= indentLevel) {
indentLevel = indent.length();
sections.push(new Section(path, indentLevel));
baseKey = path;
isFirstAfterSection = true;
}
}
lineNum++;
sb.append(line + "\n");
}
return sb.toString().replaceAll("\r\n", "\n").replaceAll("\n\r", "\n").replaceAll("\n", "\r\n");
}
public void load(Reader reader) throws IOException {
readLines(new BufferedReader(reader));
}
public void loadFromString(String contents) {
try {
readLines(new BufferedReader(new StringReader(contents)));
} catch (IOException e) {
throw new IllegalStateException("Unable to read from string", e);
}
}
private static class Section {
private int indentation;
private final String path;
private Section(String name, int indentation) {
this.indentation = indentation;
this.path = name;
}
public int getIndentation() {
return indentation;
}
public String getPath() {
return path;
}
public void setIndentation(int indentLevel) {
indentation = indentLevel;
}
}
}

View File

@ -0,0 +1,44 @@
package us.tastybento.bskyblock.util;
import java.util.Map;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.YamlConfiguration;
/**
* A YamlConfiguration that supports comments
*
* Note: This includes a VERY SIMPLISTIC Yaml-parser, which sole purpose is to detect and store comments.
*/
public class YmlConfiguration extends YamlConfiguration {
private YmlCommentParser commentParser = new YmlCommentParser();
public String getComment(String key) {
String comment = commentParser.getComment(key);
return comment != null ? comment.replaceAll("^# ?", "").replaceAll("\n# ?", "") : null;
}
public Map<String,String> getComments() {
return commentParser.getCommentMap();
}
public void addComment(String path, String comment) {
commentParser.addComment(path, comment);
}
public void addComments(Map<String,String> comments) {
commentParser.addComments(comments);
}
@Override
public void loadFromString(String contents) throws InvalidConfigurationException {
super.loadFromString(contents);
commentParser.loadFromString(contents);
}
@Override
public String saveToString() {
String ymlPure = super.saveToString();
return commentParser.mergeComments(ymlPure);
}
}

View File

@ -1,33 +1,22 @@
package bskyblock;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Map.Entry;
import java.util.Optional;
import java.util.Set;
import java.util.UUID;
import java.util.logging.Logger;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.ItemFactory;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor;
import org.powermock.modules.junit4.PowerMockRunner;
import us.tastybento.bskyblock.BSkyBlock;
import us.tastybento.bskyblock.Constants;
import us.tastybento.bskyblock.api.commands.CompositeCommand;
@ -35,15 +24,30 @@ import us.tastybento.bskyblock.api.commands.User;
import us.tastybento.bskyblock.api.events.IslandBaseEvent;
import us.tastybento.bskyblock.api.events.team.TeamEvent;
import us.tastybento.bskyblock.database.objects.Island;
import us.tastybento.bskyblock.lists.Flags;
import us.tastybento.bskyblock.managers.FlagsManager;
import us.tastybento.bskyblock.managers.RanksManager;
import us.tastybento.bskyblock.util.Util;
import java.util.*;
import java.util.Map.Entry;
import java.util.logging.Logger;
import static org.junit.Assert.*;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
//@RunWith(PowerMockRunner.class)
//@SuppressStaticInitializationFor("us.tastybento.BSkyBlock")
//@PrepareForTest( { BSkyBlock.class })
public class TestBSkyBlock {
private final UUID playerUUID = UUID.randomUUID();
private static CommandSender sender;
private static Player player;
private static Location location;
private static BSkyBlock plugin;
private static FlagsManager flagsManager;
@BeforeClass
public static void setUp() {
@ -72,7 +76,19 @@ public class TestBSkyBlock {
Mockito.when(location.getBlockX()).thenReturn(0);
Mockito.when(location.getBlockY()).thenReturn(0);
Mockito.when(location.getBlockZ()).thenReturn(0);
// This doesn't work!
/*
mockStatic(Bukkit.class);
ItemFactory itemFactory = PowerMockito.mock(ItemFactory.class);
PowerMockito.when(Bukkit.getItemFactory()).thenReturn(itemFactory);
PowerMockito.when(itemFactory.getItemMeta(any())).thenReturn(PowerMockito.mock(ItemMeta.class));
mockStatic(BSkyBlock.class);
flagsManager = mock(FlagsManager.class);
PowerMockito.when(BSkyBlock.getInstance()).thenReturn(plugin);
Mockito.when(plugin.getFlagsManager()).thenReturn(flagsManager);
*/
}
@Test
@ -265,8 +281,7 @@ public class TestBSkyBlock {
@Override
public boolean execute(User user, List<String> args) {
Bukkit.getLogger().info("args are " + args.toString());
if (args.size() == 3) return true;
return false;
return args.size() == 3 ? true : false;
}
}
@ -325,8 +340,37 @@ public class TestBSkyBlock {
island.removeFromBanList(member1);
assertFalse(island.getBanned().contains(member1));
//island.isAllowed(visitor, Flags.BREAK_BLOCKS);
// Protection
// Set up protection settings - members can break blocks, visitors and place blocks
// These tests do not work because of static method calls in the code and Bukkit.
/*
island.setFlag(Flags.BREAK_BLOCKS, RanksManager.MEMBER_RANK);
island.setFlag(Flags.PLACE_BLOCKS, RanksManager.VISITOR_RANK);
// Owner should be able to do anything
assertTrue(island.isAllowed(owner, Flags.PLACE_BLOCKS));
assertTrue(island.isAllowed(owner, Flags.BREAK_BLOCKS));
// Visitor can only place blocks
assertTrue(island.isAllowed(visitor, Flags.PLACE_BLOCKS));
assertFalse(island.isAllowed(visitor, Flags.BREAK_BLOCKS));
// Check if the members have capability
User mem1 = User.getInstance(member1);
User mem2 = User.getInstance(member2);
User mem3 = User.getInstance(member3);
assertTrue(island.isAllowed(mem1, Flags.PLACE_BLOCKS));
assertTrue(island.isAllowed(mem1, Flags.BREAK_BLOCKS));
assertTrue(island.isAllowed(mem2, Flags.PLACE_BLOCKS));
assertTrue(island.isAllowed(mem2, Flags.BREAK_BLOCKS));
// Member 3 is no longer a member and is a visitor
assertTrue(island.isAllowed(mem3, Flags.PLACE_BLOCKS));
assertTrue(island.isAllowed(mem3, Flags.BREAK_BLOCKS));
*/
/*
*
* Score approach: