core: fix And/OrPermission losing conditional tree (#296)
This commit is contained in:
parent
5648128217
commit
9f0ff4e504
4 changed files with 30 additions and 10 deletions
|
|
@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
- Bukkit: Permission checking and syntax string for Bukkit '/help' command
|
- Bukkit: Permission checking and syntax string for Bukkit '/help' command
|
||||||
|
- And/OrPermission factory method `of` did not preserve the conditional tree
|
||||||
|
|
||||||
## [1.5.0]
|
## [1.5.0]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -50,11 +50,7 @@ public final class AndPermission implements CommandPermission {
|
||||||
* @return Constructed permission
|
* @return Constructed permission
|
||||||
*/
|
*/
|
||||||
public static @NonNull CommandPermission of(final @NonNull Collection<CommandPermission> permissions) {
|
public static @NonNull CommandPermission of(final @NonNull Collection<CommandPermission> permissions) {
|
||||||
final Set<CommandPermission> permissionSet = new HashSet<>();
|
return new AndPermission(new HashSet<>(permissions));
|
||||||
for (final CommandPermission permission : permissions) {
|
|
||||||
permissionSet.addAll(permission.getPermissions());
|
|
||||||
}
|
|
||||||
return new AndPermission(permissionSet);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -50,11 +50,7 @@ public final class OrPermission implements CommandPermission {
|
||||||
* @return Constructed permission
|
* @return Constructed permission
|
||||||
*/
|
*/
|
||||||
public static @NonNull CommandPermission of(final @NonNull Collection<CommandPermission> permissions) {
|
public static @NonNull CommandPermission of(final @NonNull Collection<CommandPermission> permissions) {
|
||||||
final Set<CommandPermission> permissionSet = new HashSet<>();
|
return new OrPermission(new HashSet<>(permissions));
|
||||||
for (final CommandPermission permission : permissions) {
|
|
||||||
permissionSet.addAll(permission.getPermissions());
|
|
||||||
}
|
|
||||||
return new OrPermission(permissionSet);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -28,13 +28,16 @@ import cloud.commandframework.execution.CommandExecutionCoordinator;
|
||||||
import cloud.commandframework.keys.SimpleCloudKey;
|
import cloud.commandframework.keys.SimpleCloudKey;
|
||||||
import cloud.commandframework.meta.CommandMeta;
|
import cloud.commandframework.meta.CommandMeta;
|
||||||
import cloud.commandframework.meta.SimpleCommandMeta;
|
import cloud.commandframework.meta.SimpleCommandMeta;
|
||||||
|
import cloud.commandframework.permission.AndPermission;
|
||||||
import cloud.commandframework.permission.CommandPermission;
|
import cloud.commandframework.permission.CommandPermission;
|
||||||
|
import cloud.commandframework.permission.OrPermission;
|
||||||
import cloud.commandframework.permission.Permission;
|
import cloud.commandframework.permission.Permission;
|
||||||
import cloud.commandframework.permission.PredicatePermission;
|
import cloud.commandframework.permission.PredicatePermission;
|
||||||
import org.junit.jupiter.api.Assertions;
|
import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.concurrent.CompletionException;
|
import java.util.concurrent.CompletionException;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
|
|
@ -89,6 +92,30 @@ class CommandPermissionTest {
|
||||||
assertTrue(manager.hasPermission(new TestCommandSender("one", "two"), test));
|
assertTrue(manager.hasPermission(new TestCommandSender("one", "two"), test));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testComplexOrPermissions() {
|
||||||
|
final CommandPermission andOne = AndPermission.of(Arrays.asList(Permission.of("perm.one"),
|
||||||
|
Permission.of("perm.two")));
|
||||||
|
final CommandPermission andTwo = AndPermission.of(Arrays.asList(Permission.of("perm.three"),
|
||||||
|
(PredicatePermission<?>) (s) -> false));
|
||||||
|
final CommandPermission orPermission = OrPermission.of(Arrays.asList(andOne, andTwo));
|
||||||
|
assertFalse(manager.hasPermission(new TestCommandSender("does.have", "also.does.have"), orPermission));
|
||||||
|
assertFalse(manager.hasPermission(new TestCommandSender("perm.one", "perm.three"), orPermission));
|
||||||
|
assertTrue(manager.hasPermission(new TestCommandSender("perm.one", "perm.two"), orPermission));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testComplexAndPermissions() {
|
||||||
|
final CommandPermission orOne = OrPermission.of(Arrays.asList(Permission.of("perm.one"),
|
||||||
|
(PredicatePermission<?>) (s) -> false));
|
||||||
|
final CommandPermission orTwo = OrPermission.of(Arrays.asList(Permission.of("perm.two"),
|
||||||
|
Permission.of("perm.three")));
|
||||||
|
final CommandPermission andPermission = AndPermission.of(Arrays.asList(orOne, orTwo));
|
||||||
|
assertFalse(manager.hasPermission(new TestCommandSender("perm.one"), andPermission));
|
||||||
|
assertTrue(manager.hasPermission(new TestCommandSender("perm.one", "perm.two"), andPermission));
|
||||||
|
assertTrue(manager.hasPermission(new TestCommandSender("perm.one", "perm.three"), andPermission));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testPredicatePermissions() {
|
void testPredicatePermissions() {
|
||||||
final AtomicBoolean condition = new AtomicBoolean(true);
|
final AtomicBoolean condition = new AtomicBoolean(true);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue