-
Notifications
You must be signed in to change notification settings - Fork 1
/
ArgsTest.scala
93 lines (80 loc) · 2.21 KB
/
ArgsTest.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package org.hammerlab.args4s
import java.io.ByteArrayOutputStream
import org.hammerlab.paths.Path
import org.hammerlab.test.Suite
import org.kohsuke.args4j
import org.kohsuke.args4j.CmdLineParser
import scala.collection.JavaConversions._
class Args {
@args4j.Option(
name = "--str",
handler = classOf[StringOptionHandler],
usage = "An optional string"
)
var strOpt: Option[String] = None
@args4j.Option(
name = "--int",
handler = classOf[IntOptionHandler],
usage = "An int"
)
var intOpt: Option[String] = None
@args4j.Option(
name = "--path",
handler = classOf[PathHandler],
usage = "A path"
)
var path: Path = _
@args4j.Option(
name = "--path-opt",
handler = classOf[PathOptionHandler],
usage = "An optional path"
)
var pathOpt: Option[Path] = None
@args4j.Option(
name = "--strings",
handler = classOf[StringsOptionHandler],
usage = "Some strings"
)
var strings: Array[String] = Array()
@args4j.Argument(
metaVar = "<PATHS>",
multiValued = true,
handler = classOf[PathHandler],
usage = "Path arguments"
)
var paths: Array[Path] = Array()
}
class ArgsTest
extends Suite {
test("parse") {
val args = new Args
val parser = new CmdLineParser(args)
val ss = new ByteArrayOutputStream
parser.printUsage(ss)
ss.toString("UTF-8") should be(
""" <PATHS> : Path arguments
| --int INT : An int (default: None)
| --path PATH : A path
| --path-opt PATH : An optional path (default: None)
| --str VAL : An optional string (default: None)
| --strings STRING[] : Some strings
|"""
.stripMargin('|')
)
parser.parseArgument(
Seq(
"--str", "abc",
"--path", "file:///a/b/c",
"--path-opt", "dd/ee/ff",
"--strings", "aaa,bbb,ccc",
"gg/hh/ii", "file:///jj/kk"
)
)
args.strOpt should be(Some("abc"))
args.intOpt should be(None)
args.path should be(Path("file:///a/b/c"))
args.pathOpt should be(Some(Path("dd/ee/ff")))
args.strings should be(Array("aaa", "bbb", "ccc"))
args.paths should be(Array(Path("gg/hh/ii"), Path("file:///jj/kk")))
}
}