mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 07:38:48 +00:00
Raise error on spaced UNIX-style flag with no value
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package flags
|
package flags
|
||||||
|
|
||||||
import "core:container/bit_array"
|
import "core:container/bit_array"
|
||||||
|
import "core:fmt"
|
||||||
|
|
||||||
Parsing_Style :: enum {
|
Parsing_Style :: enum {
|
||||||
// Odin-style: `-flag`, `-flag:option`, `-map:key=value`
|
// Odin-style: `-flag`, `-flag:option`, `-map:key=value`
|
||||||
@@ -71,9 +72,15 @@ parse :: proc(
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
for /**/; future_args > 0; future_args -= 1 {
|
for starting_future_args := future_args; future_args > 0; future_args -= 1 {
|
||||||
i += 1
|
i += 1
|
||||||
if i == len(args) {
|
if i == len(args) {
|
||||||
|
if future_args == starting_future_args {
|
||||||
|
return Parse_Error {
|
||||||
|
.No_Value,
|
||||||
|
fmt.tprintf("Expected a value for `%s` but none was given.", current_flag),
|
||||||
|
}
|
||||||
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
#no_bounds_check arg = args[i]
|
#no_bounds_check arg = args[i]
|
||||||
|
|||||||
@@ -1055,6 +1055,23 @@ test_unix_double_dash_variadic :: proc(t: ^testing.T) {
|
|||||||
testing.expect_value(t, s.varg[2], "5")
|
testing.expect_value(t, s.varg[2], "5")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@(test)
|
||||||
|
test_unix_no_value :: proc(t: ^testing.T) {
|
||||||
|
S :: struct {
|
||||||
|
i: int,
|
||||||
|
}
|
||||||
|
s: S
|
||||||
|
|
||||||
|
args := [?]string { "--i" }
|
||||||
|
|
||||||
|
result := flags.parse(&s, args[:], .Unix)
|
||||||
|
err, ok := result.(flags.Parse_Error)
|
||||||
|
testing.expectf(t, ok, "unexpected result: %v", result)
|
||||||
|
if ok {
|
||||||
|
testing.expect_value(t, err.reason, flags.Parse_Error_Reason.No_Value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// This test ensures there are no bad frees with cstrings.
|
// This test ensures there are no bad frees with cstrings.
|
||||||
@(test)
|
@(test)
|
||||||
test_if_dynamic_cstrings_get_freed :: proc(t: ^testing.T) {
|
test_if_dynamic_cstrings_get_freed :: proc(t: ^testing.T) {
|
||||||
|
|||||||
Reference in New Issue
Block a user