diff options
Diffstat (limited to 'commando/test/src/CommandTest.scala')
-rw-r--r-- | commando/test/src/CommandTest.scala | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/commando/test/src/CommandTest.scala b/commando/test/src/CommandTest.scala new file mode 100644 index 0000000..13897ee --- /dev/null +++ b/commando/test/src/CommandTest.scala @@ -0,0 +1,221 @@ +package commando + +import utest._ + +object CommandTests extends TestSuite { + + def eval(cmd: Command, args: List[String]): Boolean = { + cmd.parse(args).isEmpty + } + + val tests = Tests { + "empty" - { + val cmd = new Command("cmd") + assert(eval(cmd, Nil)) + assert(!eval(cmd, "a" :: Nil)) + } + "positional required" - { + val cmd = new Command("cmd") { + positional("POS") + } + assert(!eval(cmd, Nil)) // no param + assert(eval(cmd, "" :: Nil)) // empty param + assert(eval(cmd, "a" :: Nil)) // one param + assert(!eval(cmd, "a" :: "b" :: Nil)) // too many params + assert(!eval(cmd, "a" :: "b" :: "c" :: Nil)) // too many params + } + "positional two" - { + val cmd = new Command("cmd") { + positional("one") + positional("two") + } + assert(!eval(cmd, Nil)) // no param + assert(!eval(cmd, "" :: Nil)) // empty param + assert(!eval(cmd, "a" :: Nil)) // one param + assert(eval(cmd, "a" :: "b" :: Nil)) // too many params + assert(!eval(cmd, "a" :: "b" :: "c" :: Nil)) // too many params + } + "positional repeated" - { + val cmd = new Command("cmd") { + positional("one").repeat() + } + assert(eval(cmd, Nil)) + assert(eval(cmd, "" :: Nil)) + assert(eval(cmd, "a" :: Nil)) + assert(eval(cmd, "a" :: "b" :: Nil)) + assert(eval(cmd, "a" :: "b" :: "c" :: Nil)) + } + "positional optional" - { + val cmd = new Command("cmd") { + positional("one").optional() + } + assert(eval(cmd, Nil)) + assert(eval(cmd, "" :: Nil)) + assert(eval(cmd, "a" :: Nil)) + assert(!eval(cmd, "a" :: "b" :: Nil)) + assert(!eval(cmd, "a" :: "b" :: "c" :: Nil)) + } + "positional combination" - { + class Cmd extends Command("cmd") { + var one: Option[String] = None + var two: Option[String] = None + positional("one") + .optional() + .action(v => one = Some(v)) + positional("two") + .repeat() + .action(v => two = Some(v)) + } + + val cmd1 = new Cmd + assert(eval(cmd1, Nil)) + assert(cmd1.one == None && cmd1.two == None) + + val cmd2 = new Cmd + assert(eval(cmd2, "" :: Nil)) + assert(cmd2.one == Some("") && cmd2.two == None) + + val cmd3 = new Cmd + assert(eval(cmd3, "a" :: Nil)) + assert(cmd3.one == Some("a") && cmd3.two == None) + + val cmd4 = new Cmd + assert(eval(cmd4, "a" :: "b" :: Nil)) + assert(cmd4.one == Some("a") && cmd4.two == Some("b")) + + val cmd5 = new Cmd + assert(eval(cmd5, "a" :: "b" :: "c" :: Nil)) + assert(cmd5.one == Some("a") && cmd5.two == Some("c")) + } + "named flag optional" - { + val cmd = new Command("cmd") { + named("param") + } + assert(eval(cmd, Nil)) + assert(!eval(cmd, "" :: Nil)) + assert(eval(cmd, "--param" :: Nil)) + assert(!eval(cmd, "--param" :: "" :: Nil)) + assert(!eval(cmd, "--param" :: "--param" :: Nil)) + assert(!eval(cmd, "--param" :: "--param" :: "a" :: Nil)) + } + "named flag required" - { + val cmd = new Command("cmd") { + named("param").require() + } + assert(!eval(cmd, Nil)) + assert(!eval(cmd, "" :: Nil)) + assert(eval(cmd, "--param" :: Nil)) + assert(!eval(cmd, "--param" :: "" :: Nil)) + assert(!eval(cmd, "--param" :: "--param" :: Nil)) + assert(!eval(cmd, "--param" :: "--param" :: "a" :: Nil)) + } + "named flag repeated" - { + val cmd = new Command("cmd") { + named("param").repeat() + } + assert(eval(cmd, Nil)) + assert(!eval(cmd, "" :: Nil)) + assert(eval(cmd, "--param" :: Nil)) + assert(!eval(cmd, "--param" :: "" :: Nil)) + assert(eval(cmd, "--param" :: "--param" :: Nil)) + assert(!eval(cmd, "--param" :: "--param" :: "a" :: Nil)) + } + "named arg" - { + class Cmd extends Command("cmd") { + var one: Option[String] = None + var two: Option[String] = None + named("one") + .arg("value") + .action(v => one = Some(v)) + positional("two") + .action(v => two = Some(v)) + } + + val cmd1 = new Cmd + assert(!eval(cmd1, Nil)) + assert(cmd1.one == None && cmd1.two == None) + + val cmd2 = new Cmd + assert(eval(cmd2, "--one=a" :: "b" :: Nil)) + assert(cmd2.one == Some("a") && cmd2.two == Some("b")) + + val cmd3 = new Cmd + assert(eval(cmd3, "b" :: "--one=a" :: Nil)) + assert(cmd3.one == Some("a") && cmd3.two == Some("b")) + + val cmd4 = new Cmd + assert(eval(cmd4, "--one" :: "a" :: "b" :: Nil)) + assert(cmd4.one == Some("a") && cmd4.two == Some("b")) + + val cmd5 = new Cmd + assert(eval(cmd5, "b" :: "--one" :: "a" :: Nil)) + assert(cmd5.one == Some("a") && cmd5.two == Some("b")) + + val cmd6 = new Cmd + assert(!eval(cmd6, "--one" :: "--a" :: "b" :: Nil)) + + val cmd7 = new Cmd + assert(!eval(cmd7, "b" :: "--one" :: Nil)) + + val cmd8 = new Cmd + assert(!eval(cmd8, "a" :: "--" :: "--one" :: Nil)) + + val cmd9 = new Cmd + assert(!eval(cmd9, "--one" :: "--" :: "--one" :: "b" :: Nil)) + + val cmd10 = new Cmd + assert(eval(cmd10, "--one=--ab" :: "b" :: Nil)) + assert(cmd10.one == Some("--ab") && cmd10.two == Some("b")) + } + "named arg optional" - { + class Cmd extends Command("cmd") { + var one: Option[String] = None + var two: Option[String] = None + named("one") + .optionalArg("value") + .action(v => one = v) + positional("two") + .action(v => two = Some(v)) + } + + val cmd1 = new Cmd + assert(!eval(cmd1, Nil)) + assert(cmd1.one == None && cmd1.two == None) + + val cmd2 = new Cmd + assert(eval(cmd2, "--one=a" :: "b" :: Nil)) + assert(cmd2.one == Some("a") && cmd2.two == Some("b")) + + val cmd3 = new Cmd + assert(eval(cmd3, "b" :: "--one=a" :: Nil)) + assert(cmd3.one == Some("a") && cmd3.two == Some("b")) + + val cmd4 = new Cmd + assert(eval(cmd4, "--one" :: "a" :: "b" :: Nil)) + assert(cmd4.one == Some("a") && cmd4.two == Some("b")) + + val cmd5 = new Cmd + assert(eval(cmd5, "b" :: "--one" :: "a" :: Nil)) + assert(cmd5.one == Some("a") && cmd5.two == Some("b")) + + val cmd6 = new Cmd + assert(!eval(cmd6, "--one" :: "--a" :: "b" :: Nil)) + + val cmd7 = new Cmd + assert(eval(cmd7, "b" :: "--one" :: Nil)) + assert(cmd7.one == None && cmd7.two == Some("b")) + + val cmd8 = new Cmd + assert(eval(cmd8, "--" :: "--one" :: Nil)) + assert(cmd8.one == None && cmd8.two == Some("--one")) + + val cmd9 = new Cmd + assert(eval(cmd9, "--one" :: "a" :: "--" :: "--one" :: Nil)) + assert(cmd9.one == Some("a") && cmd9.two == Some("--one")) + + val cmd10 = new Cmd + assert(eval(cmd10, "--one=--ab" :: "b" :: Nil)) + assert(cmd10.one == Some("--ab") && cmd10.two == Some("b")) + } + } +} |