Skip to content

Commit 2774284

Browse files
authored
fix(annotations): allow for slash-prefixed literal aliases (#748)
1 parent e03ebf2 commit 2774284

File tree

2 files changed

+76
-2
lines changed

2 files changed

+76
-2
lines changed

cloud-annotations/src/main/java/org/incendo/cloud/annotations/SyntaxParserImpl.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,9 @@
3838
*/
3939
public final class SyntaxParserImpl implements SyntaxParser {
4040

41-
private static final Predicate<String> PATTERN_ARGUMENT_LITERAL = Pattern.compile("([A-Za-z0-9\\-_]+)(|([A-Za-z0-9\\-_]+))*")
42-
.asPredicate();
41+
private static final Predicate<String> PATTERN_ARGUMENT_LITERAL = Pattern.compile(
42+
"([A-Za-z0-9\\-_/]+)(|([A-Za-z0-9\\-_/]+))*"
43+
).asPredicate();
4344
private static final Predicate<String> PATTERN_ARGUMENT_REQUIRED = Pattern.compile("<([A-Za-z0-9\\-_]+)>")
4445
.asPredicate();
4546
private static final Predicate<String> PATTERN_ARGUMENT_OPTIONAL = Pattern.compile("\\[([A-Za-z0-9\\-_]+)]")
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
//
2+
// MIT License
3+
//
4+
// Copyright (c) 2024 Incendo
5+
//
6+
// Permission is hereby granted, free of charge, to any person obtaining a copy
7+
// of this software and associated documentation files (the "Software"), to deal
8+
// in the Software without restriction, including without limitation the rights
9+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
// copies of the Software, and to permit persons to whom the Software is
11+
// furnished to do so, subject to the following conditions:
12+
//
13+
// The above copyright notice and this permission notice shall be included in all
14+
// copies or substantial portions of the Software.
15+
//
16+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22+
// SOFTWARE.
23+
//
24+
package org.incendo.cloud.annotations.issue;
25+
26+
import org.incendo.cloud.CommandManager;
27+
import org.incendo.cloud.annotations.AnnotationParser;
28+
import org.incendo.cloud.annotations.Command;
29+
import org.incendo.cloud.annotations.TestCommandManager;
30+
import org.incendo.cloud.annotations.TestCommandSender;
31+
import org.junit.jupiter.api.BeforeEach;
32+
import org.junit.jupiter.api.Test;
33+
34+
/**
35+
* Test for https://github.com/Incendo/cloud/issues/450.
36+
*/
37+
class Issue450 {
38+
39+
private CommandManager<TestCommandSender> manager;
40+
private AnnotationParser<TestCommandSender> annotationParser;
41+
42+
@BeforeEach
43+
void setup() {
44+
this.manager = new TestCommandManager();
45+
this.annotationParser = new AnnotationParser<>(
46+
this.manager,
47+
TestCommandSender.class
48+
);
49+
}
50+
51+
@Test
52+
void testPrefixedAlias() {
53+
// Act
54+
this.annotationParser.parse(new TestCommandClass());
55+
56+
// Assert
57+
this.manager.commandExecutor().executeCommand(
58+
new TestCommandSender(),
59+
"/command"
60+
).join();
61+
this.manager.commandExecutor().executeCommand(
62+
new TestCommandSender(),
63+
"/cmd"
64+
).join();
65+
}
66+
67+
private static class TestCommandClass {
68+
69+
@Command("/command|/cmd")
70+
public void testCommand() {
71+
}
72+
}
73+
}

0 commit comments

Comments
 (0)