-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcli_toolkit.as
More file actions
93 lines (93 loc) · 3.46 KB
/
cli_toolkit.as
File metadata and controls
93 lines (93 loc) · 3.46 KB
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
import * as url from "std/url"
import * as cli from "std/cli"
import * as color from "std/color"
import * as env from "std/env"
let [parsed, e1] = url.parse("https://user:pass@example.com:8080/api/v2?limit=10&q=hello#anchor")
assert(e1 == nil)
assert(parsed.scheme == "https")
assert(parsed.host == "example.com")
assert(parsed.port == 8080)
assert(parsed.path == "/api/v2")
assert(parsed.query == "limit=10&q=hello")
assert(parsed.fragment == "anchor")
assert(parsed.username == "user")
assert(parsed.password == "pass")
let [simple, e2] = url.parse("http://localhost/health")
assert(e2 == nil)
assert(simple.scheme == "http")
assert(simple.host == "localhost")
assert(simple.port == nil)
assert(simple.query == nil)
assert(simple.fragment == nil)
let [bad, e3] = url.parse("not a url")
assert(bad == nil)
assert(e3 != nil)
assert(e3.message != nil)
let params = { page: "2", sort: "desc", q: "hello world" }
let qs = url.buildQuery(params)
let parsed_qs = url.parseQuery(qs)
assert(parsed_qs.page == "2")
assert(parsed_qs.sort == "desc")
assert(parsed_qs.q == "hello world")
let raw = "a b&c=d"
let encoded = url.encode(raw)
let [decoded, e4] = url.decode(encoded)
assert(e4 == nil)
assert(decoded == raw)
let [bad_dec, e5] = url.decode("%FF")
assert(bad_dec == nil)
assert(e5 != nil)
let [built, e6] = url.build({ scheme: "https", host: "api.example.com", path: "/v1/users" })
assert(e6 == nil)
assert(built == "https://api.example.com/v1/users")
let spec = { name: "greet", flags: [{ name: "verbose", short: "v", help: "enable verbose output" }], options: [{ name: "format", short: "f", default: "text", help: "output format" }], positionals: [{ name: "name", required: true, help: "the name to greet" }] }
let fake_args = ["--verbose", "-f", "json", "Alice"]
let [result, ce1] = cli.parse(spec, fake_args)
assert(ce1 == nil)
assert(result.flags.verbose == true)
assert(result.options.format == "json")
assert(result.positionals.name == "Alice")
assert(result.subcommand == nil)
assert(result.help == nil)
let [r2, ce2] = cli.parse(spec, ["Bob"])
assert(ce2 == nil)
assert(r2.flags.verbose == false)
assert(r2.options.format == "text")
assert(r2.positionals.name == "Bob")
let [r3, ce3] = cli.parse(spec, ["--help"])
assert(ce3 == nil)
assert(r3.help != nil)
assert(len(r3.help) > 0)
let [r4, ce4] = cli.parse(spec, [])
assert(r4 == nil)
assert(ce4 != nil)
assert(ce4.message != nil)
let [r5, ce5] = cli.parse(spec, ["--", "--not-a-flag"])
assert(ce5 == nil)
assert(r5.positionals.name == "--not-a-flag")
assert(r5.flags.verbose == false)
let red_x = color.red("x")
assert(color.strip(red_x) == "x")
let bold_hello = color.bold("hello")
assert(color.strip(bold_hello) == "hello")
assert(color.strip("plain") == "plain")
let nested = color.bold(color.red("test"))
assert(color.strip(nested) == "test")
assert(color.strip(color.green("go")) == "go")
assert(color.strip(color.blue("sky")) == "sky")
assert(color.strip(color.yellow("sun")) == "sun")
assert(color.strip(color.cyan("wave")) == "wave")
assert(color.strip(color.magenta("magic")) == "magic")
assert(color.strip(color.underline("u")) == "u")
assert(color.strip(color.dim("d")) == "d")
assert(color.strip(color.italic("i")) == "i")
assert(color.strip(color.gray("g")) == "g")
let rgb_s = color.rgb(255, 0, 128, "pink")
assert(color.strip(rgb_s) == "pink")
let bg_s = color.bgRgb(0, 128, 255, "bg")
assert(color.strip(bg_s) == "bg")
let args = env.args()
assert(type(args) == "array")
let args_count = len(args)
assert(args_count >= 0)
print("cli toolkit: all assertions passed")