-
Notifications
You must be signed in to change notification settings - Fork 1k
Expand file tree
/
Copy pathArgAliasTest.php
More file actions
111 lines (92 loc) · 3.48 KB
/
ArgAliasTest.php
File metadata and controls
111 lines (92 loc) · 3.48 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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?php
use WP_CLI\SynopsisParser;
use WP_CLI\Tests\TestCase;
class ArgAliasTest extends TestCase {
public function test_synopsis_parser_extracts_single_alias(): void {
$params = SynopsisParser::parse( '[--with-dependencies|w]' );
$this->assertCount( 1, $params );
$param = $params[0];
$this->assertEquals( 'flag', $param['type'] );
$this->assertEquals( 'with-dependencies', $param['name'] );
$this->assertEquals( [ 'w' ], $param['aliases'] );
$this->assertTrue( $param['optional'] );
}
public function test_synopsis_parser_extracts_multiple_aliases(): void {
$params = SynopsisParser::parse( '[--verbose|v|wordy|deprecated-name]' );
$this->assertCount( 1, $params );
$param = $params[0];
$this->assertEquals( 'flag', $param['type'] );
$this->assertEquals( 'verbose', $param['name'] );
$this->assertEquals( [ 'v', 'wordy', 'deprecated-name' ], $param['aliases'] );
}
public function test_synopsis_parser_extracts_aliases_from_assoc_param(): void {
$params = SynopsisParser::parse( '[--number=<number>|n]' );
$this->assertCount( 1, $params );
$param = $params[0];
$this->assertEquals( 'assoc', $param['type'] );
$this->assertEquals( 'number', $param['name'] );
$this->assertEquals( [ 'n' ], $param['aliases'] );
$this->assertTrue( $param['optional'] );
}
public function test_synopsis_parser_no_aliases_when_absent(): void {
$params = SynopsisParser::parse( '[--verbose]' );
$this->assertCount( 1, $params );
$param = $params[0];
$this->assertEquals( 'flag', $param['type'] );
$this->assertEquals( 'verbose', $param['name'] );
$this->assertArrayNotHasKey( 'aliases', $param );
}
public function test_synopsis_parser_ignores_pipe_inside_value_brackets(): void {
// The | inside <a|b> should NOT be treated as an alias separator
$params = SynopsisParser::parse( '<plugin|zip>' );
$this->assertCount( 1, $params );
$param = $params[0];
$this->assertEquals( 'positional', $param['type'] );
$this->assertArrayNotHasKey( 'aliases', $param );
}
public function test_synopsis_parser_assoc_alias_with_pipe_in_value(): void {
// Pipe inside <...> is ignored; alias is only extracted from outside
$params = SynopsisParser::parse( '[--type=<type>|t]' );
$this->assertCount( 1, $params );
$param = $params[0];
$this->assertEquals( 'assoc', $param['type'] );
$this->assertEquals( 'type', $param['name'] );
$this->assertEquals( [ 't' ], $param['aliases'] );
}
public function test_synopsis_parser_render_includes_aliases_for_flag(): void {
$synopsis = [
[
'type' => 'flag',
'name' => 'verbose',
'aliases' => [ 'v', 'wordy' ],
'optional' => true,
'repeating' => false,
],
];
$rendered = SynopsisParser::render( $synopsis );
$this->assertEquals( '[--verbose|v|wordy]', $rendered );
}
public function test_synopsis_parser_render_includes_aliases_for_assoc(): void {
$synopsis = [
[
'type' => 'assoc',
'name' => 'number',
'aliases' => [ 'n' ],
'optional' => true,
'repeating' => false,
'value' => [
'optional' => false,
'name' => 'number',
],
],
];
$rendered = SynopsisParser::render( $synopsis );
$this->assertEquals( '[--number=<number>|n]', $rendered );
}
public function test_synopsis_roundtrip_with_aliases(): void {
$synopsis = '[--number=<number>|n] [--with-dependencies|w] [--verbose|v|wordy]';
$parsed = SynopsisParser::parse( $synopsis );
$rendered = SynopsisParser::render( $parsed );
$this->assertEquals( $synopsis, $rendered );
}
}