Skip to content

Commit c936e09

Browse files
committed
fix: Cleanup argument parsing and its tests
1 parent 65ca54f commit c936e09

File tree

4 files changed

+109
-98
lines changed

4 files changed

+109
-98
lines changed

pkg/lib/traverse-set.sh

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,12 @@ bash_object.traverse-set() {
4040

4141
if [ "$flag_pass_by_what" = 'by-ref' ]; then
4242
if (( ${#args[@]} != 4)); then
43-
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "With '--ref', 4 arguments are expected (but received ${#args[@]})"
43+
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "Expected 4 arguments (with --ref), but received ${#args[@]}"
4444
return
4545
fi
4646
elif [ "$flag_pass_by_what" = 'by-value' ]; then
4747
if (( ${#args[@]} != 3)); then
48-
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "With '--value', 3 arguments are expected before '--' (but received ${#args[@]})"
48+
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "Expected 3 arguments (with --value) before '--', but received ${#args[@]})"
4949
return
5050
fi
5151
else
@@ -84,6 +84,10 @@ bash_object.traverse-set() {
8484
if [ "$final_value_type" == object ]; then
8585
local -A temp_var_name="__bash_object_${RANDOM}_$RANDOM"
8686
local -n temp_var="$temp_var_name"
87+
if [ "$1" != -- ]; then
88+
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "Must pass '--' and the value when using --value"
89+
return
90+
fi
8791
if (( $# & 1 )); then
8892
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "When passing --value with set-object, an even number of values must be passed after the '--'"
8993
return
@@ -95,7 +99,7 @@ bash_object.traverse-set() {
9599
local -a temp_var_name="__bash_object_${RANDOM}_$RANDOM"
96100
local -n temp_var="$temp_var_name"
97101
if [ "$1" != -- ]; then
98-
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "'--' must be passed"
102+
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "Must pass '--' and the value when using --value"
99103
return
100104
fi
101105
shift
@@ -105,7 +109,7 @@ bash_object.traverse-set() {
105109
local temp_var_name="__bash_object_${RANDOM}_$RANDOM"
106110
local -n temp_var="$temp_var_name"
107111
if [ "$1" != -- ]; then
108-
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "'--' must be passed"
112+
bash_object.util.die 'ERROR_ARGUMENTS_INVALID' "Must pass '--' and the value when using --value"
109113
return
110114
fi
111115
shift

tests/e2e.bats

Lines changed: 0 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -2,60 +2,6 @@
22

33
load './util/init.sh'
44

5-
# TODO do this
6-
# @test "error on more than correct 'get' arguments" {
7-
# local subcmds=(get-string get-array get-object)
8-
9-
# for subcmd in "${subcmds[@]}"; do
10-
# declare -A OBJECT=()
11-
12-
# run bobject "$subcmd" --value 'OBJECT' '.zulu.yankee' -- 'invalid'
13-
14-
# assert_failure
15-
# assert_line -p "Expected '3' arguments, but received '4'"
16-
# done
17-
# }
18-
19-
# @test "error on less than correct 'get' arguments" {
20-
# local subcmds=(get-string get-array get-object)
21-
22-
# for subcmd in "${subcmds[@]}"; do
23-
# declare -A OBJECT=()
24-
25-
# run bobject "$subcmd" --value 'invalid'
26-
27-
# assert_failure
28-
# assert_failure
29-
# assert_line -p "Expected '3' arguments, but received '2'"
30-
# done
31-
# }
32-
33-
# @test "error on more than correct 'set' arguments" {
34-
# local subcmds=(set-string set-array set-object)
35-
36-
# for subcmd in "${subcmds[@]}"; do
37-
# declare -A OBJECT=()
38-
39-
# run bobject "$subcmd" --ref 'OBJECT' '.zulu.yankee' 'xray' 'invalid'
40-
41-
# assert_failure
42-
# assert_line -p "Expected '4' arguments, but received '5'"
43-
# done
44-
# }
45-
46-
# @test "error on less than correct 'set' arguments" {
47-
# local subcmds=(set-string set-array set-object)
48-
49-
# for subcmd in "${subcmds[@]}"; do
50-
# declare -A OBJECT=()
51-
52-
# run bobject "$subcmd" --ref 'OBJECT' '.zulu'
53-
54-
# assert_failure
55-
# assert_line -p "Expected '4' arguments, but received '3'"
56-
# done
57-
# }
58-
595
@test "get-string simple parser" {
606
declare -A OBJECT=()
617
declare -A subobj=()

tests/get-errors-arguments-invalid.bats

Lines changed: 52 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,34 @@
66

77
load './util/init.sh'
88

9+
@test "error on more than correct 'get' arguments" {
10+
local subcmds=(get-string get-array get-object)
11+
12+
for subcmd in "${subcmds[@]}"; do
13+
declare -A OBJECT=()
14+
15+
run bobject "$subcmd" --value 'OBJECT' '.zulu.yankee' 'invalid'
16+
17+
assert_failure
18+
assert_line -p 'ERROR_ARGUMENTS_INVALID'
19+
assert_line -p "Expected 3 arguments, but received 4"
20+
done
21+
}
22+
23+
@test "error on less than correct 'get' arguments" {
24+
local subcmds=(get-string get-array get-object)
25+
26+
for subcmd in "${subcmds[@]}"; do
27+
declare -A OBJECT=()
28+
29+
run bobject "$subcmd" --value 'invalid'
30+
31+
assert_failure
32+
assert_line -p 'ERROR_ARGUMENTS_INVALID'
33+
assert_line -p "Expected 3 arguments, but received 2"
34+
done
35+
}
36+
937
# get
1038
@test "Error on invalid \$1" {
1139
run bobject get-blah
@@ -15,35 +43,34 @@ load './util/init.sh'
1543
assert_line -p "Subcommand 'get-blah' not recognized"
1644
}
1745

18-
# TODO: test do this
19-
# @test "Error with \$# of 2" {
20-
# run bobject get-string --value 'OBJECT'
46+
@test "Error with \$# of 2" {
47+
run bobject get-string --value 'OBJECT'
2148

22-
# assert_failure
23-
# assert_line -p "ERROR_ARGUMENTS_INVALID"
24-
# assert_line -p ", but received '2'"
25-
# }
49+
assert_failure
50+
assert_line -p "ERROR_ARGUMENTS_INVALID"
51+
assert_line -p "Expected 3 arguments, but received 2"
52+
}
2653

27-
# @test "Error with \$# of 4" {
28-
# run bobject get-string --value 'OBJECT' '.obj' extraneous
54+
@test "Error with \$# of 4" {
55+
run bobject get-string --value 'OBJECT' '.obj' extraneous
2956

30-
# assert_failure
31-
# assert_line -p "ERROR_ARGUMENTS_INVALID"
32-
# assert_line -p ", but received '4'"
33-
# }
57+
assert_failure
58+
assert_line -p "ERROR_ARGUMENTS_INVALID"
59+
assert_line -p "Expected 3 arguments, but received 4"
60+
}
3461

35-
# @test "Error on empty \$2" {
36-
# run bobject get-string --value "" '.obj'
62+
@test "Error on empty \$2" {
63+
run bobject get-string --value "" '.obj'
3764

38-
# assert_failure
39-
# assert_line -p "ERROR_ARGUMENTS_INVALID"
40-
# assert_line -p "'2' is empty"
41-
# }
65+
assert_failure
66+
assert_line -p "ERROR_ARGUMENTS_INVALID"
67+
assert_line -p "Positional parameter 2 is empty"
68+
}
4269

43-
# @test "Error on empty \$3" {
44-
# run bobject get-string --value 'OBJECT' ""
70+
@test "Error on empty \$3" {
71+
run bobject get-string --value 'OBJECT' ""
4572

46-
# assert_failure
47-
# assert_line -p "ERROR_ARGUMENTS_INVALID"
48-
# assert_line -p "'3' is empty"
49-
# }
73+
assert_failure
74+
assert_line -p "ERROR_ARGUMENTS_INVALID"
75+
assert_line -p "Positional parameter 3 is empty"
76+
}

tests/set-errors-arguments-invalid.bats

Lines changed: 49 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,32 @@
55

66
load './util/init.sh'
77

8-
@test "Error if neither '--ref' nor '--value' are passed" {
9-
run bash_object.traverse-set
8+
@test "error on more than correct 'set' arguments" {
9+
local subcmds=(set-string set-array set-object)
1010

11-
assert_failure
12-
assert_line -p "ERROR_ARGUMENTS_INVALID"
13-
assert_line -p "Must pass either the '--ref' or '--value' flag"
11+
for subcmd in "${subcmds[@]}"; do
12+
declare -A OBJECT=()
13+
14+
run bobject "$subcmd" --ref 'OBJECT' '.zulu.yankee' 'xray' 'invalid'
15+
16+
assert_failure
17+
assert_line -p 'ERROR_ARGUMENTS_INVALID'
18+
assert_line -p "Expected 4 arguments (with --ref), but received 5"
19+
done
20+
}
21+
22+
@test "error on less than correct 'set' arguments" {
23+
local subcmds=(set-string set-array set-object)
24+
25+
for subcmd in "${subcmds[@]}"; do
26+
declare -A OBJECT=()
27+
28+
run bobject "$subcmd" --ref 'OBJECT' '.zulu'
29+
30+
assert_failure
31+
assert_line -p 'ERROR_ARGUMENTS_INVALID'
32+
assert_line -p "Expected 4 arguments (with --ref), but received 3"
33+
done
1434
}
1535

1636
@test "Error on invalid \$1" {
@@ -26,79 +46,93 @@ load './util/init.sh'
2646

2747
assert_failure
2848
assert_line -p "ERROR_ARGUMENTS_INVALID"
29-
assert_line -p "(but received 1)"
49+
assert_line -p "Expected 4 arguments (with --ref), but received 1"
3050
}
3151

3252
@test "Error with --ref \$# of 2" {
3353
run bobject set-string --ref 'OBJECT'
3454

3555
assert_failure
3656
assert_line -p "ERROR_ARGUMENTS_INVALID"
37-
assert_line -p "(but received 2)"
57+
assert_line -p "Expected 4 arguments (with --ref), but received 2"
3858
}
3959

4060
@test "Error with --ref \$# of 3" {
4161
run bobject set-string --ref 'OBJECT' '.obj'
4262

4363
assert_failure
4464
assert_line -p "ERROR_ARGUMENTS_INVALID"
45-
assert_line -p "(but received 3)"
65+
assert_line -p "Expected 4 arguments (with --ref), but received 3"
4666
}
4767

4868
@test "Error with --ref \$# of 5" {
4969
run bobject set-string --ref 'OBJECT' '.obj' obj extraneous
5070

5171
assert_failure
5272
assert_line -p "ERROR_ARGUMENTS_INVALID"
53-
assert_line -p "(but received 5)"
73+
assert_line -p "Expected 4 arguments (with --ref), but received 5"
5474
}
5575

5676
@test "Error with --value \$# of 1" {
5777
run bobject set-string --value
5878

5979
assert_failure
6080
assert_line -p "ERROR_ARGUMENTS_INVALID"
61-
assert_line -p "(but received 1)"
81+
assert_line -p "Expected 3 arguments (with --value) before '--', but received 1"
6282
}
6383

6484
@test "Error with --value \$# of 2" {
6585
run bobject set-string --value 'OBJECT'
6686

6787
assert_failure
6888
assert_line -p "ERROR_ARGUMENTS_INVALID"
69-
assert_line -p "(but received 2)"
89+
assert_line -p "Expected 3 arguments (with --value) before '--', but received 2"
7090
}
7191

7292
@test "Error with --value \$# of 4" {
7393
run bobject set-string --value 'OBJECT' '.obj' obj
7494

7595
assert_failure
7696
assert_line -p "ERROR_ARGUMENTS_INVALID"
77-
assert_line -p "(but received 4)"
97+
assert_line -p "Expected 3 arguments (with --value) before '--', but received 4"
98+
}
99+
100+
@test "Error with --value if forget to pass --" {
101+
local subcmds=(set-string set-array set-object)
102+
103+
for subcmd in "${subcmds[@]}"; do
104+
declare -A OBJECT=()
105+
106+
run bobject "$subcmd" --value 'OBJECT' '.zulu'
107+
108+
assert_failure
109+
assert_line -p 'ERROR_ARGUMENTS_INVALID'
110+
assert_line -p "Must pass '--' and the value when using --value"
111+
done
78112
}
79113

80114
@test "Error on empty \$2" {
81115
run bobject set-string --ref "" '.obj' obj
82116

83117
assert_failure
84118
assert_line -p "ERROR_ARGUMENTS_INVALID"
85-
assert_line -p "2 is empty"
119+
assert_line -p "Positional parameter 2 is empty"
86120
}
87121

88122
@test "Error on empty \$3" {
89123
run bobject set-string --ref 'OBJECT' "" obj
90124

91125
assert_failure
92126
assert_line -p "ERROR_ARGUMENTS_INVALID"
93-
assert_line -p "3 is empty"
127+
assert_line -p "Positional parameter 3 is empty"
94128
}
95129

96130
@test "Error on empty \$4 --ref" {
97131
run bobject set-string --ref 'OBJECT' '.obj' ""
98132

99133
assert_failure
100134
assert_line -p "ERROR_ARGUMENTS_INVALID"
101-
assert_line -p "4 is empty"
135+
assert_line -p "Positional parameter 4 is empty"
102136
}
103137

104138
# check for type of arguments for --ref

0 commit comments

Comments
 (0)