summaryrefslogtreecommitdiffstats
path: root/src/test/java/com/beust/jcommander/command/CommandAliasTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/com/beust/jcommander/command/CommandAliasTest.java')
-rw-r--r--src/test/java/com/beust/jcommander/command/CommandAliasTest.java175
1 files changed, 175 insertions, 0 deletions
diff --git a/src/test/java/com/beust/jcommander/command/CommandAliasTest.java b/src/test/java/com/beust/jcommander/command/CommandAliasTest.java
new file mode 100644
index 0000000..4eee7f2
--- /dev/null
+++ b/src/test/java/com/beust/jcommander/command/CommandAliasTest.java
@@ -0,0 +1,175 @@
+/**
+ * Copyright (C) 2010 the original author or authors.
+ * See the notice.md file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.beust.jcommander.command;
+
+import com.beust.jcommander.JCommander;
+import com.beust.jcommander.ParameterException;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.util.Arrays;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Tests command alias functionality
+ *
+ * @author rodionmoiseev
+ */
+public class CommandAliasTest {
+ @Test
+ public void oneCommandWithSingleAlias() {
+ CommandMain cm = new CommandMain();
+ JCommander jc = new JCommander(cm);
+ CommandAdd add = new CommandAdd();
+ jc.addCommand("add", add, "a");
+ jc.parse("a", "-i", "A.java");
+
+ Assert.assertEquals(jc.getParsedCommand(), "add");
+ Assert.assertEquals(jc.getParsedAlias(), "a");
+ Assert.assertEquals(add.interactive.booleanValue(), true);
+ Assert.assertEquals(add.patterns, Arrays.asList("A.java"));
+ }
+
+ @Test
+ public void oneCommandWithMultipleAliases_commit_ci() {
+ testCommitWithAlias("ci");
+ }
+
+ @Test
+ public void oneCommandWithMultipleAliases_commit_cmt() {
+ testCommitWithAlias("cmt");
+ }
+
+ private void testCommitWithAlias(String alias) {
+ CommandMain cm = new CommandMain();
+ JCommander jc = new JCommander(cm);
+ CommandCommit commit = new CommandCommit();
+ jc.addCommand("commit", commit, "ci", "cmt");
+ jc.parse(alias, "--amend", "--author", "jack", "file1.txt");
+
+ Assert.assertEquals(jc.getParsedCommand(), "commit");
+ Assert.assertEquals(jc.getParsedAlias(), alias);
+ Assert.assertEquals(commit.amend.booleanValue(), true);
+ Assert.assertEquals(commit.author, "jack");
+ Assert.assertEquals(commit.files, Arrays.asList("file1.txt"));
+ }
+
+ @Test
+ public void twoCommandsWithAliases() {
+ CommandMain cm = new CommandMain();
+ JCommander jc = new JCommander(cm);
+ CommandAdd add = new CommandAdd();
+ jc.addCommand("add", add, "a");
+ CommandCommit commit = new CommandCommit();
+ jc.addCommand("commit", commit, "ci", "cmt");
+ jc.parse("a", "-i", "A.java");
+
+ Assert.assertEquals(jc.getParsedCommand(), "add");
+ Assert.assertEquals(add.interactive.booleanValue(), true);
+ Assert.assertEquals(add.patterns, Arrays.asList("A.java"));
+ }
+
+ @Test
+ public void clashingAliasesAreNotAllowed() {
+ CommandMain cm = new CommandMain();
+ JCommander jc = new JCommander(cm);
+ CommandAdd add = new CommandAdd();
+ jc.addCommand("add", add, "xx");
+ CommandCommit commit = new CommandCommit();
+ try {
+ jc.addCommand("commit", commit, "ci", "xx");
+ Assert.fail("Should not be able to register clashing alias 'xx'");
+ } catch (ParameterException pe) {
+ //Make sure the message mentions that "xx" aliases is already
+ //defined for "add" command
+ Assert.assertTrue(pe.getMessage().contains("xx"));
+ Assert.assertTrue(pe.getMessage().contains("add"));
+ }
+ }
+
+ @Test
+ public void mainCommandReturnsNullsForGetCommandAndGetParsedAlias() {
+ CommandMain cm = new CommandMain();
+ JCommander jc = new JCommander(cm);
+ Assert.assertNull(jc.getParsedCommand());
+ Assert.assertNull(jc.getParsedAlias());
+ }
+
+ @Test
+ public void usageCanBeRetrievedWithBothCommandAndAlias() {
+ CommandMain cm = new CommandMain();
+ JCommander jc = new JCommander(cm);
+ CommandCommit commit = new CommandCommit();
+ jc.addCommand("commit", commit, "ci", "cmt");
+ StringBuilder out = new StringBuilder();
+ jc.usage("commit", out);
+ patternMatchesTimes("commit\\(ci,cmt\\)", out.toString(), 1);
+
+ out = new StringBuilder();
+ jc.usage("ci", out);
+ patternMatchesTimes("commit\\(ci,cmt\\)", out.toString(), 1);
+
+ out = new StringBuilder();
+ jc.usage("cmt", out);
+ patternMatchesTimes("commit\\(ci,cmt\\)", out.toString(), 1);
+ }
+
+ @Test
+ public void usageDisplaysCommandWithAliasesOnlyOnce() {
+ CommandMain cm = new CommandMain();
+ JCommander jc = new JCommander(cm);
+ CommandCommit commit = new CommandCommit();
+ jc.addCommand("commit", commit, "ci", "cmt");
+ StringBuilder out = new StringBuilder();
+ jc.usage(out);
+ // The usage should display this string twice: one as the command name
+ // and one after Usage:
+ patternMatchesTimes("commit\\(ci,cmt\\)", out.toString(), 2);
+ }
+
+ /**
+ * Visually test the formatting for "prettiness"
+ */
+ @Test(enabled = false, description = "TODO: test the output instead of displaying it")
+ public void formattingLooksNice(){
+ CommandMain cm = new CommandMain();
+ JCommander jc = new JCommander(cm);
+ CommandAdd add = new CommandAdd();
+ jc.addCommand("add", add, "a");
+ CommandCommit commit = new CommandCommit();
+ jc.addCommand("commit", commit, "ci", "cmt");
+ StringBuilder sb = new StringBuilder();
+ jc.usage(sb);
+ System.out.println("--- usage() formatting ---");
+ System.out.println(sb.toString());
+
+ sb = new StringBuilder();
+ jc.usage("commit", sb);
+ System.out.println("--- usage('commit') formatting ---");
+ System.out.println(sb.toString());
+ }
+
+ private void patternMatchesTimes(String pattern, String input, int times) {
+ Matcher m = Pattern.compile(pattern).matcher(input);
+ int matches = 0;
+ while (m.find()) matches++;
+ Assert.assertEquals(matches, times);
+ }
+}